標籤:
第二章:代碼部署 零零壹.
以K&R風格表示大括弧和小括弧。
即:
my @name = (
‘Damian’,
‘Matthew’
);
for my $name (@names) {
formy $word ( anagrams_of(lc $name) ) {
print“$wor\n”;
}
} 零零貳.
控制關鍵字和後繼開口括弧間要以空白分割
例如:
formy $result (@results) {
print_sep();
print$result;
}
while($min < $max) {
my$try = ($max - $min) / 2;
if($value[$try] < $target) {
$max= $try;
}
Else {
$min= $try;
}
} 零零三.
不要把子程式或變數名稱與後繼開口括弧分割開來。
即:
[email protected] = get_candidates($marker);
CANDIDATE:
formy $i (0..$#candidates) {
nextCANDIATE if open_region($i);
$candidates[$i]
=$incumbent{ $candidates[$i]{region} };
} 零零肆.
不要對內建函數和“名譽”內建函數使用不必要的小括弧。
即:
while(my $record = <$results_file>) {
chomp$record;
my($name, $votes) = split “\t”, $record;
print‘Votes for ’,
substr($name,0, 10), # 為強加優先順序所以需要小括弧
“:$votes (verified)\n”;
} 零零伍.
把複雜的鍵或索引與周圍的括弧分開來。
例如:
$candidates[$i]= $incumbent{ $candidates[$i]{ get_region() } }; 零零陸.
利用空白讓二元運算子相對於其運算元更醒目。
例如:
my $displacement
=$initial_velocity * $time + 0.5 * $acceleration * $time**2; 零零柒.
每條語句之後都放分號。
例如:
while (my $line = <>) {
chomp$line;
if( $line =~ s{\A (\s*) – (.*)}{$1#$2}xms ) {
[email protected], $2;
}
Print$line;
} 零零捌.
多行列表中的每個值後面都放逗號。
例如:
my @dwarves = (
‘Happy’,
‘Sleepy’,
‘Sneezy’
); 零零玖.
使用78列的程式碼。
因為印刷檔案、舊式VGA顯示裝置、展示軟體和應用光學沒有解除這些限制,以大於80列的寬度作為代碼的格式安排並不合理。 零壹零.
使用4列縮排層次。 零壹壹.
以空格縮排,不要以定位字元(tab)縮排。 零壹貳.
絕不要把兩條語句放在同一行。 零壹三.
代碼要分段落。 零壹肆.
不要緊貼著else。
“緊貼的”else看起來像這樣:
} else {
正確的:
}
else{ 零壹伍.
垂直對齊相對應的項目。
例如:
$name =standardize_name($name);
$age =time - $birth_date;
$status =‘active’; 零壹陸.
在運算子之前斷開冗長運算式。
例如:
push @steps, $steps[-1]
+$radial_velocity * $elapsed_time
+$orbital_velocity * ($phase + $phase_shift)
-$DRAG_COEFF * $altitude
; 零壹柒.
把語句中間的冗長運算式分離出來。
例如:
my $next_step = $steps[-1]
+$radial_velocity * $elapsed_time
+$orbital_velocity * ($phase + $phase_shift)
-$DRAG_COEEF * $altitue
;
add_step ( \@steps, $next_step,$elapsed_time ); 零壹捌.
一定要在最低可能優先順序的運算子之處斷開冗長運算式。
例如:
push @steps, $steps[-1]
+$radial_velocity * $elapsed_time
+$orbital_velocity
*($phase + $phase_shift)
-$DRAG_COEFF * $altitude
; 零壹玖.
在賦值運算子前斷開冗長的賦值運算。
例如:
$predicted_val{$current_data_set}[$next_iteration]
=$average + $predicted_change * $fudge_factor; 零貳零.
以列安排級聯三元運算子。
例如:
my $name = defined $customer{name} ?$customer{name}
: ‘Sir or Madam’
; 零貳壹.
冗長列表要加小括弧。
例如:
print (
‘Processing’,
Scalar(@items),
‘items at ’,
time,
“\n”
); 零貳貳.
機械式地執行你所選擇的部署風格。
Perl有可用的格式化工具:perltidy。
網址:http://perltidy.sourceforge.net
Perl 最佳實務(節選) --- 02