代码格式影响代码的可读性
我认为,这个问题非常容易回答!当然会影响。用眼睛逐行扫描一下下面两段代码(从Ceylon项目中选出的),你会很容易感觉到哪个更易读。 – CeylonCreate)?
1 | function validModuleNameChar(Character c)=>c.letter||c.digit||c in [ '_' , '.' ]; |
3 | validModuleNameFirstChar(trimmedName.first else 'X' ), |
4 | trimmedName.every(validModuleNameChar), |
5 | !(trimmedName.split( '.' .equals, true , false )).containsAny(ceylonKeywords.chain { "" })) { |
1 | function validModuleNameChar( Character c ) => c.letter || c.digit || c in [ '_' , '.' ]; |
2 | if ( ! trimmedName.empty, |
3 | validModuleNameFirstChar ( trimmedName.first else 'X' ), |
4 | trimmedName.every ( validModuleNameChar ), |
5 | ! ( trimmedName.split ( '.' .equals, true , false ) ).containsAny ( ceylonKeywords.chain { "" } ) ) |
它们的区别也许很小,但如果你整天花大量的时间读大量的代码,这区别就大了。
从普通文字写作中学到的经验
说起代码的可读性,我们也许应该看看人们更普通的阅读文字的能力,这种能力已经发展了几千年,所以,应该会总结出来更好的方案!?
在“普通”的英文中,你可以看出约定俗成的对于空格的用法,而你却看不到作家们讨论他们是否应该在括号周边使用空格的问题! 那么,如果代码像“普通”英文那样编写,会是什么样子?
回到我们上面简单的例子:
1 | function validModuleNameChar( Character c ) => c.letter || c.digit || c in [ '_' , '.' ]; |
2 | if ( ! trimmedName.empty, |
3 | validModuleNameFirstChar ( trimmedName.first else 'X' ), |
4 | trimmedName.every ( validModuleNameChar ), |
5 | ! ( trimmedName.split ( '.' .equals, true , false ) ).containsAny ( ceylonKeywords.chain { "" } ) ) |
代码里大部分的东西都本普通英文句子一样。你使用括号将某些字词“分组”。你在单词和符号之间使用空格——这里我们发现了一个跟普通编码习惯不一样的地方:我们在调用方法时,方法名和之后的括号间没有空格,对象点操作符后面不留空白。
我可以理解为什么在这些地方没有空格,因为代码里这些括弧或点号表示了一种“拥有”关系,或关联关系。但真的有必要挤压这一点空间来表示这种关系吗?当我们看上面的这个例子代码时不是感觉很清晰吗?
另外一个在普通英文里不存在的东西是嵌套表达…所以,我们有普通英文写作里不会出现的情况。但这不是大问题,只需要在记住一个通用规则:在符号两边加空格。
你是不是感觉上面的代码有些奇怪?我不得不承认,看起来稍微有些不舒服,当我相信这只是我还不习惯。
虽然还不习惯,但我确定这些代码读起来更容易理解。
我可以明确的说,如果所有的代码都遵守这样的习惯,那我们程序员阅读代码的过程将会轻松的多。
结束语
我希望没有程序员会认为遵守一个预先定义的编码规范会让编程变得困难!
首先,所有的IDE都能配置成自动对代码进行格式规范调整,你写代码时可以写的很乱,但最后别忘了使用IDE里的快捷键整理一下代码,然后再提交代码。同样,我估计没有哪个作家会认为我们的写文字的格式太严,限制了他的创作。
幸运的是,我发现当前所有的编码风格、规范里对空格的使用习惯都没有大问题。但多使用一些空格肯定会让代码更清晰易读。
你觉得呢?
[英文原文:Give your code some space! ] |