声明变量总是最佳实践吗?
本文关键字:最佳 变量 声明 | 更新日期: 2023-09-27 17:52:43
我是c#和任何形式的编程的新手,我有一个问题,似乎在我的大学教师的那些知道。这个问题很简单:我是否总是需要声明一个变量?作为我正在谈论的一个基本例子:如果我有int pounds
和int pence
,我是否需要声明int money
来放置答案,或者只是可以有:
textbox1.Text = (pounds + pence).ToString();
我知道这两种方法都有效,但我在考虑最佳实践。
提前感谢。
我认为答案是"不"。但是,在某些情况下应该使用变量:
- 当一个值被多次使用时
- 调用开销较大的函数或调用有副作用的函数时
- 当表达式需要更自解释时,变量(具有有意义的名称)确实有帮助
基本上,遵循你的常识。代码应该是自解释的和清晰的,如果引入变量有助于这一点,那么就使用它们。
维护为王。这是软件开发中最昂贵的部分,任何能让它变得更简单的事情都是好的。
变量很好,因为在调试时,您可以检查函数和计算的结果。
绝对不行。只有在能够显著提高代码可读性的情况下,我才会为这样的单次使用创建变量。
在我看来,如果你这样做
int a = SomeFunc();
int b = SomeFunc2();
int c = a + b;
SomeFunc3(c);
最好直接做
int a = SomeFunc();
int b = SomeFunc2();
SomeFunc3(a + b);
或者只是
SomeFunc3(SomeFunc() + SomeFunc2());
如果我在计算完变量后没有对它进行操作,那么我认为最好不要声明它,因为你只会得到更多的代码行,并且当你的代码变大时,会有更多的空间犯错误
变量的作用首先是以下两个目的:
- 数据(和信息)占位符
- 可读性增强剂
如果你认为声明一个变量会提高可读性,或者如果你认为存储在该变量中的数据将被多次使用(在这种情况下,将其存储在井名var中会再次提高可读性),那么无论如何创建一个新变量。
我严格建议不要创建更多变量的唯一情况是,太多变量的混乱对可读性的影响大于对可读性的帮助,这不能通过方法提取来撤销。
我建议日志记录经常使变量声明变得有价值,当您需要知道特定的东西是什么并且需要跟踪特定的值时。你在伐木,是吗?日志记录很好。日志记录是正确的。伐木是自由和独角兽和快乐的事情。
我不总是使用变量。作为一个例子,如果有一个方法评估一些东西并返回真/假,我通常返回表达式。结果记录在其他地方,我记录了输入,所以我总是知道发生了什么。
定位和作用域
对于程序员来说,局部变量的知识——它们的内容和作用域——是理解和改进代码的精神努力的重要组成部分。当您减少并发变量的数量时,您"释放"了程序员来考虑其他因素。最小化范围是其中的一部分。每一个小小的决定都暗示着你的程序。
void f()
{
int x = ...; // "we need x (or side effect) in next scope AND
// thereafter..."
{
int n = ...; // "n isn't needed at function scope..."
...
} // can "pop" that n mentally...
...
}
最小作用域是一个文字或临时结果。如果一个值只使用一次,我更喜欢使用注释而不是变量(它们也不限于a- za -z0-9_:-)):
x = employees.find("*", // name
retirement.qualify_at(), // age
num_wives() + num_kids()); // # dependents
简洁
关注你的程序要达到的目标是很重要的。如果你有很多屏幕空间(即代码行)将字段转换为变量,那么你在屏幕上负责完成算法关卡的代码就会更少,因此对程序员来说就不那么有形了。这是保持代码简洁的另一个原因,因此:
,,,,保持有用文档有针对性且简洁
这要视情况而定。没有一种做法对所有人都是最好的。对于这么简单的事情,您可以跳过创建新变量,但最好的做法是后退一步,看看您的表达式的可读性如何,并看看引入一个中间变量是否会有所帮助。
做这个决定有两个目的:
- 可读性——代码是可读的和自解释代码
- 优化-代码没有任何不必要的计算
如果你把它看作一个优化问题,它可能看起来不那么主观
在1到10的范围内最易读,10代表最容易读。使用合理的变量名可能会给你一个2,在行中显示计算可能会给你一个3(因为用户不需要查找"钱"是什么,它就在那行代码中)。等等。这部分是主观的,你和你工作的公司定义什么是可读的,你可以根据这种经验建立这个成本模型。
大多数最佳执行都不是主观的。如果您在要进行货币计算的任何地方都写"pounds + pence",那么您就是在浪费处理器时间。是的,我知道加法是一个不好的例子,但它仍然是正确的。假设将进程的最小执行简化为变量、赋值和计算的内存分配。也许在代码中添加一两个这样的东西对于可读性来说是可以的,但是在某种程度上,这对处理器来说是一种完全的浪费。这就是变量存在的原因,分配一些空间来存储值,将其命名为money以便用户知道它是什么,并在需要的任何地方引用变量"money"。
这在您查看循环时更有意义。假设你想在下面的循环中对1000个值求和。
money = factor[1] + factor[2] + ... + factor[n]
你可以在任何你想使用money值的地方这样做,这样任何读你代码的人都知道money是由什么组成的,相反,只做一次,并在你第一次计算money时写一些注释,这样任何程序员都可以回来引用它。
长话短说,如果您只使用一次money,并且很清楚内联计算的含义,那么当然不要创建变量。如果您计划在整个代码中使用它,并且它的含义变得非常混乱,那么声明一个变量,保存处理器并完成它!注意:这种方法有点开玩笑,只是觉得用成本模型的形式来回答这样的问题很有趣:)仍然很有用,我要说
我不记得曾经见过这样的东西,我认为它更多地与不同的编程"风格"有关。有些风格,比如Spartan编程实际上试图尽可能少地声明。如果你不想遵循特定的风格,那么最好放弃可读性。在你的例子中,我不会声明一个特殊的变量来保存它。如果你是根据这些总额的某个百分比来计算税收,那么我可能-或者至少我会评论一下我在计算什么。