Mittwoch, 17. Oktober 2007

Dieser Blog ist tot. Ich blogge weiter auf dem «Agile Trail».

[Grails eXchange] Session Domain Specific Languages in Groovy (Venkat Subramaniam)

Venkat Subramaniam ein weiteres Mal für heute. Diesmal: DSLs.

Venkat geht auf den Unterschied von internal und external DSLs ein. Groovy ermöglicht internal DSLs. Venkat betont die Wichtigkeite der Kontextsinsitivität ("Two Venti Latte with two Shot Expresso" means Coffee at Starbucks aka the Starbucks DSL).

Fluent Interface beschreibt Venkat etwas anders, als ich es bislang gehört habe und selbst beschreiben würde. Für ihn sind alle DSLs, auch die Builder in Grails, Fluent Interfaces.

Eine Pizzabestellung wird flüssig gemacht, indem alle Setter das Objekt selbst zurückgeben. Venkat entwickelt das Beispiel weiter: ein Setter gibt nicht sich selbst zurück, sondern die Zeit, die die Bestellung bis zur Auslieferung benötigen wird. Hier benutzt Venkat auf clevere Weise Closures.

Jetzt kommen die Builder ins Spiel. Venkat demonstriert die Power des MarkupBuilders, um XML zu erzeugen. Er spielt ein wenig mit MOP rum, und kommt dabei durcheinander mit Ruby (er erzeugt zum Beispiel eine Klasse test.rb) - interessanter Marketingeffekt, muss ich mir merken :-)

Venkat demonstiert noch ein weiteres Beispiel:


players 'Scott', 'Venkat', 'Neal'

Scott 7
Venkat 5
Neal 8

printScores

Das ist Groovy-Code! Wie macht er das? So:

printScores = [:]

def players(Object[] player) {
player.each{ printScores."$it" = 0 }
}

def invokeMethod(String name, args) {
printScores[name] = args[0]
}

Sehr schön!

Dann gibt's ein größeres Beispiel, mit dem er folgende Syntax als DSL etablieren kann:

2.days.ago.at(4:30)

Zuerst zeigt er das Ganze mit Categories, danach mit der ExpandoMetaClass.

Auf IntelliJs MPS sollte man ein Auge halten, meint Venkat.

Tolle Session!

blog comments powered by Disqus