こんにちは!ツルダです。
実はワタクシ、ずっと疑問に思っていることがありまして・・・
WordPressでテーマをカスタマイズする時などに、必ず出てくるphpのif文。
あれってなぜ2通りの書き方があるんでしょうか?
ずっとなぜなのかわからないままコードを書き続けて、はや○年…
知ってそうな人に聞いても「だいたい同じだから」で済まされること、はや○年…
ほんとにどっちでもいいの?
もしくはじつは背後にものすごい秘密が隠されてて、賢者の称号を持つ人にしか教えられないとかそんなことなの?
このままじゃダメだ!ということで、改めてエンジニアさんに聞いてみることにしました。
誰か教えて!マジで!
なぜか2通りあるif文の書き方
phpでif文をつくるとき、メジャーな書き方としては次の2通りがあります。
<?php
if($hoge == 1){
$foo = 1;
}else{
$foo = 2 ;
}
?>
上記のように、{}でくくるやり方と、
<?php if ($hoge == 1):
$foo = 1;
else:
$foo = 2 ;
endif; ?>
上記のように、:ではじまりendif;で終わるやり方です。
どちらもphpの例でよく書かれる方法ですよね。
様々なサンプルコードを紹介しているサイトなどをみてもどちらかで書いてあるだけで、
「こちらのif文を使うべき!」というようなことを書いてある投稿は見当たりません。
賢者その1に聞いてみる
ということで、手近な賢者・ユニマルのFukaseことNagataさんに聞いてみました。
ちなみに毎月20日頃に髪の色が変わるらしいです。さすが賢者や!
可読性がポイント
賢者の言葉
なるほど。コードの読みやすさということですね。
たとえば、一行で済むPHP内プログラムなら三項演算子で
<?php
$cond===true ? func1() : func2();
?>
PHP内のプログラムでゴニョゴニョしたい場合は
<?php
if($hoge == 1){
$foo = 1;
}else{
$foo = 2 ;
}
?>
HTMLを挟んで色々するときは
<?php if ($a == 5): ?>
<div class="answer"><?php echo $a ?></div>
<?php else: ?>
<div class="answer"><?php echo $a ?>じゃないみたい</div>
<?php endif; ?>
とかの使い分けだと可読性がいいのかもしれないですね。
とのこと。
たしかにその後のメンテナンスを考えると、ぱっと見てわかりやすいコードを書くというのも大事ですね。
さすが賢者!で、なんで3つあるんですか?
というドラゲナイ系賢者ナガタの丸投げを受けて、次の賢者にも聞いてみました。
賢者その2に聞いてみる
次の賢者はユニマルのリードエンジニア・ナカヒデさんです。
ギターと歌をこよなく愛する吟遊詩人系賢者のナカヒデさんにif文の違いについて聞いてみました。
ポイント1:他の言語との親和性
まずひとつ目のポイントは、他の言語との親和性。
JavaScriptやRubyなど、言語によってif文の書き方が違います。
元々このような他の言語を使っていた人は、phpではそれぞれ馴染みのある方を使っているのではないかとのことです。
ポイント2:入力のしやすさ
次に文字入力のしやすさの違い。
例えば「else:」や「elseif;」はコロン/セミコロンが間違えやすかったり、文字入力数が多くなります。
ちょっとしたことですが、日々コードを書くエンジニアさんにとっては意外と重要なポイントかもしれません。
ポイント3:エディタとの相性
次に使っているエディタとの相性もあるのではとのこと。
設定次第でカスタマイズできますが、自動補完される内容や、表示色など、そういったところをポイントに使い分けてもいいのではということでした。
結論
で、そのようなポイントを考慮したうえで、ナカヒデさんの見解としては…
賢者の言葉
結論:結局どっちでも良かった☆
マジかよ。
まとめ
色々聞いてみた結果振り出しに戻るという、考えようによっては深い結果となりました。
海外のエンジニアさん向けサイト「stackoverflow」でもこのif文についてのスレッドがありましたが、明確な答えは出ていないようです。
Difference between if () { } and if () : endif;
http://stackoverflow.com/questions/564130/difference-between-if-and-if-endif
う〜ん、本当にどっちでもいいのでしょうか?
それともやはり初級者には教えられないヒミツがあるのでしょうか!?
実は答えを知っているという世の大賢者の皆様の回答をお待ちしております!