Scala.tex 3.7 KB

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