orangeitems’s diary

40代ITエンジニアが毎日何か書くブログ

ANDとORは意外と難しい

f:id:orangeitems:20200718115644j:plain

 

GoToキャンペーン、もう滅茶苦茶になってますね。

で、GoToキャンペーンの条件に当てはまるためには、いろいろな条件分岐が出てきそうです。東京除外?若者・高齢者除外?団体除外?。AかつBもしくはC、なんて判定する方は大変ですね。旅行業者も取りっぱぐれたら危ない。キャンペーン対象として割引して国に申請したら認められない・・とか。

 

この条件分岐のことで思うんですが、「かつ(And条件)」と「もしくは(Or条件)」って、意外と頭の中で混乱するということです。

例えば、GoToキャンペーンにおいて年齢で除外するとしますよね。

条件:(旅行者=若者)もしくは(旅行者=高齢者)

こう書けばいいですよね。もし、

条件:(旅行者=若者)かつ(旅行者=高齢者)

と書いてしまった場合、若者でもあり高齢者でもある旅行者なんているはずがありません。

日本語で書けば理解はしやすいのですが。もし、言語やSQLを使ったとすると、

条件:(旅行者=若者)OR(旅行者=高齢者)

と書くのが正解です。ですから、ORを使うのが普通です。

条件:(旅行者=若者)AND(旅行者=高齢者)

と書くと、前項の通り、誰も当てはまらなくなってしまいます。

 

でも、この、ANDやORという言葉、日本語で再翻訳するとちょっと訳が分からなくなることがあります。

「棚の上の、しょうゆと塩を取って~」

というとき、「Please give me 醤油 AND 塩 on shelf」と言いますよね。つまり、

AND = 「と」(助詞)

となります。

じゃあ元の問題に戻ります。

条件:(旅行者=若者)と(旅行者=高齢者)

とすると、一見、問題なさそうに見えるじゃないですか?

だから、言語はSQLで書く時、日本人ってここでANDを使い勝ちなんじゃないかと思うんです。でも、「Please give me 醤油 OR 塩 on shelf」って書くと、「棚の上の、しょうゆか塩を取って~」となってしまい、助詞の「か」になってしまいますよね。

だから、

条件:(旅行者=若者)か(旅行者=高齢者)

お、こっちも正しそうに見えますよね!

 

だから、日本語の「と」「か」って、ANDやORと微妙にニュアンスが違っていると思います。「かつ」「もしくは」っていう言葉にしないと、一致しません。

「棚の上の、しょうゆかつ塩を取って~」

「棚の上の、しょうゆもしくは塩を取って~」

 意味としては、完璧です。

プログラミングの際のバグって、こういう、日本語と英語の間の微妙なニュアンスの違いが引き起こすんじゃないかなぁと思います。

 

とまあ、ここまで書いても、なかなか頭の中でAND、ORと、「と」「か」の使い方って場面によって微妙なので、わかったとしても今後もケアレスミスしてしまいそうだなと思う次第です。

日本語っぽいプログラミング言語があったら面白いですが、コンピュータがあいまいな動きをして人間側が困りそうな気もしますね。