ヨーダ記法
プログラミングの話で出てくるよ
条件式の書き方だよ
値→演算子→変数の順で書くよ
簡単に書くよ
ヨーダ記法(読:ヨーダキホウ)とは
プログラミングにおいて、if文などの条件式を「if(hensu == 1){ ~ }」のような「変数 演算子 値」の順番ではなく「if(1 == hensu){ ~ }」のような「値 演算子 変数」の順番で書く書き方のこと
です。
詳しく書くよ
順番に見ていきましょう。
プログラミングにおいてif文などの条件式を書くとき、一般的には以下のように書きます。
if (hensu == 1){
printf("1だよ");
}
ここで
if (hensu == 1){
に注目してください。
これは
変数「hensu」の中身と値「1」が同じだったら
を意図した条件指定です。
if文の中は「変数→演算子→値」の順で並んでいます。
実は、この条件文ですが「変数→演算子→値」の並び順を「値→演算子→変数」に変えて
if (1 == hensu){
としても成立します。
変える前は
変数「hensu」の中身と値「1」が同じだったら
だった条件指定が
値「1」と変数「hensu」の中身が同じだったら
な条件指定に変わるだけだからです。
言ってることは同じですよね?
全体としては
if (hensu == 1){
printf("1だよ");
}
と記述されるのと
if (1 == hensu){
printf("1だよ");
}
と記述されるのは同じ結果になります。
それを踏まえて
if (1 == hensu){
のように
「値→演算子→変数」の順番で条件文の中を書く書き方
が「ヨーダ記法」です。
ヨーダは倒置法を使って喋ることが多いのが、名前の由来だそうです。
フォースと共にあれ。
ヨーダ記法のメリットは、よくある間違いを見つけやすいことです。
多くのプログラミング言語において「左の値と右の値は同じですか?」の比較を意味する演算子は「==(イコール2つ)」で表現します。
「=(イコール1つ)」は「右側の値を左側の変数に入れますよ」な代入を意味する演算子です。
ところが、プログラミング初心者は、この感覚が身に付いていません。
そのため
if (hensu == 1){
ではなく
if (hensu = 1){
のように「=(イコール1つ)」で条件文を書いてしまうことがあります。
実は、このように書いてもエラーにはなりません。
if (hensu = 1){
は
変数「hensu」に値「1」を入れます。成功しましたか?
を意味する条件判定だからです。
意図したものと違うでしょうが、式としては成立してしまうのです。
ヨーダ記法で書いておくと、この間違いを簡単に見つけられます。
if (1 = hensu){
は
値「1」に変数「hensu」の中身を入れます。成功しましたか?
を意味する条件判定だからです。
値「1」に対して、何かを入れることはできません。
エラーになります。
これがヨーダ記法のメリットです。
一方、ヨーダ記法のデメリット……というか、嫌われる理由は、いろんな人がいろんなことを言っています。
「直感的に分かりにくい」とか「文の流れとして不自然」とか「コンパイラが何とかしてくれるから、そこまで神経質になる必要はない」とか「そもそも、そんな初歩的なことで間違うな」とかですね。
それを見て、個人的に感じたのは
馴染みがないから分かりにくい
に集約されるのではないかということです。
ヨーダ記法を使うべきではない論調に対して「気にしすぎじゃない?」と感じました。
一方で「ヨーダ記法にするべき!」と言うほどのメリットも感じていません。
「そこまで大きな違いはなさそうだし、馴染みのある書き方にしておいた方が無難じゃない?」というのが私の考えです。
自分しか見ないプログラムであれば、ヨーダ記法で書いて構わないと思います。
他の人も見るプログラムであれば「ヨーダ記法は、よろしくない」と考える人もいることを覚えておいてください。
ヨーダ記法が良い・悪いの話ではなく、周りの人との兼ね合いです。
別にヨーダ記法に限った話ではないですけどね。
複数人でプログラミングするときの鉄則は「全体最適化」です。
良い・悪いも大事ですが、足並みを揃えることも同じくらい大事ですよ。
一言でまとめるよ
まぁ「ヨーダ記法」って単語が出てきたら「条件式を値→演算子→変数の順で書く書き方なんだな~」と お考えください。






