关于变量/函数命名约定的思考

2024-03-22

我一生都在断断续续地编码。我主要编写 Perl 代码,但也编写一些 Java、PHP、C、C++。我什至尝试过 Emacs Lisp,并且偶尔也编写过 shell 脚本。然而,我从来没有真正参与这个主题来获得任何专业知识——其他事情对我来说有更高的优先级。我不认为自己真正精通任何语言,除了 Perl,还有我现在正在学习的 Haskell。

最近,我一直在思考我的编码风格。不是实际代码的风格;作为一名计算机科学学生,我做项目只是为了好玩或为了学校,这使我几乎总是能够编写出我认为漂亮的代码。有一个问题一直困扰着我。这是一件相当奇怪的事情,但我仍然想听听其他意见。

事情是这样的:我发现自己花了相当多的时间来将我的函数和变量命名为我能想到的最容易理解的名称。有时,即使不考虑找到传达一段代码含义的变量名的困难,这项任务也可能非常乏味。例如,现在我正在制作一个如下所示的函数。

这是 Haskell 代码,但含义应该很清楚。 (它的确切含义并不那么重要,所以如果您愿意,只需跳过代码并继续阅读即可。)

-- return the row with least number of Nothing values
bestRow :: [[Maybe Int]] -> Int -> Maybe (Int,Int)
bestRow [] _ = Nothing
bestRow (row:rows) thisIndex
   | nextRow == Nothing && thisFilled > 8 = Nothing
   | nextRow == Nothing       = Just (thisIndex,thisFilled)
   | thisFilled >= nextFilled = Just (thisIndex,thisFilled)
   | thisFilled <  nextFilled = nextRow
     where thisFilled             = length $ filter (/= Nothing) row
           nextRow                = bestRow rows (thisIndex + 1)
           (nextIndex,nextFilled) = fromMaybe (-1,-1) nextRow

我无法决定变量名称。该函数很好地完成了它的任务,但还不够清晰。一旦确定了解决方案,我就花了 15 分钟来命名和重命名变量。我应该使用 curIndex, nextIndex ||索引,下一个索引 || ind、indN 等? 15 分钟后,我决定完成,我意识到这个功能根本不需要:我找到了一个更好的解决方案来解决我的问题。 BOOM 我浪费了很多时间来清理代码,这对任何人都没有用,尤其是对我来说。或者至少感觉是这样。

这种事不止一次发生在我身上,而且非常令人沮丧,主要是因为它让我觉得自己很愚蠢。您对这个话题有何看法?这是你经历过的事情,还是我做事的方式出了问题,或者只是不可避免的事情?

是否存在“完美”的变量名称,或者如果它们至少不会混淆您的代码就“可以”?

Thanks,

斯特凡·坎加斯


阅读 Robert C. Martin 所著的《Clean Code》一书

他详细介绍的一件事是命名。变量和函数名称应尽可能准确。如果你需要注释来描述它,那么这个函数要么做得太多,要么这个名字可以更清晰一些。

目标是让代码读起来像一个故事。如果需要实现此目标,请更改变量和函数名称并将它们分解为多个函数或变量。

很棒的书,每一分钱都值得

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于变量/函数命名约定的思考 的相关文章

  • Python函数参数:元组/列表

    我的函数需要一个列表或元组作为参数 它并不真正关心它是什么 它所做的只是将其传递给另一个接受列表或元组的函数 def func arg arg is tuple or list another func x do other stuff h
  • 使用局部变量还是内联链方法更好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如果我有一系列方法调用 每个方法的值用于下一次调用 我应该将它们存储在局部变量中 如下所示 DynamicForm filledForm For
  • 有人发布过任何 C# 4 编码标准/指南/风格指南吗?

    我了解 C 2 和 C 3 的许多编码标准和指南 但正在寻找一些针对 C 4 编写的标准和指南 我正在发布 C 4 0 的新编码指南here http csharpguidelines codeplex com releases view
  • 字符串输出:C# 中的格式还是连接?

    假设您想要输出或连接字符串 您更喜欢以下哪种风格 var p new FirstName Bill LastName Gates Console WriteLine 0 1 p FirstName p LastName Console Wr
  • C++:在小型项目的头文件中编写整个类的缺点?

    只是一个风格问题 我是一名独立工作的独立游戏开发者 我养成了在标题中编写整个类的 坏 习惯 我知道 h cpp 文件组合的一些好处是它们允许将代码分割成编译块 只要它们保持不变就不需要重新编译 并允许将接口与实现分开 然而 这些事情对我来说
  • C++ 风格与性能?

    C 风格与性能 使用 C 风格的东西 比某些 C 等价物更快 这是不好的做法吗 例如 不要使用atoi itoa atol ETC 使用std stringstream 永远不要使用原始指针 而是使用智能指针 好吧 它们真的很有用 每个人都
  • 如何覆盖 jQuery UI 小部件样式并保留功能

    我在用jQuery用户界面 http jqueryui com 对于内部应用程序 我正在寻找一种简单的方法来删除给定小部件实例上 jQuery UI 提供的所有样式信息 我对任何事情都持开放态度 但可重用的 JavaScript 解决方案将
  • 是否有任何参考资料/MSDN 教程来显示对“if (!condition)”或“if (condition == false)”的支持? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么建议在源文件末尾有空行?

    一些代码风格工具推荐这样做 我记得看到一些 unix 命令行工具警告缺少空行 多出一个空行的原因是什么 如果文本文件中的最后一行数据不是以换行符或回车符 换行符组合终止 许多旧工具会出现错误行为 他们忽略该行 因为它以 Z eof 结尾
  • 为什么标准C++库全部使用小写?

    只是好奇为什么 C 标准库使用全部小写和下划线而不是camelCase or PascalCase命名约定 就我个人而言 我发现在输入代码时后者更容易处理 但是是否有某种合法的理由使用前者 主要原因 为了保持与现有代码的兼容性 因为他们也用
  • Juval Lowy 的 C# 编码标准问题

    我喜欢并强烈推荐朱瓦尔 洛伊 http www idesign net C 编码标准 http www idesign net Downloads GetDownload 1985 Juval 明确避免了每个指令的基本原理 以保持标准的严格
  • 为什么在基于 Lisp 的语言中习惯上将许多右括号放在一行上?

    通常代码如下所示 one thing another thing arg1 f arg5 r another thing arg1 f arg5 r 为什么不喜欢这样 one thing another thing arg1 f arg5
  • 什么时候适合使用分号?

    我知道 JavaScript 以及 TypeScript 在很多情况下支持省略分号 尽管如此 我想添加分号以使其明确 如建议的那样TypeScript 深入探究 https basarat gitbooks io typescript co
  • 迭代还是使用计数器,这就是问题

    每当有人开始使用 STL 并且他们有一个向量时 您通常会看到 vector
  • 连接空字符串来进行字符串转换真的那么糟糕吗?

    假设我有两个char变量 稍后我想将它们连接成一个字符串 我就是这样做的 char c1 c2 String s c1 c2 我见过有人说 trick 是 丑陋的 等等 你应该使用String valueOf or Character to
  • Java中省略大括号可以吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我已经搜索过这个 但找不到答案 无论出于什么原因 我都羞于问教授 因为当数百人盯着你看时的感觉 无论如何 我的问题是括号的重要性是什么 如果我省
  • 如何用好Fortran语句标签?

    我正在开发一个用 Fortran 95 编写的模型 我对此完全陌生 语句标签的概念似乎很奇怪 到目前为止我只找到了标签可以由作者任意决定的解释 通常以 10 为增量 除了更容易地找出语句的结尾位置之外 这些标签还有其他实际用途吗 以及关于如
  • 主题中的文本外观

    我想将主题中的文本外观设置为 TextAppearnance Large 这是我在 styles xml 中所做的事情 我的应用程序在清单中指向这个主题 问题 我的文字仍然显示很小 问题 我在尝试在活动中使用预定义的 TextAppeara
  • 无法在 Silverlight 样式中添加系统颜色?

    我在 XAML 中为 SystemColors 定义了资源 如果我将 Foregroung 属性直接设置为 TextBlock 效果会很好 但是 如果我在样式中分配前景属性 则会收到如下所示的错误 我不确定问题是什么以及如何解决 任何想法都
  • “if”在 ASP.NET MVC View (.aspx) 文件中被认为有害?

    我记得看到一个博客 或其他内容 说你不应该在 ASP NET MVC 的 aspx 文件中使用 但我不记得它说的替代方案是什么 有人记得看过这个并指出我吗 基本上 这意味着您的视图中不应该有大量的 if 语句 您的控制器和视图模型应该能够处

随机推荐