Perl-coding-standard

提供:Dev Guides
移動先:案内検索

Perl-コーディング標準

もちろん、各プログラマーはフォーマットに関して独自の好みを持っていますが、プログラムを読み、理解し、保守しやすくする一般的なガイドラインがいくつかあります。

最も重要なことは、プログラムを常に-wフラグの下で実行することです。 必要に応じて、no warningsプラグマまたは$ ^ W変数を使用して、コードの特定の部分に対して明示的にオフにすることができます。 また、常に厳格な使用の下で実行するか、そうでない理由を知っておく必要があります。 sigtrapを使用し、さらに診断プラグマを使用することも有用である可能性があります。

コードのレイアウトの美しさに関して、Larryが強く気をつけている唯一のことは、複数行のブロックの閉じ中括弧が、構造を開始したキーワードと並ぶことです。 それを超えて、彼はそれほど強くない他の好みを持っています-

  • 4列のインデント。
  • 可能であれば、キーワードと同じ行でカーリーを開き、それ以外の場合は整列します。
  • 複数行ブロックの開始カーリーの前のスペース。
  • 1行のブロックは、カーリーを含めて1行に配置できます。
  • セミコロンの前にスペースはありません。
  • 「短い」1行ブロックではセミコロンが省略されています。
  • ほとんどのオペレーターの周りのスペース。
  • 「複雑な」添え字の周りのスペース(括弧内)。
  • 異なることを行うチャンク間の空白行。
  • 抱きしめられていない他人。
  • 関数名とその開き括弧の間にスペースはありません。
  • 各コンマの後にスペース。
  • 演算子の後の長い行(andおよびorを除く)。
  • 現在の行の最後の括弧のマッチング後のスペース。
  • 対応するアイテムを垂直に並べます。
  • 明瞭さが損なわれない限り、冗長な句読点を省略します。

考えるべき他のいくつかのより本質的なスタイルの問題は次のとおりです。特定の方法で何かを実行できるからといって、そのように実行する必要はありません。 Perlは何でもできるようにいくつかの方法を提供するように設計されているので、最も読みやすいものを選ぶことを検討してください。 例えば-

open(FOO,$foo) || die "Can't open $foo: $!";

より良いです-

die "Can't open $foo: $!" unless open(FOO,$foo);

2番目の方法は、修飾子のステートメントの主要なポイントを隠すためです。 一方、

print "Starting analysis\n" if $verbose;

より良いです-

$verbose && print "Starting analysis\n";

主なポイントは、ユーザーが-vを入力したかどうかではないからです。

Perlが最後の演算子を提供しているので、途中で終了できるようになっている場合は、愚かなゆがみを繰り返して、上部または下部でループを終了しないでください。 少し「アウトデント」するだけで、見やすくなります-

LINE:
for (;;) {
   statements;
   last LINE if $foo;
   next LINE if/^#/;
   statements;
}

さらにいくつかの重要なポイントを見てみましょう-

  • ループラベルを使用することをためらわないでください。読みやすさを向上させるためだけでなく、マルチレベルのループブレークを可能にするためにもあります。 前の例を参照してください。
  • voidコンテキストで、つまり戻り値を破棄するだけで、grep()(またはmap())または `backticks`を使用しないでください。 これらの関数にはすべて戻り値があるため、それらを使用します。 それ以外の場合は、代わりにforeach()ループまたはsystem()関数を使用します。
  • 移植性のために、すべてのマシンに実装されていない可能性がある機能を使用する場合は、evalでコンストラクトをテストして、失敗するかどうかを確認してください。 特定の機能が実装されたバージョンまたはパッチレベルがわかっている場合は、$](英語では$ PERL_VERSION)をテストして、そこにあるかどうかを確認できます。 Configモジュールでは、Perlのインストール時にConfigureプログラムによって決定された値を調べることもできます。
  • ニーモニック識別子を選択します。 ニーモニックの意味を思い出せない場合は、問題が発生しています。
  • $ gotitなどの短い識別子はおそらく大丈夫ですが、アンダースコアを使用して長い識別子の単語を区切ります。 一般的に、$ VarNamesLikeThisよりも$ var_names_like_thisの方が読みやすく、特に英語を母国語としない人にとっては読みやすいです。 また、VAR_NAMES_LIKE_THISと一貫して機能する単純なルールです。
  • パッケージ名は、この規則の例外になる場合があります。 Perlは、integerやstrictなどの「プラグマ」モジュールの小文字のモジュール名を非公式に予約しています。 他のモジュールは大文字で始め、大文字と小文字を混ぜて使用する必要がありますが、原始ファイルシステムのモジュール名の表現がスパースバイトに収まる必要があるファイルであるため、アンダースコアは使用しないでください。
  • 本当に毛むくじゃらの正規表現がある場合は、/x修飾子を使用し、空白を入れて、ラインノイズのように見えないようにします。 正規表現にスラッシュまたはバックスラッシュが含まれる場合は、スラッシュを区切り文字として使用しないでください。
  • システムコールのリターンコードを常に確認してください。 適切なエラーメッセージはSTDERRに送られ、問題を引き起こしたプログラム、失敗したシステムコールと引数、および(非常に重要な)失敗したものに関する標準システムエラーメッセージを含める必要があります。 これはシンプルだが十分な例です-
opendir(D, $dir) or die "can't opendir $dir: $!";
  • 再利用性について考えてください。 もう一度同じようなことをしたいのに、なぜ一発で頭脳力を浪費するのですか? コードを一般化することを検討してください。 モジュールまたはオブジェクトクラスの作成を検討してください。 use strictおよびuse warnings(または-w)を有効にしてコードをきれいに実行することを検討してください。 コードを提供することを検討してください。 全世界の見方を変えることを検討してください。 検討してください…​ ああ気にしません。
  • 一貫性を保ってください。
  • いいね。