Scala - Zřetězené porovnávání
Perl 6 (Duke Nukem Forever mezi programovacími jazyky, který je mimochodem
naprosto epic), má neuvěřitelně bohatou syntaxi a jednou z tisíce
vychytávek je zřetězené
porovnávání, kdy můžete zapsat podmínku ve tvaru 20 <=
$temperature <= 25. Když se na to podíváte, dává to smysl na
první pohled, ale většina jazyků výraz nevyhodnotí jako 20 <=
$temperature && $temperature <= 25, ale jako (20 <=
$temperature) <= 25, což není, co by člověk chtěl.
Nicméně i zřetězené porovnávání se dá docela pěkně implementovat ve Scale.
class CC[T <% Ordered[T]](val v: T, val b: Boolean = true) {
// view bound T <% Ordered[T] zaručuje, že T má metody <, >, <=, >=
def toBool = b
private def make(x: Boolean) = new CC(v, b && x)
def <<:(a: CC[T]) = make(a.v < v) // <: je klíčové slovo - tzv. upper type bound
def :<<(a: CC[T]) = make(v < a.v)
def >>:(a: CC[T]) = make(a.v > v) // >: je klíčové slovo - tzv. lower type bound
def :>>(a: CC[T]) = make(v > a.v)
def <=:(a: CC[T]) = make(a.v <= v)
def :<=(a: CC[T]) = make(v <= a.v)
def >=:(a: CC[T]) = make(a.v >= v)
def :>=(a: CC[T]) = make(v >= a.v)
override def toString() = "CC " + b.toString
}
implicit def v2cc[T <% Ordered[T]](v: T) = new CC(v)
implicit def cc2b[T](v: CC[T]) = v.toBool
// test
val a = 20
val b = 15
if (10 <<: a :<< 30) { println("ok") } else { println("chyba") }
if (10 <<: a :<< 15) { println("chyba") } else { println("ok") }
if (10 <<: a :>> b) { println("ok") } else { println("chyba") }
Metody končící dvojtečkou se v pozici operátorů volají v opačném
pořadí. Metody se bohužel nemůžou jmenovat <: a
>:, protože to jsou klíčová slova. Teoreticky všechny
metody začínající dvojtečkou by mohly mít podobu standardních operátorů
porovnání (tedy místo :<< by se použilo
<, místo :>> pak > atd), ale
z důvodu konzistence a jako signál, že se děje něco nekalého, jsem nechal
tvar takový jaký je.
Mimochodem, příklad funguje díky tomu, že kompilátor implicitními
konverzemi transformuje výraz 10 <<: 15 :<< 20 na
cc2b(bv2cc(15).<<:(10).:<<(20)).




Jmenuji se Karel Čížex, v síti také známý jako 
komentáře