いろんな言語で Trick or Treat してみました。
Java
if(!treat) trick();
C#
if(!Treat) Trick();
Python
if not treat:
self.trick();
Ruby
trick unless treat?
結論: Ruby が一番シンプル
おまけ
||
の短絡評価を使えばもっとシンプルに書けます。
しかし、英語とは Trick と Treat の順番が逆になります。
C
treat || trick();
Ruby
treat? or trick
上のような書き方だと、JavaやC#などの言語だと、文だとみなしてくれないのでコンパイルエラーになります。
仕方ないので代入文にして回避します。
Java
//treat || trick(); // コンパイルエラー
boolean r = treat || trick();
C#
var r = Treat || Trick();
trick() に副作用があるとしたら、こういう書き方は避けるべきですが、今回はあえて利用しています。 普通はこういうコードを書かないほうがいいと(個人的には)思います。
元ネタ
Java「if(!treat) trick();」 C# 「if(!Treat) Trick();」 Python 「 if not treat: self.trick();」 Perl「treat or die」
— らこ (@laco0416) October 31, 2012
Ruby「trick unless treat」
— がむ (@gam0022) October 31, 2013