为什么我要竖向对齐程序代码

为什么我要竖向对齐程序代码

最近在HackerNews上Linux内核编码风格讨论非常热闹。

讨论的进行中,我的一个回复触发了另外一场关于是否应该竖向对齐代码的口水仗。我坚持我的观点!下面让我来解释一下为什么要竖向对齐。

为什么要竖向对齐代码?

举一个简单的例子:


  1. int robert_age = 32;
  2. int annalouise_age = 25;
  3. int bob_age = 250;
  4. int dorothy_age = 56;

相较而言,下面的写法更易读:


  1. int robert_age = 32;
  2. int annalouise_age = 25;
  3. int bob_age = 250;
  4. int dorothy_age = 56;

只要用眼睛一扫,我们就能发现”bob_age”数字异常。我可以去轻松的识别这些变量都是数字,不需要拿眼睛一个个对比。

这种编码风格并不是被广泛接受。所以,我需要解释一些这种风格的好处。

代码的可读性

90%的编程活动是为了解决问题。另外90%是用来理解代码是如何解决问题的。

阅读代码跟阅读小说没多大区别。我们希望作者能把他的想法写明白,不需要陈词滥调长篇累牍,但同时要遵守所使用的语言的语法。

事实上,Linux内核编码风格里十分强调这一点。你给变量的命名同它的作用同等重要。

看一下下面的这段代码:


  1. var thinG=doIt(thestuff,MORE_sTuff); /* LOL! */

就算你是十分解这段代码,你读起它来也十分费劲。


  1. var totalBill = apply_tax(initialBill, taxRate);

通过给予变量有意义的命名,空格,大小写区分,我们能让这段代码更清晰。这意味着接手我们的代码的下一位程序员能更容易的理解它。

为什么要使用Monospace字体?

关于代码编辑器应该使用monospace字体还是proportional字体的争论,从未停息也不会停息,两派人各有所好。

有些异教徒会告诉你proportional 字体最好的——忽略这些人吧。

最终是为可读性。什么方法能最简单的帮助我们理解代码?所以IDE才会有代码高亮配色,这样你就能轻松的分辨“foo”究竟是一个函数,是一个变量,是一个常量,还是一个注释。只要是能帮助我们理解代码的东西都是好东西!

编辑器的问题

有趣的是,我遇到的很多批评的声音不是说代码竖向对齐的好坏,而是批评我的代码编辑器不行。

你这样做会破坏使用diff对比版本差异时的可读性和有效性。比如,本来只是一行是有一个变量有bug,你能为了对齐变量改动了很多行,影响了查看关键修改处。也有能够忽略空格的diff技术,但至少你这样做得不偿失。
Andreas van Cranenburgh

…还有…

假如说,你有50行代码要竖向对齐,你把所有的值对对齐距离最远的那一行,而增加一个更大距离的行,你需要修改50行。我就遇到过这样的问题,最终发现这样做是错误的。
scrollaway

他们说的是对的——在某些情况下。但关键是他们不会使用更好工具。

我记得Elastic Tabstops提供的一个技巧——如何自动对齐代码块:

columnblocks_coloured

正确的工具能轻松的完成这样的任务。计算机就是用来为我们干这些枯燥、重复的事情的-CPU的工作很廉价,我们可以“浪费”CPU的工作来让我们的代码更清晰可读。

Linux 内核代码中还有大量例子能说明竖向对齐代码能让代码更适合人类阅读。

竖向对齐代码并不是在所有情况下都适用——但对于大多数情况,它的好处是大大的。

代码是我们表达我们的思想的媒介。如果你的工具使得理解这些思想更困难,那说明工具需要改变,而不是我们。

原文发布时间:2014-12-19

本文来自云栖合作伙伴“linux中国”

时间: 2024-09-20 05:28:46

为什么我要竖向对齐程序代码的相关文章

class-同一个程序代码,不同的地方new同一个类,内存分配大小不一样

问题描述 同一个程序代码,不同的地方new同一个类,内存分配大小不一样 同样的写法 CLASS A: A* a1=new A: A *a2=new A: 两个语句在代码不同的地方执行而已 new操作符没重载 sizeof(A)得出来的结果是4760, 有人遇到过类似的问题吗,什么原因导致这样的问题, 完全没头绪!!!!!!!!! 解决方案 会不会是内存的对齐产生的问题. 解决方案二: 编译器debug优化关了没

jQuery实现的网页竖向菜单效果代码_jquery

本文实例讲述了jQuery实现的网页竖向菜单效果代码.分享给大家供大家参考.具体如下: 这是一款基于jQuery实现竖向的网页菜单代码,可折叠展开的二级网页菜单,修改一下可用在后台管理中,显示在左侧的那种管理菜单.jquery加入后方便实现了菜单展开和合拢的功能,还加入了少许动画效果,兼容性好. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-v-web-menu-style-codes/ 具体代码如下: <!DOCTYPE htm

设计-学生在线答疑排队模拟C语言版的程序代码有木有呢?

问题描述 学生在线答疑排队模拟C语言版的程序代码有木有呢? 程序设计思路: 1.主函数main( ),打印输出主控程序菜单选项,并接收用户的选择项 2.定义学生信息(学号.姓名)的数据存储结构 3.设计学生在线答疑排队模拟程序的功能函数EnQueue( ),处理新学生加入排队的情况 4.设计学生在线答疑排队模拟程序的功能函数AnsQ( ),处理队列中第一个学生出队列答疑的情况 5.设计功能函数PrintQ( ),输出队列中所有正在排队的学生信息. 6.当用户退出答疑程序时,检查队列是否为空.如仍

炉膛火焰温度的计算--单色测温法的程序代码

问题描述 炉膛火焰温度的计算--单色测温法的程序代码 单色测温法/双色测温法,请给个思路,程序代码怎么写?matlab源程序代码的编写,单色测温法的程序代码,如何建立温度场与火焰颜色的关系模型?

php判断ip黑名单程序代码实例

 这篇文章主要介绍了php判断ip黑名单程序代码实例,需要的朋友可以参考下 学校的新闻系统要求有些新闻只开放校内ip浏览,于是重写了一个代码来实现此功能,实现后的结果是,只要把允许访问的ip列入ip.txt这个文件中即可,同时支持c类ip,例如:   ip.txt 192.168 211.67.188 211.67.191.25 代码如下:    代码如下: /* * ip地址黑名单.白名单 * 判断访客地址的ip是否在ip.txt中,支持c类ip * By xhat */   $ip = $_

asp+的论坛列表程序---代码部分

asp+|程序 原作者: 雨晨asp+的论坛列表程序---代码部分 -------------------------------------------------------------------------------- [bigeagle] 于 2000-11-13 15:38:57 加贴在 Joy ASP ↑: /////////////////////////////////////////////////////////////////////////////// // // F

ASP程序代码执行时间统计类

程序|统计|执行 ASP程序代码执行时间统计类 第一次写ASP类,实现功能:分段统计程序执行时间,输出统计表等. 程序代码: Class ccClsProcessTimeRecorder''ASP程序代码执行时间统计类  Private ccInti,ccIntNonceTime,ccIntDecimal Private ccIntStartTime,ccIntEndTime,ccIntNow,ccIntNonce Private ccStrInterval,ccStrEvent,ccStrTi

PHP+MYSQL实例:网站在线人数的程序代码

PHP实例教程:网站在线人数的程序代码,后台有MYSQL数据库支持.可以直接统计出网站当前的在线人数. 首先是创建MYSQL数据库表. 以下为引用的内容:CREATE TABLE tablename (field type(max_length) DEFAULT 'default_value' (NOT) NULL} 可以使用的SQL语句. 以下为引用的内容:CREATE TABLE useronline (timestamp int(15) DEFAULT '0' NOT NULL,ip va

通用 文件保存至数据库,从数据库写入磁盘 程序代码

程序|数据|数据库 通用 文件保存至数据库,从数据库写入磁盘 程序代码 ----20040809这几天我休假中,正好有时间继续编写mycodelibrary 1.5版,今天晚上刚好写到文件与数据库存入取出模块,在论坛上此问题见的也较多,所以特此公开此部分代码,供有需者参考使用.代码虽然可以完整的正常使用,但还是需要做些错误方面的处理. '欢迎你下载使用本代码,本份代码由程序太平洋提供下载学习之用'声明:'1.本站所有代码的版权归原作者所有,如果你使用了在本站下载的源代码' 引起的一切纠纷(后果)