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

标签 coding-style

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

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

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

这是 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 我已经浪费了很多时间来简单地清理代码,但对任何人都没有用,尤其是对我来说。或者至少是那种感觉。

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

是否有“完美”的变量名,或者如果它们至少不会混淆您的代码就“没问题”吗?

谢谢,

史蒂芬·坎加斯

最佳答案

阅读 Robert C. Martin 的 Clean Code 一书

他详细介绍的一件事是命名。变量和函数名称应尽可能准确。如果您需要评论来描述它,该功能要么做得太多,要么名称更清楚。

我们的目标是让代码读起来像一个故事。更改变量和函数名称并将它们分解为多个函数或变量(如有必要)以实现此目标。

好书,一分钱一分货

关于coding-style - 关于变量/函数命名约定的思考,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1505880/

相关文章:

PowerShell 最佳实践 : Is it bad to treat a PowerShell script like an advanced batch file?

javascript - 从 Word 或其他来源粘贴时删除样式

c++ - 正则表达式:从 ANSI C++ 样式左大括号(新行)切换到 K&R 样式(与语句同一行)

mysql - 显示 html 时遇到问题

php - 在变量中的每个字符串之后使用空格是否会导致任何问题

perl - Perl 中的嵌套解引用箭头 : to omit or not to omit?

c# - 最佳实践 : When not/to use partial classes

java - 我们可以在迭代器 for 循环中添加额外的停止条件吗?

c++ - 在 C++ 代码中使用 C 风格的注释是一种不好的做法吗?

parameters - 多少个构造函数参数就太多了?