如何编写易于描述的代码

哈Ha!


您或您的同事多久没有几个短语来描述您自己的代码?


我提请您注意Cedd Burge的文章“如何编写易于描述的代码”的译文,他在其中分享了如何避免这种情况的建议。


图片


当很难用文字来描述代码时,大多数人不得不运用想象力来做到这一点。 因此,浪费了精力并且增加了在解释代码中出错的风险。 不同的人仍然会以自己的方式感知单词,这会在讨论代码时引起混乱。


通常,这样的讨论将为因误解而产生的错误提供沃土,并且由于相同的原因而更正这些错误通常会导致新的错误。 最后,我们得到了一个没人想使用的难以理解的代码。


难以描述的代码示例


您可能会认为代码只是一种书面语言。 如果代码看起来很简单,则可以轻松阅读,描述和理解。 但是,并非总是如此。


下面的一般决定确定一年是否为a年。


(divisibleBy(4) and not divisibleBy(100)) or divisibleBy(400) 

这是简单的代码。 它调用函数3次,具有3个运算符(和/或no)和两个嵌套级别。


但是我认为,如果给您一秒钟的时间来用单词描述这种算法,您将遇到困难。


也许“如果一年可以被4整除而不是被100整除,或者被400整除,那么它就是a年”?


问题在于,与代码不同,字面上没有括号。 因此,很难用词来充分地描述条件,并且单词“被400整除”是指“被4整除”还是“未被400整除”。 要变通解决此问题,您可以用手指定方括号,或在条件之间进行较长的停顿,但是出错的可能性仍然很大。


重构描述的代码


我们可以先用语言描述条件,然后再减少条件,使条件尽可能清晰明了。 让我们开始这样:


“ 400年是一个特例。如果年份可以被400整除,那么这是a年。100年也是一个特例。如果年份可以被100整除,那么它不是a年,除非可以被400整除,所以特殊情况的优先级是“ 400年”。如果没有特殊情况,则今年是a年,条件是将其除以4”。


听起来很清晰,但并不简洁,因此我们将文本缩短一些:
“如果年份除以400,则表示it年。 如果将其除以100,则表示这是正常年份,但是如果将其除以4,则表示是a年。”


如果将这些单词转换为代码,则会得到如下所示的内容:


 if divisbleBy(400): return LeapYear elif divisbleBy(100) return NormalYear elif divisbleBy(4): return LeapYear else: return NormalYear 

结论


几乎所有程序员都很难理解代码。 如果我们编写易于用语言描述的代码,我们将为自己和同事提供帮助。
最重要的是,以这种方式编写代码是最简单的,因为没有白费力气。 “技巧”是首先用单词描述算法,然后再用这些单词来编写代码。


在许多组织中,已经开始在验收测试或用户案例中用文字描述代码,这可以提高生产率。

Source: https://habr.com/ru/post/zh-CN472830/


All Articles