『PHP7で堅牢なコードを書く』t-wadaさん
2016/11 PHPカンファレンス2016
導入
氷山の断面図のスライドを示して,「堅牢なコードは,50%以上がエラーハンドリング」と言及し,「大事なのは氷山の下のほうであり,実際に動くコードではない」と述べました。
予防的プログラミング
防御的プログラミングはいろいろな人が様々な解釈をしている
t-wadaさんが考える防御的プログラミングとは
「問題発生を事前に防ごうというコーディングスタイルのことである」
型の制限
多すぎる責務に起因する問題
攻撃的プログラミング
なにかおかしいことが起きたら,例外を発生させたりエラーを発生させて即時落とす。
表明プログラミング
PHP7ではassert関数
思い込みが思い込みの通りであることを確かめる
表明のメリット:コミュニケーション(書き手がコードの読み手に情報を与えられる)
エラーハンドリング
「エラーの発生が予測できる時は,エラー処理のコードを使いましょう」
契約プログラミング
Design by Contract(契約による設計)
「常に失敗するかどうかで,メソッドが動かなかった時にバグなのか,例外的状況なのかを切り分けるようになる」
「事前条件違反は呼び出し側にバグがあり,事後条件違反は供給者側にバグがある」
「表明によって,呼び出し側か供給側のバグなのか見分けることができる」