我已经编程了很多年,但多数都是在行业之外。我想齐心协力清理我的编程风格。
我一直在重新思考一些基本想法,这是一个 - 何时根据需要添加变量与合并/使用现有变量是否合适?
显然,如果有一个需要重新使用的中间值,那么这是添加变量的一个很好的理由。但是,当我为了可读性而添加变量时,选择并不明确。例如,在C ++中,我可能有一个看起来像这样的变量:
std::vector<std::map<char, float> > frequencies;
如果我正在迭代它,我可能会访问类似的值:
x = frequencies[i]['c']
我还可以引入一个临时变量:
std::map<char, float> curr_freq = frequencies[i];
x = curr_freq['c'];
这是一个相当简单的案例,但您可以想象更复杂的嵌套结构。我发现我没有选择其中一个的原则基础,当事情开始变得难以理解时,我会添加变量,否则不会,因为我没有这些决定的基础我的代码可能看起来不太一致。是否有更原则的基础来决定何时适合添加变量?
答案 0 :(得分:2)
我更喜欢一些SIMPLE线而不是一条COMPLEX线。
答案 1 :(得分:1)
在您的具体情况下,行:
std::map<char, float> curr_freq = frequencies[i];
实际上会通过复制存储在map
的{{1}}来创建新的map
对象。由于您只想索引容器,因此执行所有这些额外复制似乎很浪费。
如果你想引入一个临时变量(以使代码更具可读性等),但又不想创建额外的开销,你可以在数据结构中获取指针/引用:
frequencies[i]
一般来说,通过使用描述性临时变量等使代码尽可能可读是一个好主意。通过使用引用/指针等,您通常可以在不增加额外费用的情况下执行此操作。
希望这有帮助。
答案 2 :(得分:0)
你应该做的是提高代码的可读性。
其他人可能需要维护您的代码。
更重要的是,您可能需要维护代码。
答案 3 :(得分:0)
没有 如果它是一个解释器语言并且有一个微不足道的getter(我通常会避免),那么我会使用一个变量来阻止运行时的额外闭包。
在C中你需要在函数顶部定义变量,所以我会尝试将它保持在最小值。
在java / php中,它取决于我如何迭代 - foreach($ items as $ i)或foreach($ items as $ k =&gt; $ v)或foreach(Object o:objectsArray)都将创建你的局部变量,其中for($ i = 0,$ n = count($ items); $ i否则,只要代码是可读的,我就避免使用额外的变量,但是再次它也可能取决于语言。我建议 - 使用OOP,简短的方法/函数并添加注释,以便代码保持可读性,并且只在需要时使用更多变量使其更具可读性。 最重要 - 确保其他人能够理解您的代码,这就是您如何知道自己很好