ネタ元:比較演算式へのこだわり@R.Tanaka.Ichiro's Blog
※以下、コードっぽく書いてあるのは、すべて実在しない妄想文法です。
いつも以下のような記法が欲しいと思っています。
x : >= 10 && <= 20 && != 18
素晴らしいですね。是非欲しいです。
ところで、比較は、大小比較ばかりではありません。
広義には、String.StartsWith とか、SQL の IN とか ANY とかも比較のうちに入るはずです。
例えば、「ある文字列 x が、"Foo" か "Bar" で始まるか?」という検証はどうなるでしょう?
こう?
x : .StartsWith( "Foo" ) || .StartsWith( "Bar" )
…VBのwithみたいですね。
さて、このコードを、素直に日本語に訳すと、「x が "Foo" で始まるか、または "Bar" で始まる」になります。
一方で、題意は「x が "Foo" または "Bar" で始まる」でした。
あくまで、日本語を素直に翻訳することにこだわると、
x.StartsWith( "Foo" || "Bar" )
こんな感じになるかもしれません。
論理型以外に対する || 演算子が、項を連結したリストを生成すれば可能かもしれませんね。
ショートサーキットを実現するには、遅延評価も必要になりそうです。
.NETのSystem.Stringには存在しませんが、「文字列中に特定の部分文字列を含むか?」を判定するメソッド Contains を考えると、
x.Contains( ( ( "Foo" && "Bar" ) || "Zee" ) && ! "Goo" );
こんなのも書けます。
意味はもちろん、「x は、"Foo" と "Bar の両方、または "Zee" を含み、"Goo" を含まない」です。
普通に書くとこうですね。
( ( x.Contains("Foo") || x.Contains("Bar") ) || x.Contains("Zee") ) && ! x.Contains( "Goo" )
他にも、「ある数値型変数aが、i、j、kのいずれよりも大きいか」は
a > ( i && j && k )
とか、「aがi、j、kのどれかよりも大きいか」なら、
a > ( i || j || k )
とか。
妄想ですよ、妄想。