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

Scala - postfixový if

8. 12. 2010 (před 8 lety) — k47 (CC by-sa) (♪)

Hac­ko­vání v bri­lant­ním jazyce Scala po­kra­čuje.


Ně­které jazyky jako třeba Ruby, Python nebo třeba Co­f­fe­Script mají tak­zvaný po­st­fi­xový if a jeho obdobu unless, tedy pod­mínku, která se za­pi­suje ve for­mátu doSomething() if condition. Tahle syn­taxe může být o něco pří­jem­nější, pro­tože je bližší při­ro­ze­nému jazyku.

Scala po­st­fi­xový if nemá, ale – há­dejte co – je to jazyk na­to­lik fle­xi­bilní, že není pro­blém im­ple­men­to­vat všechno, po čem tou­žíme. Bo­hu­žel ne­mů­žeme použít jméno if, pro­tož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ět­ných apo­stro­fech. Svému účelu po­slouží 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 fun­guje díky im­pli­cit­ním kon­ver­zím a ar­gu­men­tům pře­dá­va­ným jménem. Pod­mí­něný kód se pro­vede sku­tečně jenom tehdy, když je pod­mínka prav­divá.

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