5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

スターウォーズの話題を耳にするたびヨーダ記法のことを考えてしまうよね?

Posted at

ちょっとポエムが書きたくなったのでポエム投稿サービスにお邪魔します。シリーズ最終作の『スカイウォーカーの夜明け』が封切られ、スター・ウォーズの話題を耳にすることが多くなりましたね。

このスターウォーズには銀河の様々な種族が登場することはご存知の通りですが、どのキャラクターも当然ですが英語で話します。もちろん、ハリウッド映画ですからね。しかし、さすが国際標準語の英語だけあり、訛りを使い分けることで「なんか国際的な感じ」を表現しているのはそれなりに有名な話です。吹き替え版を観ていては全く分からないと思いますが…。

それぞれどこの地域の訛りかというのは、公式な見解があるわけではなく本論とは外れるので本稿ではスルーします。とにかく、星ごとに実はいろんな英語を話しているということです。

そんな中、全キャラクターの中でも訛りの枠に収まらない特殊な英語を話すキャラクターがいます。ヨーダです。

ヨーダ英語 = 語順が逆というイメージ

ヨーダは東洋の神秘的な雰囲気を出すため、意図的に特殊な英語の喋り方に設定されています。ちょっと長いですが、Grammarlyが分かりやすいインフォグラフィックを公開しているので引用します。

Yoda language and grammar infographic, yodaspeak

この「語順が逆」という設定は、おそらく名言はされていませんが、日本語を意識しているのは間違い無いのではないかと思います。この特徴的なヨーダの英語の喋り方が、とあるプログラミング用語として普及しています。

ヨーダ記法(Yoda conditions)

if文を書く際、カッコの中の順番としてよくあるのが、変数・比較演算子・値の順です。

// php
if ($i == true) {
  echo 'Ready.';
}

このカッコの中を逆順で書くのがヨーダ記法です。

if (true == $i) {
  echo 'Ready.';
}

ヨーダ記法は、WordPressのコーディングスタイルとして採用されるなど、一部では普及の動きもあります。なんでわざわざ逆順にするのかというと、 = の数を書き間違えるのを防ぐためです。

すなわち、下記のコードはエラーなく動いてしまい、間違いに気付きにくい。

// 比較ではなく変数 $i に true を代入してしまっているが、動く。
if ($i = true) {
  echo 'Ready.';
}

基本逆に書いておけば、 = の数が足りないと必ずエラーになるので気づくよね、という話。

// エラーになる。
if (true = $i) {
  echo 'Ready.';
}

これ、日本人的には「確かにあんま見かけないので違和感あるけど、メリットはよく分かるし、いいんじゃない?どっちでも。」くらいの反応だと思うんですよ。ところが、英語圏の人たちには相当抵抗があるようです。

まあ、確かに、"If you drink beer, don't drive" が "If beer drink you, don't drive" になると考えたら、変!嫌だ!という反応も分かる気もします。

筆者が普段コミットしているオープンソースCMS「concrete5」では、PHP CS Fixerというツールを使ってコーディングスタイルを自動で修正してからプルリクエストを送るのがお作法になっているのですが、ある日 Symfony がヨーダ記法を採用してしまったために、同じルールセットを使っていた concrete5 でも、プルリクエストがヨーダ記法で送られるようになってしまいました。その結果「ヨーダ記法マジやめろ」的な苦情が即座に寄せられ、ヨーダ記法を無効化するプルリクエストが速攻でマージされました。

Yoda Style, Disable We Must!

↑ 弊社CTOのプルリクエストもヨーダの喋り方になってて洒落が効いているw (We must disable it が自然な英語の語順)

この時の反応の強さが非常に印象に残っていて、「英語的に不自然」なのって相当抵抗感があるんだな〜と実感しました。実際、メリットがある割に普及してないですよね、ヨーダ記法。

プログラミングの文法はほぼ英語。

ヨーダ記法のような異分子が現れることで逆に思うのは、プログラミング言語の文法って、本当に**ほぼ英語だよな〜**ということです。語順もそうですし、複雑な関係性の英文はネストすると読み解きやすくなるのもプログラミング言語と一緒です。SQLなんかそのまんま英語だし、メソッドチェインのような書き方が分かりやすいと感じるのも英語が話せないとピンと来ないんじゃないかと思います。

英語が専門じゃないので、具体的な解説は避けます(のでポエムです)が、英語を話せば話すほどプログラミングが楽になるという副作用を実感しています。すんなり書けるようになるし、プルリクエストの際にささいな書き方の指摘で怒られにくくなります。同じように感じている方と、お話ししてみたいなと思います。

余談

ヨーダといえば…ということで、こちらはあまり普及していないのですが、ヨーダ例外ハンドリング(Yoda Exception Handling)というものもあります。例外をキャッチするだけして、何もしないのを、ヨーダの有名な名言になぞらえてそう呼ぶそうです。

try {
  $ship->move();
} catch (Exception $e) {
  // Do. Or do not. There's no try.
}

まあ、例外を握りつぶすの自体、あまり褒められた作りではありませんので、普及しないのもむべなるかな。しかし、避けられない事情がある際に、catch 内に何もないのは書き忘れではなく、意図的に何もしていないのだ、ということを表現するのに便利なコメントですw

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?