前言
最近因为工作,看了很多视频和源码,包括谷歌的Android Open Source Project和一些C++的视频,忽然发现一个疑惑,就是关于写类或者写函数等等的时候,需要一对花括号,左花括号的位置总是看见有两种写法:
// 风格1
if (...){
// do something
}
// 风格2
if (...)
{
// do something
}
说实在的,大家应该都觉得风格1有些怪异吧?因为有时候很难去找到配对的括号,比如如下代码:
if (a < 10){
if (k > 1){
if (s | k){
}
}
}
是不是一眼比较难看出花括号的配对,从而分辨不同的代码块?如果改成下面这样,就很容易分辨多了:
if (a < 10)
{
if (k > 1)
{
if (s | k)
{
}
}
}
记得看过哪本书写的来着,代码是给人看的,看得懂的代码才是一份好代码,但是,为什么像Android Open Source Project这种值得阅读的大型工程代码,还要用风格1这种怪异的风格呢?于是开始查资料,找原因,发现原来是确有其因。
原因
网友@昔影若梦 对它进行了研究。
1978年贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchie (K&R)合著了著名的《The C Programming Language》一书。书中推荐了一套代码编写标准,有人称之为《K&R》标准。因此,风格1我们也可以称为K&R风格,风格2我们可以称为微软风格。
而左花括号和函数名在同一行(风格1)的原因,可能和早期显示器的分辨率有关:以1981年IBM推出的第一台计算机彩色显示器标准CGA为例,它的最高分辨率为640*200。竖向分辨率居然只有200,也就是屏幕一行中可以显示的字比较多,但显示不了很多行,现在一台普通的22寸显示器的竖向分辨率是1080,大约是它的5倍!在这种情况下,屏幕空间就金贵了,K&R的风格可以省一行的空间,否则一屏根本显示不了几行代码。有时候令人非常困惑的问题,答案往往意想不到的简单!
明白了这一点,争论和疑惑就可以结束了:现在的我们,当然是更推荐用微软风格,因为K&R风格的理由已经不存在了,今天你能找到的再旧显示器分辨率恐怕也不会低于1024*768吧?所以还是要知其所以然,不能死记硬背大牛的教条,不能看到大牛这么写,就觉得它一定是好的。
结论
推荐大家用微软风格,将花括号单独放置一行:
if (...)
{
// do something
}