【问题标题】:What is readable code? What are the best practices to follow while naming variables?什么是可读代码?命名变量时要遵循的最佳实践是什么?
【发布时间】:2009-01-17 22:20:07
【问题描述】:

你认为 x、y、z 是好的变量名吗?你将如何解释一个新程序员编写可读的代码?

【问题讨论】:

标签: naming-conventions variables


【解决方案1】:

可读代码是指 cmets 与变量和函数命名的某种组合,它允许我阅读代码一次并理解它。如果我必须不止一次地阅读它,或者花时间处理复杂的循环或函数,那么还有改进的余地。

文件和类顶部的良好摘要描述有助于为读者提供上下文和背景信息。

清晰的名称很重要。冗长的名称使得用更少的 cmets 编写可读的代码变得更加容易。

编写可读代码是一项需要一些时间来学习的技能。我个人喜欢过于冗长的名称,因为它们会创建自我记录的代码。

【讨论】:

    【解决方案2】:

    如前所述,x、y 和 z 是 3D 坐标的好变量,但可能对其他任何东西都不好......

    如果有人不认为名称很重要,只需在某些代码上使用代码混淆器,然后让他们调试它:-)。

    (顺便说一句,恕我直言,这是代码混淆器有用的唯一情况)

    【讨论】:

      【解决方案3】:

      每种编程语言的约定似乎略有不同;然而,这些天来的共识是......

      • 使用帕斯卡大小写
      • 让名字有意义
      • 以名词结尾

      这是 Microsoft 发布的 .NET 标准命名约定的 decent recap

      python 的发明者发布了一个包含命名约定的style guide

      曾经有一段时间,Microsoft VC++ 开发人员(包括我自己)实际上围绕着所谓的Hungarian Notation 团结起来

      【讨论】:

        【解决方案4】:

        当然,对此有多种思想流派,但我只会将这些用于计数器,并建议为任何其他变量提供更具描述性的名称。

        【讨论】:

          【解决方案5】:

          x、y 和 z 可以是非常好的变量名。例如,您可能正在编写参考 3D 笛卡尔坐标系引用它们的代码。这些名称通常用于此类系统中的三个轴,因此非常适合。

          【讨论】:

            【解决方案6】:

            我会给他们一些代码的维护工作,其中包含名为 x、y、z 的变量,并让他们自己意识到可读性是至关重要的......

            95% 的代码查看的不是作者,而是每个人都忘记的客户——下一个程序员。你有责任让她过上轻松的生活。

            【讨论】:

              【解决方案7】:

              好的变量名准确地描述了它们是什么,而不会过于复杂。我总是使用描述性名称,即使在循环中也是如此(例如,index 而不是 i)。它有助于跟踪正在发生的事情,尤其是当我正在重写一段特别复杂的代码时。

              【讨论】:

                【解决方案8】:

                好吧,给他们一大块糟糕的代码,然后让他们调试它。
                取如下代码(简单示例)

                <?php $a = fopen('/path/to/file.ext', 'w');$b = "NEW LINE\n";fwrite($a, $b);fclose($a);?>
                

                错误是:文件应该是日志时只包含 1 行 问题:fopen 中的 'w' 应该是 'a'

                这显然是一个超级简单的例子,如果你想给他们一个更大更复杂的例子,给他们WMD source 并要求他们在 2 小时内给你可读的代码,它会明白你的意思。

                【讨论】:

                  【解决方案9】:

                  只要 x、y 和 z 是 (3D) 笛卡尔坐标,那么它们就是好名字。

                  类似地,i、j 和 k 对于循环变量也是可以的。

                  在所有情况下,变量名都应该与数据相关

                  【讨论】:

                    【解决方案10】:

                    如果 x,y 和 z 表示 3d 坐标,或者如果它们用于迭代 2 或 3 维数组,则它们是可接受的变量名称。

                    就我而言,这段代码很好:

                    for(int x = 0; x < xsize ; x++)
                    {
                      for(int y = 0; y < ysize ; y++)
                      {
                        for(int z = 0; z < zsize ; z++)
                        {
                          DoSomething(data[x][y][z]);
                    ...
                    

                    【讨论】:

                    • 一个聪明的例子 - 找到一个 x、y 和 z 不再只是随机字母的域!
                    • 我更可能使用 i、j 和 k 来遍历 3D 表。只是感觉更“数学”。
                    【解决方案11】:

                    这是一个简短的答案,但对我来说效果很好:

                    如果它需要一个代码注释来描述它,那么重新考虑变量名。

                    所以如果很明显,为什么选择“x”,那么它们就是好名字。例如。 “i”作为循环中的变量名(通常)非常明显。

                    【讨论】:

                      【解决方案12】:

                      理想的变量名既简短(使代码更紧凑)又具有描述性(有助于理解代码)。

                      对于两者中哪一个更重要,意见不一。就个人而言,我会说这取决于变量的范围。仅在 3 行循环内使用的变量可以避免成为单个字母。 500 行类中的类字段最好是非常具有描述性的。 Spartan Programming 理念说,所有代码单元都应尽可能小,以使变量名可以非常短。

                      【讨论】:

                        【解决方案13】:

                        可读的代码和好的命名约定不是一回事!

                        一个好的变量名称是让您在不查看使用它的上下文的情况下理解(或合理猜测)变量的用途和类型的名称。因此,“x”、“y”和“z”表示坐标,因为这是一个合理的猜测。相反,一个坏名字会导致你做出错误的猜测。例如,如果“x”、“y”和“z”代表人。

                        函数的一个好名称是传达您需要了解的有关它的所有信息,而无需查阅其文档。这并不总是可能的。

                        可读代码首先是其结构可以理解的代码,即使您混淆了所有变量和函数名称。如果您这样做并且无法轻松弄清楚控制结构,那您就完蛋了。

                        一旦您拥有可读的代码和良好的命名,那么也许您将拥有真正可读的代码。

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 2017-09-29
                          • 1970-01-01
                          • 1970-01-01
                          • 2011-07-15
                          • 2018-12-03
                          • 2011-06-07
                          • 1970-01-01
                          相关资源
                          最近更新 更多