Ruby in Scala
Ok, il titolo del post è volutamente iperbolico, ma dovete sapete che amo gli eccessi! ![]()
Comunque tutto nasce da un post sulla lista dello Scala User Group italiano.
Partendo da un articolo su Scala di Daniel Spiewak, si mettono a confronto un frammento di codice Scala
def fillColor_=(fillColor:Color) = { if (!fillColor.equals(Color.RED)) { theFillColor = fillColor } else { throw new IllegalArgumentException("Color cannot be red") } }
con un (quasi) equivalente Ruby
def fill_color=(color) raise "Color cannot be red" if color == Color::RED @fill_color = color end
che è sicuramente più piacevole da leggere.
Ricordiamoci però che uno degli aspetti più interessanti di Scala è la facilità con cui è possibile creare DSL. Vediamo come possiamo in qualche modo mimare la sintassi del raise Ruby.
Definiamo prima l'oggetto RubySyntax (va bene, va bene, il nome è un po' pretenzioso, ma a me piace scherzare, dai...)
object RubySyntax { def raise(exceptionText: String)(condition: => Boolean): Unit = { if (condition) { throw new IllegalArgumentException(exceptionText); } } }
Quindi lo possiamo usare in una qualsiasi altra parte del nosto codice:
import RubySyntax._ object RubySyntaxTest { def main(args:Array[String]) = { val language = "Ruby" raise ("Language cannot be Ruby") { language.equals("Ruby") } } }
Certo, ci sono delle parentesi in più, ma abbiamo eliminato l'if. E poi sono convinto che voi sapreste fare di meglio! (Ovviamente in Scala).
Ancora dubbiosi su quale linguaggio scegliere? ![]()

Lascia un commento