Erste Erfahrungen mit Macros
Endlich hat Sven selber Erfahrungen mit Macros gesammelt. Auslöser waren erste Gehversuche mit Scala.js zur Umsetzung eines AngularJS-Projekts auf Basis von scalajs-angular.
Scala.js bietet nahezu alle Möglichkeiten von Scala, aber Reflection gehört nicht dazu. Probleme, die in Java üblicherweise über Reflection gelöst werden, lassen sich in Scala.js aber mit Macros meist eleganter und vor Allem zur Compilier-Zeit lösen.
scalajs-angular definiert zum Beispiel eine @injectable-Annotation um in Scala.js geschriebenen Komponenten den von Angular für Dependency-Injection benötigten Namen zuzuweisen. Darauf basierend hat Sven einige nützliche Macros erstellt:
Mehr zu meinen Erfahrungen mit Scala.js in der nächsten Episode.
SourceCodeKleine Scala Bibliothek, die Zugriff auf Source-Code Informationen wie z.B. den Dateinamen oder der Zeile zur Laufzeit bietet. Die benötigten Objekte können dazu über implizite Parameter oder implicitly geholt werden.
User-Cases=>
val CREATION_DATE = newField(...)Gibt aus: foo(arg = bar)
SourceCode
DottyVervollständigt die Features von 2.12. Auffälligste Änderung ist der neue ScalaDoc-Style.
Es folgen M5 und danach RC1.
Scala 2.12 FeaturesIn Scala 2.12 geht es im Wesentlichen darum die neuen Java 8 Features optimal zu nutzen:
sbt-webverspricht mit Web-JARs die einfache Einbindung von JavaScript-Libraries und mit Plug-Ins einen einfachen Aufbau einer Frontend-Asset-Pipeline, um z.B. LESS- oder SASS-Dateien zu CSS zu compilieren, ES6-JavaScript nach ES5 zu compilieren, zu konkatenieren und zu minifizieren.
In der Praxis klappt das leider nicht: Die sbt-web-Plug-Ins sind halbherzig umgesetzt:
Mit sbt-web-Plug-Ins wie zum Beispiel sbt-play-gulp lässt sich eine Asset-Pipeline mit im JavaScript-Umfeld etablierten Build-Systemen (in diesem Fall GULP) aufbauen und in de Play-Lifecycle einbinden.
ScalaCSSScala Bibliothek zum Erzeugen von CSS, ähnlich wie LESS oder SASS, allerdings mit Scala-Code.
Browser PrefixBei CSS-Attributen oder Funktionen bei denen für die verschiedenen Browser ein Prefix verwendet werden muss kümmert ScalaCSS sich automatisch darum die Prefixe für alle Browser gesetzt werden.
Konflikterkennung // In MyGenericTheme.scala val button = style(margin(8 px, auto), ...) // In UserStyles.scala val userTitle = style(marginLeft(4 ex), ...) ... val userButton = style(button, userTitle, ...)ScalaCSS produziert hier auf Wunsch eine Warnung und es kann festgelegt werden, welcher Stil gewinnen soll.
LinksGib uns Dein Feedback als Kommentar auf unserer Web-Site, via Twitter oder Google+.
Kapitel
Scala Profis von Benjamin Hagemeister & Sven Wiegand ist lizenziert unter einer Creative Commons Namensnennung — Keine Bearbeitungen 4.0 International Lizenz.
Über diese Lizenz hinausgehende Erlaubnisse kannst Du unter http://scalaprofis.de erhalten.
Titelsong basierend auf Wish You Were Here von THE.MADPIX.PROJECT lizensiert unter Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0).