\chapter{Scala} \index{Scala|(} Scala ist eine objektorientierte und funktionale Programmiersprache, die auf der JVM aufbaut und in Java Bytecode kompiliert wird. Scala bedeutet \underline{sca}lable \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 werden. Für andere Systeme stehen auf \url{http://www.scala-lang.org/download/} verschiedene Binärdateien bereit. \subsection{Hello World} \subsubsection{Interaktiv} \inputminted[numbersep=5pt, tabsize=4]{bash}{scripts/scala/scala-test.scala} 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. \item Scala ist kompakter. \end{itemize} } Weitere Informationen hat Graham Lea unter \url{http://tinyurl.com/scala-hello-world} zur Verfügung gestellt. \section{Syntax} 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. \inputminted[numbersep=5pt, tabsize=4]{scala}{scripts/scala/val-syntax.scala} Variablen werden durch das Schlüsselwort \texttt{var}\xindex{var} angezeigt: \inputminted[numbersep=5pt, tabsize=4]{scala}{scripts/scala/var-syntax.scala} Methoden werden mit dem Schlüsselwort \texttt{def}\xindex{def} erzeugt: \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} und so instanziiert: \inputminted[numbersep=5pt, tabsize=4]{scala}{scripts/scala/simple-class-instanciation.scala} \section{Beispiele} \section{Weitere Informationen} \begin{itemize} \item \url{http://docs.scala-lang.org/style/naming-conventions.html} \end{itemize} \index{Scala|)}