首页 > 编程语言 >连载|程序员成长指南之提升代码“可读性”

连载|程序员成长指南之提升代码“可读性”

时间:2022-10-12 13:01:53浏览次数:48  
标签:case 缩进 连载 可读性 代码 空格 程序员 Tab 对齐

"IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。 

连载|程序员成长指南之提升代码“可读性”_码农


成长指南


提升代码的可读性


如何提高代码的可读性是一个永恒的话题。

通常认为程序员需要具备较强的“数学”功底,毕竟要掌握各类算法和模式都需要很强的逻辑思维能力。然而在经历了一段工作时间后,我发现程序员的“语文”能力也同样重要。《重构》一书就提出:唯有优秀的程序员才能够写出人类能理解的代码。软件的规模越来越大,一个系统通常需要几代程序员来开发维护。然而这些程序员们往往都素未谋面,只能“神交”于代码的字里行间。

提到可读性,其实涉及两个方面:一是作者的表达能力,二是读者的理解能力。比如我个人总认为自己在阅读文字时存在阅读障碍,然而阅读代码却较有心得。因为我很乐于去揣摩代码作者的意图,特别是在遇到一些很晦涩的代码时。

在实际工作中也经常听到一些程序员抱怨:这样的代码简直无法维护,还不如推倒重写。如果你也碰到这种情况,我想请你先思考,是自己的理解能力问题,还是原作者的表达能力问题?然后再决定下一步动作。同时我也总结了一条心得和读者分享:真正的高手不但要能写得出好代码,还要能驾驭得了“烂”代码。

我曾自我剖析造成阅读障碍的原因,主要是阅读量不够。我的确不爱读书,但我却读(调试)过很多开源软件代码。我接触的第一个开源软件叫SoX,它是一款Linux下的音频处理软件,支持多种音频格式。我花了很长时间去调试,不仅搞懂了它的框架和算法,还把其中一部分代码用到了自己开发的软件里。后来读了《设计模式》一书才意识到,SoX实际上是用C语言实现了一个策略(strategy)模式来支持各种音频格式。

从语文的角度看,代码的文体应该属于说明文或记叙文,要着眼于把事情说清楚,而并非诗歌、散文或小说,文中存在着很多暗喻和伏笔,需要读者揣摩。本章主要讨论表达能力方面的问题,即:代码如何能清晰地表达作者的意图,让人易于理解。

连载|程序员成长指南之提升代码“可读性”_码农_02


唐代大诗人白居易,史书评价其诗:“每成篇,必令其家老妪读之,问解则录。”意思是他每次写完诗,就会让家里的老婆婆读,老婆婆能读懂的话,才会编辑入册。


连载|程序员成长指南之提升代码“可读性”_码农_03

成长指南

连载|程序员成长指南之提升代码“可读性”_码农_03

提升代码可读性重要法则:设置缩进


我在Z公司时,公司有一条编程规范是缩进必须为4个空格。但我从来没有遵守过,一直我行我素地按照我的风格:缩进1个Tab并且在Source Insight里把Tab设置为8个空格。幸运的是从来没有人找过我的“麻烦”。

后来到了H公司也有一条相同的编程规范。当我继续按照自己的风格写代码时,Pc-lint(一种C/C++代码静态分析工具)报错了。于是不得不遵守这条规范。但在离开H公司后我还是继续按照我的风格写代码。

缩进为1个Tab并且把Tab设置为8个空格,这其实也是Linux内核的编程规范,我很认可并一直使用。这么设置至少有以下几个好处:

1)当代码嵌套层次过多时,代码就会比较靠右,这样更容易发现问题,并及时优化。

2)可以在代码编辑器中把字体设置得稍小一点,代码看起来也会很有层次。这样在单屏里面能够装下更多代码,方便阅读。

3)如果确实有人对8个空格不适应,还有折中的余地,他可以在自己的IDE中把Tab设置为4个空格。这样对大家都没有影响。

一种反对的观点认为switch…case…语句会过于靠右,因为通常的做法是case关键字较switch关键字多一层缩进。使用Tab对应8个空格作为缩进时,代码会像下面这样。

连载|程序员成长指南之提升代码“可读性”_缩进_05

case关键字和switch之间已经有了一个Tab,而case内部的处理代码又多了一个Tab,从开始写case下的主要代码时,左边就已经有了24个空格(3个Tab),使得代码更加靠右。然而通过调整switch…case…语句的排布方式可以解决这个问题,让case和switch语句对齐,像下面这样排布代码,层次清晰也没有造成多余的缩进。

连载|程序员成长指南之提升代码“可读性”_码农_06

还有一种反对的观点认为使用Tab作为缩进会令代码在不同的编辑器中排布效果不一样。比如同一份代码在Visual Studio中能对齐,但在UltraEdit中却不能对齐。

实际上就缩进而言,只要Tab和空格不混用,是不会出现上述情况的。出现上述情况是因为使用Tab键控制代码左右的间隔来达到对齐效果。比如下面这部分代码,如果在某个编辑器中是在等号“=”左边使用了若干Tab键使得“=”保持在同一竖线。那么用其他编辑器打开同一个文件时可能会出现“=”不在同一竖线的情况。比如下面的代码块在Visual Studio中对齐。

连载|程序员成长指南之提升代码“可读性”_编程规范_07

但用UltraEdit打开时可能会是如下这样,最后一个“=”没有与上面的对齐。

连载|程序员成长指南之提升代码“可读性”_编程规范_08

原因是使用Tab控制代码的左右间距时,编辑器会使用某种适配算法根据Tab键所设置的对应空格数来显示Tab的长度。不同的编辑器算法不同,因此可能存在不一样的对齐效果。而使用空格就不会出现这类情况。因此推荐使用的代码排布方式为:在缩进时使用Tab,在其他代码块对齐时使用空格。这样就能达到代码在各种编辑器中保持同样效果的目的。如下所示。

连载|程序员成长指南之提升代码“可读性”_编程规范_09

注:由于页面排版限制,本书的其余代码除特殊说明外,都使用1个Tab且Tab为4个空格的排布方式。

本文内容节选自《码农修行,编写优雅代码的32条法则》


-End-



标签:case,缩进,连载,可读性,代码,空格,程序员,Tab,对齐
From: https://blog.51cto.com/u_15143384/5749500

相关文章

  • 为什么每个程序员都需要学习算法?看了你就明白了。
    "IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。 点击蓝色微信名可快速关注我们!......
  • 收藏!想要拿到高薪Offer,数据库程序员要知道的几件事儿!
    "IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。 导语:想找到一份程序员的工作,一......
  • 从北大燕园到樱花之国,一位程序员的心路独白
    "IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。 点击蓝色微信名可快速关注我们!......
  • 【程序员必会十大算法】之动态规划算法(背包问题)
    1.动态规划算法动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动......
  • 【程序员必会十大算法】之二分查找算法
    1.递归实现①不考虑相同数/***二分查找,不考虑有相同数的情况(递归)*@paramarr*@paramleft*@paramright*@paramfindVal*@return*/publicstaticintbinarySe......
  • 【程序员必会十大算法】之分治算法(汉诺塔问题)
    1.应用分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题…直到最后子问题可以简......
  • 程序员生存定律
    注意!!!原来上传的PDF不完整,不让我重新上传,所以我把完整的PDF文档放在百度网盘了,小伙伴们也可以节省几个积分哈。链接:​​https://pan.baidu.com/s/1n8cEXY3UuNeNMlxhhCdN......
  • 程序员修炼之道:从小工到专家阅读笔记3
    注重实效的途径2.1重复的危害   1.DRY:系统中的每一项知识都是必须具有单一、无歧义、权威的表示   DRY:Donotrepeatyourself   2.文档与代码:你撰写文......
  • 程序员修炼之道: 从小工到专家笔记4
    3.基本工具花时间学习使用这些工具,有一天你将会惊奇地发现,你的手指在键盘上移动,操纵文本,却不用进行有意识的思考。工具将变成你的双手的延伸。3.5调试   1.你需要关......
  • 如何从初级程序员变成高级程序员?
      区分高级和初级程序员的标准是工作年限吗?程序员最重要的工作就是写代码吗? 高级程序员是一名犯过其领域内所有可能犯到的错误的专家。如果按照工作经验对软件开......