Scala - Grundlegende Syntax

Wenn Sie ein gutes Verständnis für Java haben, ist es für Sie sehr einfach, Scala zu lernen. Der größte syntaktische Unterschied zwischen Scala und Java besteht darin, dass das ';' Das Zeilenendezeichen ist optional.

Wenn wir ein Scala-Programm betrachten, kann es als eine Sammlung von Objekten definiert werden, die über das Aufrufen der Methoden des jeweils anderen kommunizieren. Lassen Sie uns nun kurz untersuchen, was Klassen-, Objekt-, Methoden- und Instanzvariablen bedeuten.

  • Object- Objekte haben Zustände und Verhaltensweisen. Ein Objekt ist eine Instanz einer Klasse. Beispiel - Ein Hund hat Zustände - Farbe, Name, Rasse sowie Verhalten - wedeln, bellen und essen.

  • Class - Eine Klasse kann als Vorlage / Blaupause definiert werden, die die Verhaltensweisen / Zustände beschreibt, die sich auf die Klasse beziehen.

  • Methods- Eine Methode ist im Grunde ein Verhalten. Eine Klasse kann viele Methoden enthalten. Es ist in Methoden, in denen die Logik geschrieben, Daten manipuliert und alle Aktionen ausgeführt werden.

  • Fields- Jedes Objekt verfügt über einen eindeutigen Satz von Instanzvariablen, die als Felder bezeichnet werden. Der Status eines Objekts wird durch die diesen Feldern zugewiesenen Werte erstellt.

  • Closure - A. closure ist eine Funktion, deren Rückgabewert vom Wert einer oder mehrerer außerhalb dieser Funktion deklarierter Variablen abhängt.

  • Traits- Ein Merkmal kapselt Methoden- und Felddefinitionen, die dann durch Mischen in Klassen wiederverwendet werden können. Merkmale werden verwendet, um Objekttypen zu definieren, indem die Signatur der unterstützten Methoden angegeben wird.

Erstes Scala-Programm

Wir können ein Scala-Programm in zwei Modi ausführen: einer ist interactive mode und ein anderer ist script mode.

Interaktiver Modus

Öffnen Sie die Eingabeaufforderung und öffnen Sie Scala mit dem folgenden Befehl.

\>scala

Wenn Scala in Ihrem System installiert ist, wird die folgende Ausgabe angezeigt:

Welcome to Scala version 2.9.0.1
Type in expressions to have them evaluated.
Type :help for more information.

Geben Sie den folgenden Text rechts von der Scala-Eingabeaufforderung ein und drücken Sie die Eingabetaste -

scala> println("Hello, Scala!");

Es wird das folgende Ergebnis erzeugt -

Hello, Scala!

Skriptmodus

Verwenden Sie die folgenden Anweisungen, um ein Scala-Programm im Skriptmodus zu schreiben. Öffnen Sie den Editor und fügen Sie den folgenden Code hinzu.

Beispiel

object HelloWorld {
   /* This is my first java program.  
   * This will print 'Hello World' as the output
   */
   def main(args: Array[String]) {
      println("Hello, world!") // prints Hello World
   }
}

Speichern Sie die Datei als - HelloWorld.scala.

Öffnen Sie das Eingabeaufforderungsfenster und wechseln Sie in das Verzeichnis, in dem die Programmdatei gespeichert ist. Das 'scalacDer Befehl 'wird zum Kompilieren des Scala-Programms verwendet und generiert einige Klassendateien im aktuellen Verzeichnis. Einer von ihnen wird gerufenHelloWorld.class. Dies ist ein Bytecode, der auf Java Virtual Machine (JVM) mit 'ausgeführt wird.scala' Befehl.

Verwenden Sie den folgenden Befehl, um Ihr Scala-Programm zu kompilieren und auszuführen.

\> scalac HelloWorld.scala
\> scala HelloWorld

Ausgabe

Hello, World!

Grundlegende Syntax

Im Folgenden sind die grundlegenden Syntaxen und Codierungskonventionen in der Scala-Programmierung aufgeführt.

  • Case Sensitivity - Scala unterscheidet zwischen Groß- und Kleinschreibung, dh Kennung Hello und hello hätte in Scala eine andere Bedeutung.

  • Class Names- Bei allen Klassennamen sollte der erste Buchstabe in Großbuchstaben geschrieben sein. Wenn mehrere Wörter verwendet werden, um einen Namen für die Klasse zu bilden, sollte der erste Buchstabe jedes inneren Wortes in Großbuchstaben geschrieben sein.

    Example - Klasse MyFirstScalaClass.

  • Method Names- Alle Methodennamen sollten mit einem Kleinbuchstaben beginnen. Wenn mehrere Wörter verwendet werden, um den Namen der Methode zu bilden, sollte der erste Buchstabe jedes inneren Wortes in Großbuchstaben geschrieben sein.

    Example - def myMethodName ()

  • Program File Name- Der Name der Programmdatei sollte genau mit dem Objektnamen übereinstimmen. Wenn Sie die Datei speichern, sollten Sie sie unter dem Objektnamen speichern (bei Scala wird zwischen Groß- und Kleinschreibung unterschieden) und anhängen..scala'bis zum Ende des Namens. (Wenn der Dateiname und der Objektname nicht übereinstimmen, wird Ihr Programm nicht kompiliert.)

    Example- Angenommen, 'HelloWorld' ist der Objektname. Dann sollte die Datei als 'HelloWorld.scala' gespeichert werden.

  • def main(args: Array[String]) - Die Verarbeitung des Scala-Programms beginnt mit der main () -Methode, die in jedem Scala-Programm obligatorisch ist.

Scala-Kennungen

Alle Scala-Komponenten erfordern Namen. Namen, die für Objekte, Klassen, Variablen und Methoden verwendet werden, werden als Bezeichner bezeichnet. Ein Schlüsselwort kann nicht als Bezeichner verwendet werden, und bei Bezeichnern wird zwischen Groß- und Kleinschreibung unterschieden. Scala unterstützt vier Arten von Bezeichnern.

Alphanumerische Bezeichner

Eine alphanumerische Kennung beginnt mit einem Buchstaben oder einem Unterstrich, auf den weitere Buchstaben, Ziffern oder Unterstriche folgen können. Das Zeichen '$' ist ein reserviertes Schlüsselwort in Scala und sollte nicht in Bezeichnern verwendet werden.

Folgende sind legal alphanumeric identifiers - -

age, salary, _value,  __1_value

Folgende sind illegal identifiers - -

$salary, 123abc, -salary

Operator-IDs

Eine Operator-ID besteht aus einem oder mehreren Operatorzeichen. Operatorzeichen sind druckbare ASCII-Zeichen wie +,:,?, ~ Oder #.

Im Folgenden finden Sie rechtliche Betreiberkennungen -

+ ++ ::: <?> :>

Der Scala-Compiler "entwirrt" intern Operator-IDs, um sie in legale Java-IDs mit eingebetteten $ -Zeichen umzuwandeln. Zum Beispiel würde der Bezeichner: -> intern als $ Doppelpunkt $ minus $ größer dargestellt.

Gemischte Kennungen

Eine gemischte Kennung besteht aus einer alphanumerischen Kennung, gefolgt von einem Unterstrich und einer Operatorkennung.

Es folgen legale gemischte Kennungen -

unary_+,  myvar_=

Hier definiert unary_ + als Methodenname einen unären + Operator und myvar_ = als Methodenname einen Zuweisungsoperator (Operatorüberladung).

Literale Bezeichner

Eine Literal-ID ist eine beliebige Zeichenfolge, die in Back-Ticks (`...`) eingeschlossen ist.

Es folgen rechtliche wörtliche Kennungen -

`x` `<clinit>` `yield`

Scala Schlüsselwörter

Die folgende Liste zeigt die reservierten Wörter in Scala. Diese reservierten Wörter dürfen nicht als Konstante, Variable oder andere Bezeichnernamen verwendet werden.

abstrakt Fall Fang Klasse
def tun sonst erweitert
falsch Finale schließlich zum
für einige wenn implizit importieren
faul Spiel Neu Null
Objekt überschreiben Paket Privat
geschützt Rückkehr versiegelt Super
diese werfen Merkmal Versuchen
wahr Art val Var
während mit Ausbeute  
- - :: = =>
<- <: <% >:
# @

Kommentare in Scala

Scala unterstützt einzeilige und mehrzeilige Kommentare, die Java sehr ähnlich sind. Mehrzeilige Kommentare können verschachtelt sein, müssen jedoch ordnungsgemäß verschachtelt sein. Alle in einem Kommentar verfügbaren Zeichen werden vom Scala-Compiler ignoriert.

object HelloWorld {
   /* This is my first java program.  
    * This will print 'Hello World' as the output
    * This is an example of multi-line comments.
    */
   def main(args: Array[String]) {
      // Prints Hello World
      // This is also an example of single line comment.
      println("Hello, world!") 
   }
}

Leerzeilen und Leerzeichen

Eine Zeile, die nur Leerzeichen enthält, möglicherweise mit einem Kommentar, wird als Leerzeile bezeichnet, und Scala ignoriert sie vollständig. Token können durch Leerzeichen und / oder Kommentare getrennt werden.

Newline-Zeichen

Scala ist eine zeilenorientierte Sprache, in der Anweisungen durch Semikolons (;) oder Zeilenumbrüche abgeschlossen werden können. Ein Semikolon am Ende einer Anweisung ist normalerweise optional. Sie können eine eingeben, wenn Sie möchten, müssen dies jedoch nicht, wenn die Anweisung von selbst in einer einzelnen Zeile angezeigt wird. Andererseits ist ein Semikolon erforderlich, wenn Sie mehrere Anweisungen in eine einzelne Zeile schreiben. Die folgende Syntax enthält die Verwendung mehrerer Anweisungen.

val s = "hello"; println(s)

Scala-Pakete

Ein Paket ist ein benanntes Codemodul. Das Dienstprogramm Lift lautet beispielsweise net.liftweb.util. Die Paketdeklaration ist die erste Zeile ohne Kommentar in der Quelldatei wie folgt:

package com.liftcode.stuff

Scala-Pakete können importiert werden, damit im aktuellen Kompilierungsbereich auf sie verwiesen werden kann. Die folgende Anweisung importiert den Inhalt des scala.xml-Pakets -

import scala.xml._

Sie können eine einzelne Klasse und ein einzelnes Objekt, z. B. HashMap, aus dem Paket scala.collection.mutable importieren.

import scala.collection.mutable.HashMap

Sie können mehr als eine Klasse oder ein Objekt aus einem einzelnen Paket importieren, z. B. TreeMap und TreeSet aus dem Paket scala.collection.immutable.

import scala.collection.immutable.{TreeMap, TreeSet}

Dynamisch anwenden

Ein Markermerkmal, das dynamische Aufrufe ermöglicht. Instanzen x dieses Merkmals ermöglichen Methodenaufrufe x.meth (args) für beliebige Methodennamen meth und Argumentlistenargumente sowie Feldzugriffe x.field für beliebige Feldnamenfelder. Diese Funktion wird in Scala-2.10 eingeführt.

Wenn ein Aufruf von x nicht nativ unterstützt wird (dh wenn die Typprüfung fehlschlägt), wird er gemäß den folgenden Regeln neu geschrieben:

foo.method("blah") ~~> foo.applyDynamic("method")("blah")
foo.method(x = "blah") ~~> foo.applyDynamicNamed("method")(("x", "blah"))
foo.method(x = 1, 2) ~~> foo.applyDynamicNamed("method")(("x", 1), ("", 2))
foo.field ~~> foo.selectDynamic("field")
foo.varia = 10 ~~> foo.updateDynamic("varia")(10)
foo.arr(10) = 13 ~~> foo.selectDynamic("arr").update(10, 13)
foo.arr(10) ~~> foo.applyDynamic("arr")(10)