我一生都在编码.我主要编写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 || index,nextIndex || ind,indN等?在我决定完成后15分钟,我意识到毕竟不需要这个功能:我找到了一个更好的解决方案来解决我的问题.BOOM我花了很多时间简单地清理代码,对任何人都没用,至少对我来说都是如此.或者至少感觉就是这样.
这种情况不止一次发生在我身上,令人非常沮丧,主要是因为它让我感到愚蠢.你对这个问题有什么看法?这是你经历过的事情,我的做事方式有问题,还是只是不可避免的事情?
是否存在"完美"变量名称,或者如果它们至少不混淆您的代码,它是否"正常"?
谢谢,
Stefan Kangas
阅读Robert C. Martin的书"清洁代码"
他详细介绍的一件事是命名.变量和函数名称应尽可能精确.如果您需要注释来描述它,该函数要么做得太多,要么名称可以更清晰.
目标是让代码看起来像一个故事.更改变量和函数名称,并在必要时将其分解为若干函数或变量以实现此目标.
好书,值得每一分钱