昔書いた社内ブログ記事です。
どうも(p・∀・q)
父にボジョレーを贈り、母にフットケアを贈り、妹に中華街で奢り、
弟はまだ学生なので放置してきた23日は勤労感謝の日でした。
さてさて、私のチームでは、PHPのコーディング規約で
ハンガリアン記法のようなものを使用しています。
変数の先頭に、変数の型や意味を現す文字列を付与する記法です。
今回はこの記法の概要と、利点、欠点を書いてみます。
概要
例えば私の趣味を配列型の変数に格納する場合(p・ω・q)<リア充ィェィ(←
変数に『配列(array
)を意味する ar
』(ローカルルール)をつけます。
$arMyHobbies = array("ネット", "漫画", "手工芸", "映画");
配列をカンマ区切りの文字列に変換するとかよくありますよね。
文字列の変数には『文字列(string
)を意味する s
』(ローカルルール)をつけます。
$sMyHobbies = implode(",", $arMyHobbies);
(implode()
は、第二引数の配列を、第一引数の文字列で連結し、それを文字列で返します。)
利点
コードの中でおかしい部分を見つけやすいことが一番の利点だと思います。
例えば、implode()
の第二引数は配列でないといけませんが
下のように書いてあったら、第二引数が配列なのか見ただけではわかりません。
$mine = implode(",", $yours);
少し前のコードまでさかのぼって、
$yours
にホントに配列が入っているか確認しないと安心できません。
一方、これなら合っている可能性が高いので安心です(p・∀・q)
$sMine = implode(",", $arYours);
また、これは間違っている可能性が高いので確認する必要があります(p・д・q)
$sMine = implode(",", $sYours);
他にも、この式はおかしいとパッと見でわかります。
if($iMailOkFlag === true) {...}
『整数(int
)を表す i
で始まっている』(ローカルルール)ので、
このフラグの値は 1
または 0
のはずだからです。
本来のハンガリアン記法は変数の型だけでなく、もっと多岐に渡って利用できます。
例えば、
Webページで入力された生の値が入った変数
入力値チェック後の変数
HTMLエンコード後の変数
これらを区別してみるだけで、入力値チェックをしていない変数を
DBに登録してしまうような間違いが減ります。
私のチームでも、Webページからの入力値の種類を区別するために使っています。
これについては、間違ったコードは間違って見えるようにするという記事がお勧めです。
欠点
もちろんこの記法に対する反論もあるようです。
慣れない人には使いにくいとか、型を変えたときの修正箇所が多いとか。
ハンガリアン記法が、型でしか区別できないという誤った意味で流行ってしまったのも
反論者を増やしてしまった一因らしいです。
それでも私は便利だと思いますけどね・・(p・ω・q)
特にPHPは変数を宣言するときに型を書かないので、
関数の返り値の型など明記されている方がわかりやすいです。
これならグループのメンバーを数えた整数値が返ってきそうですし。
$iCount = countMembers($iGroupId);
こっちだと実行結果の成否が返ってくるような予測ができます。
$bResult = countMembers($iGroupId, $iCount);
( b
は bool
を意味して、TRUE/FALSEのこと。)
もしこの記法について知らない人がいたら、
間違ったコードは間違って見えるようにするを読んでみてください。
コーディング記法は好き嫌いあると思いますが、
他の人の書き方を聞くだけでも面白いですよね。
大文字小文字混ぜて使うのかどうかとか、
$iMyStatus
、isStudent()
ハイフンを使うのかどうかとか、
$user-name
、$user-age
アンスコを使うのかどうかとか、
$my\_name
、$get\_my_data()
Companyはどうやって短縮するのかとか(笑)
$company
、$comp
、$cmpn