继续翻译Perl最佳实践的2.9~2.12。


2.9 行长度

保持行长度为78字符。

虽然以现在的高分辨率显示器已完全可以在一行中显示300个字符, 但还是建议保持每行不超过78个字符。 这不仅仅是出于显示上的考虑,更为重要的一个理由是, 通过邮件发送代码片段时,78字符的行长度可以保证在回复邮件时 代码不至于被换行。

在vi中可以设置以下选项,使其自动换行:

set textwidth=78

在Emacs中可以用以下命令达到同样目的:

(setq fill-column 78)
(setq auto-fill-mode t)

2.10 缩进

使用四列的缩进。

对于缩进的争论更多,不同的程序员会给出不同的答案:2、3、4或者8列。

早期的大牛们倾向于使用8列的缩进,理由是许多打印机和终端的默认TAB宽度 仍为8字符,因此使用8字符缩进可以保证在任何地方看到的效果都一样。

但是的确(年轻人们会这样想),8列的缩进非常难看,并且很难阅读。 他们觉得缩进不能超过2到3个字符。小的缩进可以在有限的显示器上显示更多层次的 嵌套;也能减少阅读时视线水平移动的距离。

但问题是,过小的缩进对于上年纪和视力不好的人来说,很难用肉眼 分辨出缩进的层次。

最合适的缩进宽度还是4列,对于两种人来说都是个能够接受的平衡点吧。

2.11 制表符(Tab)

使用空格缩进,不要用Tab。

Tab不适合用于缩进,即使你已经设置编辑器的Tab宽度为4列。 Tab在打印时与显示时的效果不同(打印时通常会变成8列宽), 另外将代码粘贴到字处理程序(如Word)中时也是如此。 甚至在其他人的编辑器上查看代码时,如果他的Tab设置与你不同, 看到的效果也不一样。

所以不要使用Tab键进行缩进,至少不要同时混合使用Tab和空格。

2.12 代码块

不要在一行中书写两条语句。

一行写两条或多条语句,会非常难于理解:

RECORD:
while (my $record = <$inventory_file>) {
    chomp $record; next RECORD if $record eq $EMPTY_STR;
    my @fields = split $FIELD_SEPARATOR, $record; update_sales(\@fields);$count++;
}

你已经通过K&R括号风格节约了许多空间了,把这些空间用在增强代码可读性上吧:

RECORD:
while (my $record = <$inventory_file>) {
    chomp $record;
    next RECORD if $record eq $EMPTY_STR;
    my @fields = split $FIELD_SEPARATOR, $record;
    update_sales(\@fields);
    $count++;
}

即使是 map 或 grep 内部的语句,如果超过一条语句,那么也应该写在各自独立的行上。