プログラマーから見たあやふやな世界

プログラマーが悩む
プログラマーの夫とその妻という設定でこんなジョークがあります。

A wife asks her husband, a programmer, “Could you please go shopping for me and buy one carton of milk, and if they have eggs, get6?”

A short time later the husband comes back with 6cartons of milk and his wife asks “Why did you buy 6 cartons of milk?”

He replies “They had eggs.”

英語原文


 

妻がプログラマーの夫におつかいを頼んだ。
「牛乳買ってきてくれない?あともし卵があったら6個。よろしくねー。」

しばらくして夫が買い物から帰ってきた。
牛乳を6つも抱えて。

妻は聞いた。
「なんで牛乳を6つも買ってきちゃったの!?」

夫「だって、卵があったから。」

意訳

もしかするとプログラミングを経験した事が無い人はこの話のミソが分からないかもしれませんね。
普通であれば「牛乳を1つと、卵があれば”卵を”6つ」買ってくるのが自然な行動と言えます。
実にたわいもないありふれた日常会話です。

ではなぜプログラム経験者であればクスっときてしまうのか。

プログラミングには
if 〜〜 else 〜〜 という書き方があります。
日本語でも全く同じで「もしであれば〜〜もしそうでなければ〜〜」です。

このジョークをプログラム風に書いてみると。。。

初期値↓;
牛乳の数 = 1;
卵の数 = 0;

もし(店に置いている卵の数が(1以上だったら)) {
   牛乳の数 = 6;
   卵の数 = 0;
} その他にもし(店に置いている卵の数が 0だったら ) {
   牛乳の数 = 1
   卵の数 = 0;
}

買い物をする((牛乳の数)と(卵の数)だけ);

と、こんな感じになるでしょうか。

店に卵が1個でもあったから牛乳を6つ買ってきた!
プログラムとしては非常に素直かつ当然の挙動です。

プログラムは行間が読めません。
所謂KYですが、書いてある事が全てなのです。

ちなみにこの書き方だと卵の数は変動しませんので、
夫はいずれにしても卵を買う事はなかったのでしょうね。

関連記事