声明变量始终是最佳做法吗?

时间:2011-04-25 14:48:52

标签: c# variables coding-style

我是C#和任何形式的编程的新手,我有一个问题,似乎在我的大学教师中划分了那些知识。那个问题很简单:我总是要声明一个变量吗?作为我正在谈论的一个基本示例:如果我有int poundsint pence,我需要声明int money将答案放到哪里,或者只需要:

textbox1.Text = (pounds + pence).ToString();

我知道两种方法都有效,但我正在考虑最佳实践。

提前致谢。

10 个答案:

答案 0 :(得分:36)

在我看来,答案是“不”。但是,在某些情况下,您应该使用变量:

  • 每当多次使用某个值时
  • 完成对昂贵功能的调用或具有副作用的功能
  • 当表达需要更多自我解释时,变量(有意义的名称)可以帮助

基本上,请遵循您的常识。代码应该是自我解释和清晰的,如果引入变量有帮助,那么使用它们。

答案 1 :(得分:14)

维护是王道。这是软件开发中最昂贵的部分,你可以做的任何事情都可以让它变得更容易。

变量很好,因为在调试时,您可以检查函数和计算的结果。

答案 2 :(得分:6)

绝对不是。我唯一一次为这样的单次使用创建一个变量就是它显着增加了我的代码的可读性。

答案 3 :(得分:6)

在我看来,如果你做了类似

的事情
int a = SomeFunc();
int b = SomeFunc2();
int c = a + b;
SomeFunc3(c);

最好只做

int a = SomeFunc();
int b = SomeFunc2();
SomeFunc3(a + b);

甚至只是

SomeFunc3(SomeFunc() + SomeFunc2());

如果我在计算之后没有使用变量进行操作,那么我认为最好不要声明它,因为你只需要获得更多的代码行,并且当代码变大时会有更多的空间来犯错误

答案 4 :(得分:3)

变量最重要的是满足以下两个目的:

  1. 数据(及信息)的持有人
  2. 可读性增强器
  3. 当然,关于变量的工作可以说更多,但这些其他任务在这里不那么重要,而且相关性要低得多。

    就我而言,上述两点具有同等重要性。

    如果您认为声明变量会增强可读性,或者您认为存储在该变量中的数据将需要多次(并且在这种情况下,将其存储在井名var中将再次提高可读性),那么一定要创建一个新的变量。

    我唯一一次严格反对创建更多变量的建议是,当太多变量的混乱影响可读性时会更多地帮助它,并且这不能通过方法提取来解决。

答案 5 :(得分:2)

我建议日志记录经常使变量声明值得,当你需要知道具体的东西时,你需要跟踪那个特定的值。你正在伐木,不是吗?记录很好。记录是正确的。记录是自由,独特和快乐的事物。

总是使用变量。作为一个例子,如果有一个方法评估一些东西并返回true / false,我通常会返回表达式。结果记录在别处,我记录了输入,所以我总是知道发生了什么。

答案 6 :(得分:1)

这取决于具体情况。没有一种做法对所有人都是最好的。对于这么简单的事情,你可以跳过创建一个新的变量,但最好的办法是退一步看看你的表达式的可读性,看看引入一个中间变量是否有助于这种情况。

答案 7 :(得分:1)

做出这个决定有两个目标:

  • 可读性 - 代码可读 和不言自明的代码
  • 优化 - 代码没有 任何不必要的计算

如果你把它视为一个优化问题,它可能看起来不那么主观

大多数可读的比例从1到10,其中10是最简单的。使用合理的变量名称可能会给你一个2,显示在线计算可能会给你一个3(因为用户不必查看“钱”是什么,它就在那行代码中)。等等。这件作品是主观的,您和您工作的公司定义了可读性,您可以根据这种经验建立这种成本模型。

最佳执行不是主观的。如果你在任何地方写“磅+便士”,你想要钱计算,你就是在浪费处理器时间。是的,我知道添加是一个不好的例子,但它仍然适用。假设进程的最小执行被简化为变量,赋值和计算的内存分配。也许代码中的这些添加中的一个或两个可以提供可读性,但在某些时候它会成为处理器的完全浪费。这就是存在变量的原因,为存储值分配一些空间,为它命名,以便用户知道它是什么,并在任何需要的地方引用变量“money”。

当你看循环时,这更有意义。假设你想在以下循环中总计1000个值。

money = factor[1] + factor[2] + ... + factor[n]

你可以在任何想要使用价值钱的地方这样做,这样任何阅读你的代码的人都知道钱是什么,相反,只需要做一次,并在你第一次计算钱时写下一些评论,这样任何程序员都可以回来并参考。

长话短说,如果你只使用一次钱而且内联计算意味着什么,那么当然不要做变量。如果你计划在整个代码中使用它,它的含义变得远远令人困惑,那么声明一个变量,保存处理器并完成它! 注意:部分开玩笑说这种方法,只是觉得以成本模式格式回答这样的事情很有趣:)仍然有用我会说

答案 8 :(得分:1)

本地化和范围

对于程序员来说,了解局部变量 - 它们的内容和范围 - 是理解和发展代码的心理努力的重要组成部分。当您减少并发变量的数量时,您可以“释放”程序员以考虑其他因素。最小化范围是其中的一部分。每个小决定都暗示着你的计划。

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

简洁性

专注于您的计划实现的目标非常重要。如果你有很多屏幕不动产(即代码行)将字段变成变量,那么屏幕上的代码就会减少,这实际上负责完成算法级别的事情,因此对程序员来说不太明显。这是保持代码简洁的另一个原因,所以:

保持有用文档的目标和简洁

答案 9 :(得分:0)

我不记得曾见过类似的东西,我认为它更多地与编程的不同“风格”联系在一起。一些样式,例如Spartan编程实际上试图尽可能少地声明。如果您不想尝试遵循特定的风格,那么最好放弃可读性。在你的例子中,我不会声明一个特殊的变量来保存它。你根据总数的一定百分比计算税收,然后我可能 - 或者至少我会评论我在计算什么。