作为开发者,可能会经常听到“代码首先是写给人看的”、“写可读的代码相当重要”等等。
对于如何使代码的可读性更强,开发者往往都有自己的看法。那么你可曾仔细想过什么才能真正使代码可读性增强。
一些标准答案
无论你使用什么编程语言,你都可能会认同下面的建议可以增强代码的可读性:
好的变量、方法、类名
一个变量、类、方法只做一件事
一致的缩进,一致的格式
减少代码中的嵌套级别
当然,还有很多其他标准答案,比如 Clean Code(Robert Martin著)和Code Complete(Steve McConnell著)两本书中说的,你应该读一读。
或许你要说,这些东西我都知道。那么,下面就是一些你可能没有考虑的、关于代码可读性的更深层次的东西。
读者的经验
给我一段代码,我能在2秒内告诉你这段代码是否写得好,是否具有很强的可读性(至少我会告诉你我的意见)。
同时,如果我将我写得最好的、可读性很高的代码给一个编程新手,他们可能也不会发现这些代码与其他代码有什么不同。
虽然我的代码中有很好的、描述性的变量名,短的命名方法和少量的参数,并且它们只做一件事,各个功能结构清晰地组合在一起,但是这些新手并没有发现我的代码比其他没有考虑结构的代码好读到哪去。
事实上,我经常听到其他人抱怨我的代码中有太多的方法,难以理解,并且变量名称太长,容易混淆。
有经验的开发者与新手读代码的方式有根本的区别
一个有经验的开发者在阅读代码时不会注重编程语言本身的词汇,而会更专注于代码实际上表达的意思——代码的目的是什么,而不是它是如何做的。
而经验不足的开发者在读取代码时,会试图了解代码的实际结构,初学者则更侧重于实际的语言词汇,即代码中的编程语言试图传达的东西。
对他们来说,一个长变量名称不具备描述性,而且会令人迷惑,因为这些变量名会隐藏一些事实,比如NumberOfCoins字面上来看表示一个整型值,而实际上它不仅仅是一个整型值。他们宁愿看到名为X或编号的变量值。
而一个经验丰富的开发者,不会去关心整数、字符串和其他类型的变量,他们只想知道变量在系统、方法的逻辑上下文中表示什么,而不是变量的类型以及如何工作。
学习阅读
学习阅读代码就像是小孩子在学习阅读文章一样。他们在学习阅读时,不会去注意语法和文章传达的思想,而只会关注词语本身的结构。
又比如,一个经验丰富的音乐家可以很轻松地看懂乐谱,而初学者往往需要根据乐谱来找钢琴上对应的琴键或吉他上对应的品数。
可读性约束因素
你在表达你的想法和意见时,有可能会局限于你本身所掌握的词汇量和阅读量,同样,你代码的可读性也有可能局限于你所使用的编程语言以及编程语境。
来看个例子,下面的汇编代码会在DOS屏幕中输出“Hello World!”:
汇编代码
.model small
.stack 100h
.data
msg db 'Hello world!$'
.code
start:
mov ah, 09h ; Display the message
lea dx, msg
int 21h
mov ax, 4C00h ; Terminate the executable
int 21h
end start
语言本身的复杂性,导致编写的代码难以阅读。无论你是个多么优秀的程序员,这种代码的可读性对你来说总会有上限的。
现在再来看看C#中的Hello World:
C#代码
public class Hello1
{
public static void Main()
{
System.Console.WriteLine("Hello, World!");
}
}
下面是Ruby的:
Ruby代码
puts "Hello, world"
你知道Ruby为什么如此流行了吧!如果你了解Ruby语言中大量的词汇和语法结构,你会发现你可以很清楚地表达一个事物。
我想说的是,你拥有的词汇量越大,你表达的方式就会越简洁,可读性就越高,当然,这是对于那些同样拥有高词汇量的读者来说的。
我们可以得出什么?
从上面的内容中可以得出,我们的词汇量和经验会影响代码的可读性。我们还需要去考虑谁将阅读我们的代码,他们的词汇量和经验如何。
在C#中,通常会争论是否该使用条件运算符,比如我们应该写这样的代码:
C#代码
var nextAction = dogIsHungry ? Actions.Feed : Actions.Walk;
还是这样的:
C#代码
var nextAction = Actions.None
if(dogIsHungry)
{
nextAction = Actions.Feed
}
else
{
nextAction = Actions.Walk;
}
我以前会说第2种方式更好,但我发现我经常会写第1种。现在如果有人问我哪种好,我会告诉他“视情况而定”。我的意思是,你需要看读你代码的人是否了解条件运算符。
编程语言也如同普通语言学习,比如英语,有人认为英语中有大量的词汇和荒谬的语法,应该减少一些,这样学习起来会更容易。但是,如果这样,就难以简洁地传达信息了。
那么你认为,在开发中,应该有一种复杂的编程语言来增强开发者的表达能力,增强代码的简洁性和可读性(当然,这需要足够多的学习成本),还是应该保持简单的编程语言,来写复杂的、较长的代码呢?
分享到:
相关推荐
本文根据作者多年软件开发的经验,针对初、中级C++语言程序员和初涉C++语言的有经验的C语言程序员,从自学、教学、软件开发的角度阐述并列举了提高程序代码可读性的一些要点。希望藉此帮助C++初学者少走冤枉路,对...
java代码可读性规范,养成良好的代码规范。如何命名,注释,抽取公共方法,怎么使用合适的变量,如果优化金字塔式的循环判断
提高代码可读性的10个注释技巧,sunshine1028,即日启程,李鸿明
NULL 博文链接:https://zw7534313.iteye.com/blog/2263658
经典的des算法,纯C语言编写,功能强大,代码可读性好。帮助对加密感兴趣的朋友更好的理解des的加密过程。
编写可读性代码的艺术,指导我们如何编写可读性很强的代码,养成良好的编程习惯
为自己建立一致的命名风格,从此远离命名的困扰吧!
NULL 博文链接:https://bjyzxxds.iteye.com/blog/968090
学习windows程序设计到color2例子,发现作者写的代码可读性太差,就重新写了个
JSP+Servlet、java、mysql 开发,代码难度低,可读性高
python游戏入门儿童版六,加入类概念,提高代码可读性,代码以及相关素材
《编写可读性代码的艺术》文字版,可到http://blog.csdn.net/tiewen在线阅读。特别整理,方便自己和广大同胞添加阅读批注和摘抄引用。 如喜欢本书,请购买正版。
代码编辑器IDE(IntergratedDevelopmentEnvironment,集成开发环境)已经发展多年。它们能够很好的给我们提供方便的代码注释功能。以下我们谈谈在IDE和其它工具写注释的标准和方法。我们来看如下实例:我们在自定义...
对于想写好可读性好的代码的同学,如何养成一个好的习惯是非常重要的.
主要介绍了提高代码可读性的十大注释技巧,详细分析了编程开发中常用的代码注释方法,需要的朋友可以参考下
介绍性的代码:int clostIdx;int clostDist = Interger.MAX_VALUE;}}return clostIdx;以上代码中循环
Python 代码规范:让你的代码更具可读性和可维护性
JADX jadx - Dex to Java decompiler Command line and GUI tools for produce Java source code from Android Dex and Apk files Downloads ...latest unstable build: ...After download unpack zip file go to ...
HUSTOJ Web 完全重写版本。支持 PHP 7 ,更易用的前端交互,新增部分实用功能,提高代码可读性和可维护性。