Home > PHP > PHP 意図を伝えるコーディング

PHP 意図を伝えるコーディング

  • 2008-06-11 (水) 2:36
  • PHP
この記事の所要時間: 039

PHPに限らずですが、読む人に意図が伝わるようなコードを書きたいという話です。

なお以下は私の感覚での話しですので、それ違う!という突っ込みがあればお願いします:-D

業務にしろオープンソースにしろ人のソースを見て気になるのがif文です。

if文で真偽値を判定する

メソッド・関数の戻り値が真偽値の場合、true/falseを判定するなら等号(不等号)は無くても良いのではないでしょうか。

つまり(hoge()はtrue/falseを返す関数)

[1]

if (hoge() === true) {
}
if (hoge() !== true) {
}

と書くのではなく

[2]

<?php
if (hoge()) {
}
if (!hoge()) {
}
&#91;/php&#93;
<p>と書けば良いのでは、という事です。</p>
<p>特にPHPでは厳密にtrue/falseを判別するなら[===]で比較する<a href="#1" name="p1">*1</a>ということで、[1]のようなコードを見るのですが、ここで判別したいのは、true/falseの2値のみなので、型を厳密に見る必要はありません。</p>
<p>[2]であればhoge()が2値のみを返す(他の値を返すにしても2値のどちらにみなされるか、だけを判定している)意図が明確になります。</p>
<p>私の感覚では[1]のように書くとhoge()がtrue/false以外の値(integer等)を返すので、あえて[===]で判別しているようにも取れます。</p>
<p>コードの解釈できる範囲を狭めてやることにより、コードの意図がはっきりします。</p>
<p></p>
<p>PHP5で強化されたオブジェクト指向機能を使うことにより、コードの意図を伝えることができます。</p>
<h3>例外</h3>
<p>try/catchで例外を捕捉しているコードなら、その中で例外が飛んでくることが分かります。さらにcatchで捕捉する例外を絞り込めば、飛んでくる例外の種類も分かります。</p>

<?php
try {
  // foo()内でPDOExceptionが発生する
  foo();
} catch (PDOException $e) {
  echo $e;
} 
&#91;/php&#93;
<h3>アクセス権(visibility)</h3>
<p>インスタンス変数にprotected/privateを設定しておけば、その変数が外部からは参照・変更して貰いたくないことが分かります。メソッドについても同様です。</p>
<h3>タイプヒンティング(TypeHinting)</h3>
<p>関数・メソッドの引数にタイプヒンティングでクラス(インターフェイス)名を指定しておけば、与えるべき引数が明らかになります。さらにPHPではタイプヒンティングで指定した引数へはnullも指定できない<a title="引数のデフォルトパラメータにnullを指定すれば、nullも渡すことができます。" href="#2" name="p2">*2</a>ので、メソッド内部では確実に指定したクラスとして扱えます。</p>

<?php
class Foo {}
class Bar {
  public function execute(Foo $foo) {
  }
}

$bar = new Bar();
$bar->execute(new Foo()); // Fooクラスのインスタンスのみ

クラスを継承/インターフェイスを実装

当たり前に使っている機能ですが、これを行えば親クラスやインターフェイスで定義されているメソッドならば(publicなら)呼べることが分かります。またそのクラスがどんな責務を負っているか、何に使うべきかを知ることができます。

意図を伝えられるコーディングを

例をいくつか書いてますが、大事なのはコードを読む人(一ヶ月後の自分も含む!)に意図を伝えられるコードを書きたい、書こうということです。

# コメントも大事ですが、実際に動くのはコードなので、まずコードがあってこそですからね。

追記[2008/06/12]:
if文の話には別の視点があるようです。人間って疲れる生き物なのですよ – よくきたはてダ

*1 PHPの==がキモい件 – hnwの日記
*2 引数のデフォルトパラメータにnullを指定すれば、nullも渡すことができます。

Pocket

follow us in feedly

トラックバック:0

このエントリーのトラックバックURL
http://www.1x1.jp/blog/2008/06/php_readable_coding.html/trackback
Listed below are links to weblogs that reference
PHP 意図を伝えるコーディング from Shin x blog

Home > PHP > PHP 意図を伝えるコーディング

検索
フィード
メタ情報

Return to page top