Perl 最佳实践(节选) --- 02
? 第二章:代码部署? ? 零零壹.以K&R风格表示大括号和小括号。 ? 即: my @name = ( ?????? ‘Damian’, ?????? ‘Matthew’ ); ? for my $name (@names) { ?????? formy $word ( anagrams_of(lc $name) ) { ????????????? print“$worn”; ?????? } } ? ? 零零贰.控制关键字和后继开口括号间要以空白分割 ? 例如: ? ?????? formy $result (@results) { ????????????? print_sep(); ????????????? print$result; ?????? } ? ?????? while($min < $max) { ????????????? my$try = ($max - $min) / 2; ????????????? if($value[$try] < $target) { ???????????????????? $max= $try; ????????????? } ????????????? Else { ???????????????????? $min= $try; ????????????? } ?????? } ? ? ? 零零叁.不要把子程序或变量名称与后继开口括号分割开来。 ? 即: ?????? my@candiates = 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,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 ) { ????????????? push@comments,$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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |