【发布时间】:2009-10-01 19:11:57
【问题描述】:
我一生都在编码。我主要编写 Perl,但也编写了一些 Java、PHP、C、C++。我什至尝试过 Emacs Lisp,并且偶尔会编写 shell 脚本。然而,我从来没有真正参与过这个主题来获得任何专业知识——其他事情对我来说有更高的优先级。我不认为自己真正精通任何语言,除了 Perl,还有我现在正在学习的 Haskell。
最近,我一直在思考我的编码风格。不是实际代码的风格;作为一名 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 我浪费了很多时间,只是简单地清理代码对任何人都没有用,尤其是对我来说。或者至少感觉是这样的。
这件事发生在我身上不止一次,而且非常令人沮丧,主要是因为它让我感到愚蠢。你对这个话题有什么看法?这是你经历过的事情,是我做事方式有问题还是只是不可避免的事情?
是否有“完美”的变量名称,或者如果它们至少不会混淆您的代码,它是否“可以”?p>
谢谢,
斯蒂芬·康加斯
【问题讨论】:
-
与不清理并保留它相比,清理坏代码然后将其丢弃所浪费的时间可能更少。我希望和我一起工作的人和你一样担心变量命名。
标签: coding-style