2010年6月7日月曜日

if __name__ == '__main__'をRuby PHP Python Perlで

直接実行された時とincludeされた時で挙動を変える

この方法を知っていると、再利用性を意識したプログラムを書く習慣を身につける為や、テストする時に役立つかもしれない!まずは言語の文化的によくやるPythonから

Python

if __name__ == '__main__':

Ruby

if __FILE__ == $0

Perl

if($0 eq __FILE__)

PHP

PHPはコマンドラインの場合、register_argc_argvが有効になっている必要があります。

// コマンドラインの場合
if (isset($argv[0]) && __FILE__ === realpath($argv[0]))

// Apacheモジュールの場合
if (basename(__FILE__) == basename($_SERVER['SCRIPT_NAME'])) 

インクルードされたら実行しないメリット

例えば関数やクラスの定義は普通にしておいて、そのテストを上記のプログラムの条件がtrueの時に行うようにできる。テストフレームワークを使わない時とか、日常よく行う処理を自動化して関数化した時のテストとか。同じviewを共有するけど、viewがindex.phpに直接書かれている場合に、ロジックだけ別にしときたい時とか(危険)。知ってて損のないものなので書いておきました。

0 件のコメント: