English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala 基础语法

Wenn Sie zuvor ein Java-Programmierer waren und die Grundlagen der Java-Sprache kennen, können Sie Scala schnell lernen.

Der größte Unterschied zwischen Scala und Java ist: Der Semikolon ; am Ende einer Scala-Anweisung ist optional.

Wir können Scala-Programme als Sammlung von Objekten betrachten, die durch Aufruf gegenseitiger Methoden Nachrichten übermitteln. Lassen Sie uns nun die Begriffe Klasse, Objekt, Methode und Beispielvariable verstehen:

  • Objekt - Objekte haben Eigenschaften und Verhaltensweisen. Zum Beispiel: Die physischen Eigenschaften eines Hundes sind: Farbe, Name, Verhaltensweisen: Bellen, Laufen, Essen usw. Ein Objekt ist ein Beispiel für eine Klasse.

  • Klasse - Klassen sind die Abstraktion von Objekten, und Objekte sind konkrete Beispiele für Klassen.

  • Methoden - Methoden beschreiben grundlegende Verhaltensweisen, eine Klasse kann mehrere Methoden enthalten.

  • Felder - Jeder Objekt hat eine einzigartige Sammlung von Beispielvariablen, d.h. Felder. Die Eigenschaften des Objekts werden durch Zuweisung an die Felder erstellt.

Der erste Scala-Programm

Interaktive Programmierung

Interaktive Programmierung erfordert keine Erstellung von Skriptdateien und kann über den folgenden Befehl aufgerufen werden:

$ scala
Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_31).
Type in expressions to have them evaluated.
Type :help for more information.
scala> 1 + 1
res0: Int = 2
scala> println("Hello World!")
Hello World!
scala>

Skriptform

Wir können auch durch Erstellen einer HelloWorld.scala-Datei den Code ausführen, der wie folgt aussieht:

object HelloWorld {
   /* Dies ist mein erster Scala-Programm
    * Das folgende Programm gibt 'Hello World!' aus 
    */
   def main(args: Array[String]) {
      println("Hello, world!") // Gibt "Hello World" aus
   }
}

Nun verwenden wir den Befehl scalac, um es zu kompilieren:

$ scalac HelloWorld.scala 
$ ls
HelloWorld$.class    HelloWorld.scala
HelloWorld.class

Nach der Kompilierung können wir sehen, dass im Verzeichnis die HelloWorld.class-Datei erstellt wurde, die auf dem Java Virtual Machine (JVM) ausgeführt werden kann.

Nach der Kompilierung können wir den folgenden Befehl verwenden, um das Programm auszuführen:

$ scala HelloWorld
Hello, world!

Online-Beispiel »

Basissyntax

Bei der Scala-Basissyntax sollten folgende Punkte beachtet werden:

  • Groß- und Kleinschreibung -  Scala ist groß- und kleinschreibunsabhängig, was bedeutet, dass Hello und hello in Scala unterschiedliche Bedeutungen haben können.

  • Klassename - Der erste Buchstabe eines jeden Klassennamens muss groß sein.
    Wenn ein Name aus mehreren Wörtern besteht, muss der erste Buchstabe jedes Wortes groß sein.

    Beispiel:class MyFirstScalaClass

  • Methodenname - Der erste Buchstabe des Namens aller Methoden muss in Kleinbuchstaben sein.
    Wenn mehrere Wörter verwendet werden, um den Namen der Methode zu bilden, sollte der erste Buchstabe jedes Wortes großgeschrieben werden.

    Beispiel:def myMethodName()

  • Programmdateiname - Der Name der Programmdatei sollte mit dem Namen des Objekts übereinstimmen (dies ist in neueren Versionen nicht mehr erforderlich, aber es wird empfohlen, diese Gewohnheit beizubehalten).
    Beim Speichern der Datei sollte der Name des Objekts verwendet werden (denken Sie daran, Scala ist groß- und kleinschreibbar), und "scala" als Dateierweiterung hinzugefügt werden. (Wenn der Dateiname und der Objektname nicht übereinstimmen, kann das Programm nicht kompiliert werden).

    Beispiel: Angenommen "HelloWorld" ist der Name des Objekts. Dann sollte diese Datei als 'HelloWorld.scala' gespeichert werden.

  • def main(args: Array[String]) - Ein Scala-Programm beginnt mit der main() Methode, dies ist der obligatorische Programm-Eingang jeder Scala-Programm.

Identifikator

Scala verwendet zwei Formen von Symbolen, Zeichen und Symbole.

Zeichensymbole beginnen mit einem Buchstaben oder Unterstrich, gefolgt von Buchstaben oder Ziffern, das Symbol "$" wird in Scala ebenfalls als Buchstabe betrachtet. Allerdings sind Identifikatoren, die mit "$" beginnen, reservierte Symbole, die von der Scala-Compiler erzeugt werden, und sollten in Anwendungen vermieden werden, um Konflikte zu vermeiden.

Die Namensgebung in Scala folgt einer ähnlichen camelCase-Namensgebung wie in Java, der erste Buchstabe ist klein, z.B. toString. Der erste Buchstabe eines Klassennamens ist groß. Außerdem sollte vermieden werden, Symbole mit Unterstrichen am Ende zu verwenden, um Konflikte zu vermeiden. Symbolische Symbole enthalten ein oder mehrere Symbole, wie+,:,? und ähnlichem, z.B.:

+ ++ :::: < ? :::->

Scala verwendet im internen Implementierung verdeckte Symbole, z.B.:->Verwenden Sie $colon$minus$greater, um dieses Symbol darzustellen. Daher, wenn Sie in Java-Code darauf zugreifen müssen:->Methode, Sie müssen den internen Namen $colon$minus$greater von Scala verwenden.

Mischsymbole bestehen aus einem Zeichensymbol gefolgt von einem oder mehreren Symbolen, z.B. unary_+ für Scala.+Der Name im internen Implementierung des Methods. Literale Symbol sind Strings, die mit " definiert werden, z.B. `x` `yield`.

Sie können jeden gültigen Scala-Symbol zwischen "" verwenden, Scala interpretiert sie als Symbol, ein typisches Beispiel ist die Methode Thread.yield(). In Scala können Sie Thread.yield() nicht verwenden, da yield ein Schlüsselwort in Scala ist, Sie müssen Thread.`yield`() verwenden, um diese Methode aufzurufen.

Scala-Schlüsselwörter

Die folgende Tabelle listet die reservierten Schlüsselwörter von Scala auf, die wir nicht als Variablen verwenden können:

abstractcasecatchclass
defdoelseextends
falsefinalfinallyfor
forSomeifimplicitimport
lazymatchnewnull
objectoverridepackageprivate
protectedreturnsealedsuper
thisthrowtraittry
truetypevalvar
whilewithyield 
-:==>
<-<:<%>:
#@

Scala-Kommentare

Scala unterstützt wie Java Einzeiligen und mehrzeilige Kommentare. Mehrzeilige Kommentare können verschachtelt werden, aber sie müssen korrekt verschachtelt sein, eine Kommentarbeginnsymbol entspricht einem Endsymbol. Kommentare werden im Scala-Kompilationsprozess ignoriert, Beispiel:

object HelloWorld {
   /* Dies ist ein Scala-Programm
    * Dies ist ein Zeilenkommentar
    * Hier wird ein mehrzeiliger Kommentar gezeigt
    */
   def main(args: Array[String]) {
      // Gibt "Hello World" aus
      // Dies ist ein Zeilenkommentar
      println("Hello, world!") 
   }
}

Leere Zeilen und Leerzeichen

Wenn eine Zeile nur Leerzeichen oder Kommentare enthält, wird Scala es als leere Zeile betrachten und es ignorieren. Markierungen können durch Leerzeichen oder Kommentare getrennt werden.

Zeilenumbruch

Scala ist eine zeilenorientierte Sprache, Sätze können mit einem Semikolon (;) oder einem Zeilenumbruch beendet werden. In Scala-Programmen ist das Semikolon am Satzende in der Regel optional. Wenn Sie möchten, können Sie eines eingeben, aber wenn in einer Zeile nur Es gibt auch einen Satz, der nicht geschrieben werden muss. Andererseits ist ein Semikolon erforderlich, wenn mehrere Sätze in einer Zeile stehen. Zum Beispiel

val s = "基础教程网"; println(s)

Scala-Paket

Paket definieren

Scala definiert Pakete mit dem Schlüsselwort package, und es gibt zwei Arten, Scala-Code in ein bestimmtes Paket zu definieren:

Das erste Verfahren ist wie Java, das Paket im Kopf der Datei definiert, und alle nachfolgenden Codes werden im gleichen Paket platziert. Zum Beispiel:

package com.w3codebox
class HelloWorld

第二种方法与 C# 有一些相似,如:

package com.w3codebox {
  class HelloWorld 
}

第二种方法,可以在一个文件中定义多个包。

引用

Scala 使用 import 关键字引用包。

import java.awt.Color  // 引入 Color
 
import java.awt._  // 引入包内所有成员
 
def handler(evt: event.ActionEvent) { // java.awt.event.ActionEvent
  ...  // 因为引入了 java.awt,所以可以省去前面的部分
}

import 语句可以出现在任何地方,而不仅仅是文件顶部。import 的效果从开始延伸到语句块的结束。这可以大大减少名称冲突的可能性。

如果想要引入包中的几个成员,可以使用 selector(选择器):

import java.awt.{Color, Font}
 
// 重命名成员
import java.util.{HashMap => JavaHashMap}
 
// 隐藏成员
import java.util.{HashMap => _, _} // 引入了 util 包的所有成员,但是 HashMap 被隐藏了

注意:默认情况下,Scala 总是引入 java.lang._ 、 scala._ 和 Predef._,这也解释了为什么以scala开头的包在使用时都省略了scala.。