k47.cz    — každý den dokud se vám to nezačne líbit
foto Praha výběr povídky kultura | twitter FB


Scala - postfixový if

8. 12. 2010 — k47 (CC by-sa)

Hackování v brilantním jazyce Scala pokračuje.


Některé jazyky jako třeba Ruby, Python nebo třeba CoffeScript mají takzvaný postfixový if a jeho obdobu unless, tedy podmínku, která se zapisuje ve formátu doSomething() if condition. Tahle syntaxe může být o něco příjemnější, protože je bližší přirozenému jazyku.

Scala postfixový if nemá, ale - hádejte co - je to jazyk natolik flexibilní, že není problém implementovat všechno, po čem toužíme. Bohužel nemůžeme použít jméno if, protože jde o klíčové slovo, což je jediná vada na kráse. Tedy takhle: můžeme použít if, ale musíme ho pak vždycky uvádět ve zpětných apostrofech. Svému účelu poslouží označení iff.

class Iff[T](a: => T) {
  def iff(cond: => Boolean) = if (cond) Some(a) else None
  def unless(cond: => Boolean) = if (cond) None else Some(a)
}

implicit def postfixIf[T](a: => T) = new Iff(a)

// test
println("Je tam ještě?") iff true        // vypíše text
println("Je tam ještě?") iff 1 == 0      // nevypíše nic

println("Je tam ještě?") unless false    // vypíše nic
println("Je tam ještě?") unless 1 == 1   // nevypíše nic

Všechno funguje díky implicitním konverzím a argumentům předávaným jménem. Podmíněný kód se provede skutečně jenom tehdy, když je podmínka pravdivá.

píše k47 & hosté, ascii@k47.cz