也谈代码风格
先讲个笑话
我们程序员分两种,一种是:
if( #condition ){
//codes
}
另一种是:
if( #condition )
{
//codes
}
你是哪一种呢?
这个笑话比较冷,但是也说明了一个问题 —— 代码风格难以统一。
一个好的代码风格会使程序更容易阅读,提高团队合作的效率不说,自己看着也会赏心悦目,好像自己淫的一手好湿。
而混乱的代码轻则增加团队沟通成本,重则影响团队和谐。所以我认为不论是作为一个团队还是所谓一名开发者,必须坚持自己的程序编写风格。老高偶尔也会因为考虑到一致性而使用我不喜欢的代码风格,事实上这个行为是很不可取的。
所以今后老高今后要改正这个不良习惯,保持自己的代码风格,之前写的都不算 XD 。
我的风格
下面老高精(HU)心(LUAN)整理了一些PHP编码的习惯,不知道有没有和我一样的TX?
编码
编码推荐UTF-8,所以在处理文字长度的时候请使用mb_*系列函数。
换行
由于UNIX/Linux、Mac与Windows在换行格式上的差别,请搞清楚运行环境, 再搞清楚CR(carriage return, 符号’r’表示, 十进制ASCII代码是13, 十六进制代码为0x0D), LF(line feed,使用’n’符号表示, ASCII代码是10, 十六制为0x0A), CR/LF的概念,然后在编辑器中把换行格式改为对应的格式即可。
系统 | 换行编码 | 正则 |
---|---|---|
UNIX/Linux | 换行 | \r |
Mac | 回车 | \n |
Windows | 回车+换行 | \r\n |
换行回车的历史,来自豆瓣
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。
这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
注释
注释是为了程序更好理解,所以老高一般会把注释写在需要注释的代码之前,例:
function abc(){
//先验证权限
authorized();
}
而有些注释只是想说明执行结果,那么我会把它们放在代码的下一行:
echo date("M d Y H:i:s", mktime (0,0,0,1,1,2000));
//Jan 01 2000 00:00:00
=
号
=
号一般用在赋值和比较,我会在=
号链接的逻辑两边各加一个space,同理适用于||
、&&
等逻辑运算,其他比较符号不管,例:
$a = array('I', 'Love', 'U');
if( count($b) == 0 )
{
if( $a>=0 )
{
//code
}
}
单双引号
这里不多说了,多少一个shift的事儿。
IF
if
后直接跟(
,$condition
左右会有一个空格,而其他的函数则可以不加空格:
if( $a>0 )
{
$number = strlen('abcde');
echo 'positive!';
}
代码块
代码块其实就是{
和}
包裹的内容,用在if,switch,while等条件或分支的时候会用到,老高的建议是每个{
和}
必须独占一行。
?>
删除结尾标记这个标记是PHP代码闭合的格式,如果正在写一个纯PHP文件,请移除最后的?>
,然后保持最后一行是空行。
参数
定义函数参数的时候,如果有多个参数,除了第一个参数,其他参数之前必须加一个space,例:
json_decode($html, true);
function A($a, $b, $c)
{
//code
}
不要连续赋值
除非你是高手。。。。。。否则可能会出现意想不到的效果。
$a = $b = 1;
$a = 2;
echo $b;
$a = $b = new DateTime;
$a->setDate(2001, 2, 3);
echo $b->format('Y-m-d');
善用list()
list($a,$b)=array(10,20);
不要hard-coding
善用初始化方法和常量。
避免代码过长
适当换行,例:
if( $a = 'a' ||
$b = 'b' ||
$c = 'c')
{
//code
}
代码中尽量写英文
除非你的英文很差或者有特殊要求。
如果一定有中文
请一定使用全角符号,而且不要忘了结尾的句号。
引用和借鉴
github上的代码如果用到了,请务必标明出处,表要以为开源就是免费午餐,小心你也会吃上官司!你又不是小米公司,就算fork了改了又吃了官司,人家也不怕。
多数源代码都是基于某种协议开放的,这里给出几个关键词:[GPL、APACHE、BSD、LGPL] + Licenses,协议还有版本之分。
推荐模板:
XXX的诞生离不开很多非常棒的开源项目,包括: xxx,xxx,xxx.
不要使用tab缩进
用四个空格缩进,这样不会引起格式的混乱,保证了代码在各IDE里视觉统一,Python同样适用。
总结
代码风格因人而异,如果你还没有悟出自己的风格,那就速度为自己整一个吧!
在此分享一个来自PHPCMS的编码规则,值得参考