[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

ヨーダ記法

pointこの用語のポイント

pointプログラミングの話で出てくるよ

point条件式の書き方だよ

point値→演算子→変数の順で書くよ

スポンサーリンク

簡単に書くよ

ヨーダ記法とは

プログラミングにおいて、if文などの条件式を「if(hensu == 1){ ~ }」のような「変数 演算子 値」の順番ではなく「if(1 == hensu){ ~ }」のような「値 演算子 変数」の順番で書く書き方のこと
です。

image piyo

詳しく書くよ

順番に見ていきましょう。

プログラミングにおいて、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」に対して、何かを代入することはできません。
エラーになります。

これがヨーダ記法のメリットです。

一方、ヨーダ記法のデメリット……というか、嫌われる理由は、いろんな人がいろんなことを言っています。
「直感的に分かりにくい」とか「文の流れとして不自然」とか「コンパイラが何とかしてくれるから、そこまで神経質になる必要はない」とか「そもそも、そんな初歩的なことで間違うな」とかですね。

それを見て、個人的に感じたのは

馴染みがないから分かりにくい

に集約されるのではないかということです。

ヨーダ記法を使うべきではない論調に対して「気にしすぎじゃない?」と感じました。
一方で「ヨーダ記法にするべき!」と言うほどのメリットも感じていません。
「そこまで大きな違いはなさそうだし、馴染みのある書き方にしておいた方が無難じゃない?」というのが私の考えです。

自分しか見ないプログラムであれば、ヨーダ記法で書いて構わないと思います。
他の人も見るプログラムであれば「ヨーダ記法は、よろしくない」と考える人もいることを覚えておいてください。
ヨーダ記法が良い・悪いの話ではなく、周りの人との兼ね合いです。

別にヨーダ記法に限った話ではないですけどね。
複数人でプログラミングする際の鉄則は「全体最適化」です。
良い・悪いも大事ですが、足並みを揃えることも同じくらい大事ですよ。

image piyo2

一言でまとめるよ

まぁ「ヨーダ記法」って単語が出てきたら「条件式を値→演算子→変数の順で書く書き方なんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク