阅读更多

8顶
3踩

研发管理

翻译新闻 哪种编码风格是你的“菜”

2013-02-01 17:21 by 副主编 wangguo 评论(40) 有23075人浏览
每个程序员都有自己的编码风格,这基本上都是由他们的喜好决定的,此外,程序员还乐于争论各种编码风格的优劣,比如关于Tab和空格(见《Tab v.s. 空格:一个永恒的神圣战争》、《空格“异教徒”去死》)、80列规则(见《保卫80列规则》),还有大括号的缩进风格等。

一致的编码风格,更便于阅读。因此程序员都想极力说服别人认同并使用与自己一致的编码风格。下面来了解一下我的编码风格变化历程吧,哪种编码风格是你的“菜”呢?

1980/1990年代的紧凑风格

当我开始编程时,我使用tab字符,因为使用它保存的文件更小,还可以将代码限制到80列。我还遵循Kernighan和Ritchie的《C Programming Language》一书中约定的“大括号放在同一行”规则,代码看起来是这样的:

int main(int argc, char *argv[]) {
       int a = rand() % 100;
       if (a > 25) {
               call_a_function();
               call_another_function();
       } else {
               call_b_function();
       } // end if
} // end main

当时Tab缩进默认为8个字符宽度,这意味着你不能缩进过多,以免打破“80列”宽度的限制,这也迫使你写更少、更精简的函数名或代码(这是好事)。大括号在同一行上,意味着可以在一页中显示更多的代码。

但也有一些不好的事情。我们开始使用更短的变量名,这使代码更难以阅读和维护。我们在代码行之间没有添加任何空白行,结果很难找到代码块开始和结束标记(因此我们必须在代码块结束的地方加上注释)。由于缩进太宽,留给我们的编码空间就少了。

2000年的宽松风格

在2000年,我以及周围的程序员基本上都已经切换到了微软的C/C#约定上,即使用4个空格,而不是Tab,不限制代码行的长度,大括号单独一行。如下:

int main(int argc, char *argv[])
{
   int a = rand() % 100;
 
   if (a > 25)
   {
       call_a_function();
       call_another_function();
   }
   else
   {
       call_b_function();
   }
}

空格缩进意味着我们不必处理不同编辑器中Tab大小(Tab大小可以根据用户喜好进行设置)。我们使用空行,以使代码更易于阅读。单独一行的大括号使代码块更加明显(可以很快找出开始和结束点)。

但是,这也导致了一些问题。由于行长度(大屏幕)无限制,我们不再感觉必须要限制缩进的数量,并开始创建更大更长的代码。由于当时的编辑器无法很好地格式化代码,程序员经常会在水平滚动时无法看到左侧的代码。代码变得难以阅读,并排比较更困难。

因此,在2000年初,我选择使用4个空格来缩进,依然遵循80列规则,将大括号单独放在一行中,以改善可读性。

2010年的典型风格

现在,我开始使用Xcode 4。Xcode中默认为4个空格缩进,保持不变,还可以智能格式化代码,不会出现滚动到右边看不到左边代码的情况。但是,令我郁闷的是,默认代码片段中大括号竟然不一致,有时单独一行,有时和代码共用一行。

看看默认的initWithNibName代码片段:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
   self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
   if (self) {
       self.title = NSLocalizedString(@"Detail", @"Detail");
   }
   return self;
}

事实证明,苹果没有弄错。它使用了正确的Kernighan & Ritchie风格,在早期C语言书籍中是为了节省空间才将所有大括号放在代码后面的。根据维基百科,K&R风格是:

引用
当秉承K&R时,每一个函数左括号都应在下一行中,并与开头行有相同的缩进。括号中的语句应该缩进,右括号应该与函数开头有相同的缩进,并单独一行。对于代码块内的控制语句,左括号应与控制语句在同一行中,右括号单独一行(除非有else或while关键字)。

事实上,这是典型的K&R风格,针对所有的C衍生语言,包括C++、C#和Objective-C。这是语言本身的设计者所遵循的风格。

因此,我也改变了我的括号使用风格,我仍然使用空格缩进,仍然遵循80列宽度原则,但现在更多依赖于编辑器来进行代码格式化。不过,我现在坚持真正的K&R括号风格。

int main(int argc, char *argv[])
{
   int a = rand() % 100;
     
   if (a > 25) {
       call_a_function();
       call_another_function();
   } else {
       call_b_function();
   }
}

你的编码风格是什么样?欢迎评论。

英文原文:Reprogramming My Brace Style Mind
8
3
评论 共 40 条 请登录后发表评论
20 楼 helin 2013-02-03 22:02
本座140列
19 楼 a5728238 2013-02-03 19:55
我的代码风格是:
int main(int argc, char *argv[])  
{  
   int a = rand() % 100;  
       
   if (a > 25)
   {  
       call_a_function();  
       call_another_function();  
   }
   else
   {  
       call_b_function();  
   }  
}
18 楼 jazzmozart 2013-02-03 18:41
第一种,其他的看着不太舒服
17 楼 chj738871937 2013-02-03 16:18
eclipse
16 楼 jacking124 2013-02-03 12:23
lection.yu 写道
我的风格
if(a == b){
#tab#缩进
}

一样!!
15 楼 liukai 2013-02-03 11:48
80/90风格
2000年的宽松风格对屏幕小的人太松...
14 楼 zean 2013-02-03 08:10
我喜欢整齐、对称,一直都是2000风格,但身边的朋友没有一个相同的
13 楼 Julian 2013-02-03 05:41
大括号独占一行真心太丑。鼠标滚轮磨损速度增加。
空格缩进是必须的。最关键的超长代码换行楼主没说
12 楼 ljmybfq 2013-02-02 16:34
良好的编码风格,一方面对功能的开发有好大的帮助,提高易读性;另一方面,降低维护阅读难度。
11 楼 o0rid0o 2013-02-02 12:23
基本上只会设置一下120列
(现在都宽屏了,80列会导致右面一大片的空白在那里浪费着。。。)
其他的就是Eclipse默认的代码格式化风格,我觉着挺好。。。
10 楼 MrLee23 2013-02-02 11:37
java标准编码规范+myeclipse风格
9 楼 lection.yu 2013-02-02 10:13
我的风格
if(a == b){
#tab#缩进
}
8 楼 elgs 2013-02-02 00:12
Eclipse默认风格。
7 楼 fireflyc 2013-02-01 22:25
按时代划分风格不合适,紧凑风格现在都用4个空格代替tab,120的宽度。所谓的宽松风格~~~~~~看起来像卫生巾,oc。。。。。也有风格?
6 楼 kanme818 2013-02-01 20:46
auto format风格
5 楼 icefishc 2013-02-01 20:12
这文章有些水。 写之前也不查一下。 
http://en.wikipedia.org/wiki/Indent_style
4 楼 commissioner 2013-02-01 18:01
宽松风格
3 楼 dashuang 2013-02-01 17:46
vim  = 风格
2 楼 geminiyellow 2013-02-01 17:45
遵守Resharper Ctrl + K / F 风格
1 楼 xisuchi 2013-02-01 17:32
无任何风格的路过。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • java种菜源码-Nuget:营养蔬菜检测器,从图像中进行简单的平均颜色检测

    java种菜源码纽吉特 这是一个 Nuget (营养蔬菜检测器) ...编码风格 Java 内置 - 用于构建安卓应用程序的工具 作者 Karen D. -开发人员- 执照 这个项目是在 MIT 许可下获得许可的 致谢 LKTA 团队:Amnia、Afrida

  • kr编码风格

    每个程序员都有自己的编码风格,这基本上都是由他们的喜好决定的,此外,程序员还乐于争论各种编码风格的优劣,比如关于Tab和空格(见《Tab v.s. 空格:一个永恒的神圣战争》、《空格“异教徒”去死》)、80列规则...

  • 类(创建和使用类、使用类和实例、继承、导入类、类编码风格)

    如何编写类;如何使用属性在类中存储信息,以及...你见识了如何修改实例的属性——包括直接修改以及通过方法进行修改。你还了解了:使用继承可简化相关类的创建工作;将一个类的实例用作另一个类的属性可让类更简洁。

  • 有关代码风格的问题

    之前读同学的代码,发现很多人的代码风格很成问题,读起来很费劲,这里作为一个菜鸡想发表一下自己对于代码风格的一些看法。 为啥非要按某个格式,自成一家不好嘛? 书法画作自成一家完全没问题,但在信息时代下的...

  • 用炒菜的思路搞定你的复杂分析

    在多维分析这个领域里,大体有两种风格的食客: 其一曰固定报表,可类比作去食堂吃饭,能点什么菜都固定,而且菜色不会很多,菜谱就相对好设计;   其二曰灵活查询,可类比为海鲜集市里的代客加工,一开始...

  • 【笔记】python标准库(模块random、函数randint()、函数choice())、类编码风格

    文章目录一、python标准库二、类编码风格 一、python标准库 二、类编码风格

  • 风格迁移篇---重用鉴别器进行编码:朝向无监督的图像到图像转换

    图像风格迁移

  • pythonic风格_如何编写高质量的Pythonic风格代码

    每一种语言都有它的编程风格,打个比方就像各种菜系,粤菜,川菜,淮扬菜每一种都有自己的独特风格.Python的开发者用Pythonic这个词来形容那种符合python风格的代码.这种pythonic风格的代码,既不是非常严格的规范,也...

  • 什么是真正的程序员

    文章略长,但是耐心读完,你肯定会受益良多! 第一章 (推荐看完整篇文章,再回过头看一遍第一章) 我非常幸运出生在一个电脑和电子游戏还没有普遍的时代。所以我可以和我的小伙伴们一起玩耍,同时发明属于我们的...

  • iOS开发编码规范小结

    规范编码可以提高代码的可读性,降低维护成本。作为一个程序员,要对自己写的代码负责,虽然bug无可避免,但是写代码时最基本的编码规则还是应该遵守的,否则不是坑自己就是坑别人,因为代码肯定是要维护的。 下面...

  • 汉字风格迁移篇--KAGAN:一种中国诗歌风格转换的方法

    汉字体例转移方法备受关注,如基于卷积神经网络(cnn)的方法,如Rewrite[7]和作者后来改进的方法Zi2zi[8],该方法使用...这些方法大多集中在单个汉字形象上,而忽略了像中国诗歌形象那样对汉字整体形象风格转换的需求。

  • 《鸟哥的Linux私房菜》简评

    《鸟哥的Linux私房菜》简评 这段时间都在阅读和学习《鸟哥的Linux私房菜》,到今天总算是通读了一遍,并将学习新得总结为一个系列博文Linux 之旅。 现在可以总结下这本书了,或许会为想通过这本书学习Linux的同学...

  • 图像风格迁移-DSTN

    为了克服这一限制,我们提出了一种统一的体系结构,即领域感知风格传输网络(DSTN),它不仅从给定参考图像传输风格,还传输域的属性(即域性)。为此,我们设计了一种新的域性指标,该指标从参考图像的纹理和结构...

  • 《python爬爬乐》入门篇:语法基础和编码规范

    python爬虫 这一篇有点枯燥,如果现在没兴趣或看不下去,也没关系,在后面的编程中,我们会反复使用这些基础语法。...标识符类似日常生活中给菜取名字,土豆丝炒肉丝取名叫“土豆肉丝”,土豆和肉...

  • 技术栈:小菜前端的技术栈是如何规划和演进的

    本文 Scott 以管理者的视角,与大家分享下我自 2017 年 7 月入职小菜后,与前端同学一起是如何规划团队的技术栈的,这条技术栈上的技能点又是如何在不同童鞋不同业务中生长出来的。 Scott 近两年无论是面试还是线...

  • Python3,掌握这20个小技巧,小菜鸡瞬间变成老码农~

    日常编码过程中,总结的一些小技巧,涉及到: csv文件,迭代工具,计数器,模块耗时,定向输出等操作

  • 软件工程(C编码实践篇)学习总结

    班级:软设4班 学号:SA17225449 姓名:杨双 网易云昵称:youyouyouyouyou 原创作品转载请注明出处 我的Github地址:...《软件工程(C编码实践篇)》MOOC课程:http://mooc.study.163.com/course/USTC-100000

  • 【图像压缩】基于matlab GUI Haar小波变换图像压缩(含PSNR)【含Matlab源码 9979期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

  • 【胎心率监测器】基于matlab FastICA胎儿心跳信号噪声消除【含Matlab源码 9973期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

Global site tag (gtag.js) - Google Analytics