程序风格,这通常会引起一些争论,但是无论使用哪种风格,其目的都是为了便于代码的阅读和理解。
人们往往根据视觉线索习惯的不同来评价一门编程风格的好坏,所以这种评价是带有主观色彩的。我以前
读过一本为提高代码质量的而写的书籍,其中作者以自己的编程风格来说明何种风格的好坏,这种带有一
定客观性质的主观色彩的言论,我无法产生认同感——我本人使用的编程风格是Linux内核中的编程风格,
这是由于我大学某年暑假的时候抄写完了某个版本的Linux内核的代码的缘故。
关于编程风格的争论在以前确实很多,而近些年来的争论我就不得而知了,毕竟本人接触程序设计的
时间也不长,所以不能准确地说明这些问题。但是我想说的是,坚持你认为对的并且对大多人的阅读没有
障碍的风格,这才是最重要的。只有通过坚持阅读和书写大量的代码你才会发现各种代码风格的优劣之处,
然后就会对各种代码风格有自己的见解,自然对阅读各种约定俗成的风格的代码就不会产生别扭的情绪。
就拿我自己的情况来说,虽然我自己使用Linux内核风格,但是我也会为了便于他人的阅读和理解而采
用其他约定俗成的风格来写代码,这对我而言并不是一种别扭的事情,反倒是一种轻松的事情。所以,请
不要以个人的主观看法来强加给别人,这无异于一种洗脑。但这并不意味着我提倡使用“自由”的风格来书
写代码,因为过度追求自由会带来糟糕的垃圾代码。
说到垃圾代码,这又让我想起了身边一些程序员的例子,但是我并不打算说这些例子,而是以一种近似
于工程技术的角度来说明如何书写代码才能最大限度减少错误代码的产生。
大家都知道的一个事实就是,如果你想建造一栋楼房,那么你得从设计图开始,从设计草图到施工图,
期间会经历很多环节。这些环节放在软件工程的角度来看,就是需求分析、可行性研究分析、概要设计、详
细设计等等,当然了,我说这些并不是说你写个程序就要把这些环节全部都实施一边,毕竟这些环节的工作
量实在是太大了,即使编写一个小小的程序,如果要按照这些步骤来实施一边也会让你惊呼,“天啦,这简直
就是在折磨人。”但是我建议大家一个小技巧,那就是把整个算法的流程来画一遍,即使不把整个算法的流
程画一遍,那也该把整个程序的大概流程画一遍,这样你就能对整个程序有个全局的认知,对在编写代码的
时候,尤其是你写到有些混乱时再回过头来看看这个大概的流程图,这时你就发现这是一件多么令人愉快的东
西了。当然了,如果你是天才,那就当我没说过这些话;可是如果你犯一些低级错误的时候,或许就会暗骂
自己为什么会犯这么低级错误的时候,但是你有没有想过那些看似不起眼的流程图呢?
最后还有一个小技巧想分享给大家。但是在此之前,我想问问大家,大家如何使用C语言来写一个“Hello
World!”程序?我并不想把我的主观经验强加给大家,所以我只是在这里把我的经验展示给大家,至于能不能
入得了您的法眼那就是另外一回事了。
在这里,自然不需要画流程图。
首先,我会为程序构建一个骨架,或者说是框架。于是第一步就产生了下面的代码。
#include <stdio.h>
int main()
{
}
第二步,既然main函数的返回值是int类型的,那么就要先给它一个return语句。于是就产生了下面的 代码。
#include <stdio.h>
int main()
{
return 0;
}
接下来就是考虑main函数的形参了,由于我们并不需要对main函数进行太多的复杂操作,所以这里我就用
了void来描述main函数的形参表。
#include <stdio.h>
int main( void )
{
return 0;
}
到了这里就该添加我们要程序实现的功能了,于是就调用printf函数来实现。
#include <stdio.h>
int main( void )
{
printf();
return 0;
}
在写printf函数调用语句的时候,我没有急于写出完整的代码,而是先写了没有具体参数的 printf调用,
并且还写了尾部的分号。我为什么这么做呢?因为我在大一学习C语言的时候经常会 漏写一些分号、括号之类
的符号,所以我学会了这个技巧来帮助我尽量不会写出出现如此低级错误 的代码。
通过上面这些步骤,我就开始往printf函数调用语句里添加具体的东西了。
#include <stdio.h>
int main( void )
{
printf( "Hello World! " );
return 0;
}
到此,整个程序就基本上书写完成了。
细心的朋友会发现,我在括号之内添加了空格,这是我想凸现括号内实参位置的缘故,但其实 这不是必须
的,所以你也可以像下面这样来写上面的这个程序:
#include <stdio.h>
int main(void)
{
printf("Hello World! ");
return 0;
}
这样写的话,代码看起来会显得很紧凑,但是不便于参数的凸现。这两种写法都是正确的,主要 依据个人
的喜好来选择其中一种。
另外,上面的程序的书写过程,我都是先打好基本的框架,再往框架里添加东西。这好好比先建造 房屋的
主体梁架,然后再砌砖。只有确保了梁架的正确才能继续砌砖。
上面整个程序的书写过程可能会显得有些繁琐,但我想这可以有效避免一些错误的发生。其实,我 通过这
个例子想向大家说明一点:做事一定要认真对待,即使再简单和微小的事情也是如此。
以上就是我第一天为大家带来的经验分享。若有谬误之处,还望各位指出。