2014-02-01 13:46:33 +01:00
\chapter { Scala}
\index { Scala|(}
2014-02-01 14:39:16 +01:00
2014-03-07 19:17:17 +01:00
Scala ist eine objektorientierte und funktionale Programmiersprache, die auf der JVM aufbaut und in Java Bytecode kompiliert wird. Scala bedeutet \underline { sca} lable
2014-03-05 13:42:36 +01:00
\underline { la} nguage.
Mit sog. \enquote { actors} bietet Scala eine Unterstützung für die Entwicklung
prallel ausführender Programme.
Weitere Materialien sind unter \url { http://www.scala-lang.org/} und
\url { http://www.simplyscala.com/} zu finden.
\section { Erste Schritte}
Scala kann auf Debian-basierten Systemen durch das Paket \texttt { scala} installiert
2014-03-07 19:17:17 +01:00
werden. Für andere Systeme stehen auf \url { http://www.scala-lang.org/download/}
verschiedene Binärdateien bereit.
2014-03-05 13:42:36 +01:00
\subsection { Hello World}
\subsubsection { Interaktiv}
2014-03-07 19:17:17 +01:00
\inputminted [numbersep=5pt, tabsize=4] { bash} { scripts/scala/scala-test.scala}
2014-03-05 13:42:36 +01:00
Es kann mit \texttt { ./scala-test.scala Scala funktioniert} ausgeführt werden.
\subsubsection { Kompiliert}
\inputminted [linenos, numbersep=5pt, tabsize=4, frame=lines, label=hello-world.scala] { scala} { scripts/scala/hello-world.scala}
Dieses Beispiel kann mit \texttt { scalac hello-world.scala} kompiliert und mit
\texttt { scala HelloWorld} ausgeführt werden.
\section { Vergleich mit Java}
Scala und Java haben einige Gemeinsamkeiten, wie den Java Bytecode, aber auch
einige Unterschiede.
\noindent \parbox [t] { 2.4in} { \raggedright %
\textbf { \textit { Gemeinsamkeiten} }
\begin { itemize} [topsep=0pt,itemsep=-2pt,leftmargin=13pt]
\item Java Bytecode
\item Keine Mehrfachvererbung
\item Statische Typisierung
\item Scopes
\end { itemize}
} %
\parbox [t] { 2.4in} { \raggedright %
\textbf { \textit { Unterschiede} }
\begin { itemize} [topsep=0pt,itemsep=-2pt,leftmargin=13pt]
\item Java hat Interfaces, Scala hat traits.
\item Java hat primitive Typen, Scala ausschließlich Objekte.
\item Scala benötigt kein \texttt { ;} am Ende von Anweisungen.
2014-03-05 14:36:32 +01:00
\item Scala ist kompakter.
2014-03-10 15:39:59 +01:00
\item Java hat \texttt { static} , Scala hat \texttt { object} (Singleton)
2014-03-05 13:42:36 +01:00
\end { itemize}
}
2014-03-05 14:36:32 +01:00
Weitere Informationen hat Graham Lea unter \url { http://tinyurl.com/scala-hello-world} zur Verfügung gestellt.
2014-02-01 14:39:16 +01:00
2014-02-01 13:46:33 +01:00
\section { Syntax}
2014-03-05 13:42:36 +01:00
In Scala gibt es sog. \textit { values} , die durch das Schlüsselwort \texttt { val} \xindex { val}
angezeigt werden. Diese sind Konstanten. Die Syntax ist der UML-Syntax ähnlich.
2014-03-05 14:36:32 +01:00
\inputminted [numbersep=5pt, tabsize=4] { scala} { scripts/scala/val-syntax.scala}
2014-03-05 13:42:36 +01:00
Variablen werden durch das Schlüsselwort \texttt { var} \xindex { var} angezeigt:
2014-02-01 13:46:33 +01:00
2014-03-05 14:36:32 +01:00
\inputminted [numbersep=5pt, tabsize=4] { scala} { scripts/scala/var-syntax.scala}
2014-03-05 13:42:36 +01:00
Methoden werden mit dem Schlüsselwort \texttt { def} \xindex { def} erzeugt:
2014-03-05 14:36:32 +01:00
\inputminted [numbersep=5pt, tabsize=4] { scala} { scripts/scala/method-syntax.scala}
Klassen werden wie folgt erstellt:
\inputminted [numbersep=5pt, tabsize=4] { scala} { scripts/scala/simple-class-example.scala}
2014-03-07 19:17:17 +01:00
und so instanziiert:
\inputminted [numbersep=5pt, tabsize=4] { scala} { scripts/scala/simple-class-instanciation.scala}
2014-03-05 13:42:36 +01:00
2014-03-08 13:16:08 +01:00
Listen können erstellt und durchgegangen werden:
\inputminted [numbersep=5pt, tabsize=4] { scala} { scripts/scala/extended-for.scala}
2014-03-10 15:39:59 +01:00
\section { Companion Object} \xindex { Companion Object}
Ein Companion Object ist ein Objekt mit dem Namen einer Klasse oder eines Traits.
Im Gegensatz zu anderen Objekten / Traits hat das Companion Object zugriff auf
die Klasse.
\section { actor} \xindex { actor}
actor dient der Concurrency.
2014-03-05 13:42:36 +01:00
\section { Beispiele}
2014-03-10 15:39:59 +01:00
\subsection { Wetter}
Das folgende Script sendet parallel Anfragen über verschiedene ZIP-Codes an
die Yahoo-Server, parst das XML und extrahiert die Stadt sowie die Temperatur:
\inputminted [linenos, numbersep=5pt, tabsize=4, frame=lines, label=weather.scala] { scala} { scripts/scala/weather.scala}
2014-02-01 13:46:33 +01:00
2014-03-07 19:17:17 +01:00
\section { Weitere Informationen}
\begin { itemize}
\item \url { http://docs.scala-lang.org/style/naming-conventions.html}
\end { itemize}
2014-03-05 13:42:36 +01:00
\index { Scala|)}