我一生都在断断续续地编码。我主要编写 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,
斯特凡·坎加斯