golang规定了左大括号必须紧跟在语句后面,这样一下子就结束了各种代码风格之争.

其实golang是继承了早期的C语言,为了节省空间,才将左括号放到代码后面.

 



当时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语言书籍中是为了节省空间才将所有大括号放在代码后面的。根据
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

相关文章:

  • 2022-02-19
  • 2022-02-16
  • 2022-03-13
  • 2021-06-22
  • 2022-12-23
  • 2022-12-23
  • 2021-08-02
猜你喜欢
  • 2022-01-22
  • 2021-10-23
  • 2022-02-02
  • 2022-12-23
  • 2021-10-31
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案