阅读更多

8顶
3踩

研发管理

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

2013-02-01 17:21 by 副主编 wangguo 评论(40) 有23211人浏览
每个程序员都有自己的编码风格,这基本上都是由他们的喜好决定的,此外,程序员还乐于争论各种编码风格的优劣,比如关于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

  • 基于NSGA2与熵权TOPSIS的电力系统储能选址定容优化及Matpower潮流计算研究

    内容概要:本文详细探讨了利用NSGA2算法进行电力系统中储能系统的选址和定容优化,并结合熵权TOPSIS方法选择最优解。首先介绍了使用Matpower工具包进行潮流计算的基础步骤,随后深入讨论了储能系统引入后的复杂性和优化目标设定。文中展示了如何构建目标函数,包括储能的投资成本和系统电压偏差,并详细解释了NSGA2算法的具体实现,如种群初始化、交叉变异操作以及约束条件处理。最后,通过熵权法确定权重并应用TOPSIS方法对多个优化结果进行评估,选出综合性能最佳的储能配置方案。 适合人群:从事电力系统规划、优化算法研究的专业人士,尤其是对储能系统优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要解决电力系统中储能系统选址和定容问题的实际工程项目。主要目标是在满足系统稳定性要求的前提下,最小化储能系统的投资成本,提高系统的经济性和可靠性。 其他说明:文章提供了详细的代码片段和理论推导,帮助读者更好地理解和实施所提出的优化方法。此外,还提到了一些实际应用中的注意事项,如SOC约束处理、参数选择等,为后续的研究和应用提供了宝贵的实践经验。

  • 基于python+pyqt5实现视频自动化下载、剪辑和上传系统源码+项目说明.zip

    基于python+pyqt5实现视频自动化下载、剪辑和上传系统源码+项目说明.zip 该项目是用脚本实现部分视频网站视频内容的自动化下载、剪辑以及上传,其中界面是用PyQT做的。 使用的浏览器驱动是undetected_chromedriver,可以跳过tiktok的机器人检查 使用的浏览器是91,版本:Google_Chrome_(64bit)_v91.0.4472.77 【功能】 自动从各种视频网站下载视频 支持视频剪辑和合集制作 支持自动上传视频到视频网站 技术栈 Python PyQT undetected_chromedriver

Global site tag (gtag.js) - Google Analytics