( enpassant | 2015. 07. 16., cs – 10:55 )

Az alap Java-ból hiányoznak azok az elemek, amikkel könnyen compose-álhatunk dolgokat, a go-t nem ismerem nagyon mélyen, így Scala-val mutatom az utolsó példát, hogyan lesz egyszerű és compose-ált a hibakezelés:


db.beginTransaction
Try(db.insert(foo)) flatmap
  Try(mail.send(bar)) map
  db.commmit recover
  db.rollback

Ha egy kicsit meg akarnánk bonyolítani a helyzetünket, akkor tegyük fel, hogy, ha nem sikerül az adatbázis beszúrás, akkor egy másik beszúrással próbálkozunk, illetve, ha nem megy el az email, akkor egy másik email küldéssel próbálkozunk. Ezt try-catch-el már kicsit bonyolultabban lehet csak megoldani.


db.beginTransaction
Try(db.insert(foo)) orElse Try(db.insert(foo2)) flatmap
  Try(mail.send(bar)) orElse Try(mail.send(bar2)) map
  db.commmit recover
  db.rollback

"Idézet: könnyű refaktorálni. Mennyivel könnyebb, mint a check exception-nél?"

Annyival, hogy itt egy fajta hiba van (Error a Go-nál, Throwable a Java, Scala-nál). Ha mindig csak Throwable-t dobsz (ez van a szignatúrában), akkor ott is könnyű, de ugye nem ez az ajánlott megoldás checked exception esetén.