ヨーダ記法ってなんだろう

2021-06-05

概要

みなさん、ヨーダ記法ってご存知ですか?僕は最近までわかりませんでした。
調べてみると面白い事実がわかったので、コラムがてら共有していきたいと思います。

ヨーダってあの…?

yoda

御察しの通り、 「フォースとともにあらんことを…」でおなじみスターウォーズのヨーダです。

ヨーダが発言した言葉に、 「Strong is Vader.」 があります。
直訳すると、 「強いぞ、ベーダーはな。」 となります。

倒置法がなされていて、普通は「ベーダーは強いぞ」となるのを逆にして発言しているんですね。

ちなみにヨーダ記法はプログラミング界のジャーゴン(隠語)みたいなものなので、他人から聞いたらなんのことかわからないです。
もしかしたらプログラマーも知らない方がいるかも。

プログラミングとヨーダの関係性

じゃあ、どうやってプログラミングと結びついているのでしょうか。

普段の書き方

まずは普通の分岐処理をみていきましょうか。
TypeScriptで書いていきます。

type SectionProps = 'name' | 'age' | 'hobby'
function selfIntroduction(section: SectionProps) {
    if (section == 'name') {
        console.log('My name is xxx.')
    }
    if (section == 'age') {
        console.log('26 years old.' )
    }
    if (section == 'hobby') {
        console.log('I play drums.')
    }
    console.log('Thank you.')
}
selfIntroduction('name')
// My name is xxx.
// Thank you.

ヨーダ記法

type SectionProps = 'name' | 'age' | 'hobby'
function selfIntroduction(section: SectionProps) {
    if ('name' == section) {
        console.log('My name is xxx')
    }
    if ('age' == section ) {
        console.log('26 years old' )
    }
    if ('hobby' == section) {
        console.log('I play drums.')
    }
    console.log('Thank you.')
}
selfIntroduction('name')

何が違うのか

if文の中が逆になっています。

# 普段
if (変数 == 定数) {}

# ヨーダ記法
if (定数 == 変数) {}

なぜこんな書き方をするのだ

これは誤って代入式を書いてしまわないようにするためらしいです。

# もしかしたらこんな感じで代入してしまうかも
if (変数 = 定数) {}

# ヨーダ記法はそれを防げる
if (定数 = 変数) {}

あとぱっと見で条件式がわかりやすい…?

if (null != hoge) {}

でも結局使われない

今まで紹介したヨーダ記法、これ実務であまりみたことないんです。

圧倒的にわかりづらい

自然と頭に入ってくる文脈ではないです。
また条件式がわかりやすくなるかは各プログラマーによるところですが、私はわかりにくいです。

また、慣れるのに時間がかかりチームの生産性が下がる可能性が高いです(もっともヨーダ記法に訓練されたプログラマーは別ですが)。

私が愛読している、リーダブルコードにもヨーダ記法を非推奨とする内容が書かれています。

結論

へぇ、と思うくらいで大丈夫だと思います。

でもこんな用語があって、それが登場人物からきているとは思っていませんでした。
気づいてないだけで、実はちゃんとした名前があったりしそうですね。

運営について

Natural Tearoomはシステム開発会社フロントエンドエンジニアがんちゃんが運営するメディアです。
フロントエンド技術を中心に発信しています。

· プライバシーポリシー

SNS

© 2021 天然珈琲店