Scalaの基本構文


以前 Java プログラマーであり、Java 言語の基本を知っている場合は、Scala の基本構文をすぐに学ぶことができます。

Scala と Java の最大の違いは、Scala ステートメントの最後のセミコロン ; がオプションであることです。

Scala プログラムは、互いのメソッドを呼び出してメッセージ パッシングを実装するオブジェクトのコレクションとして考えることができます。次に、クラス、オブジェクト、メソッド、インスタンス変数の概念を理解しましょう:

  • オブジェクト - オブジェクトには属性と動作があります。たとえば、犬の属性には色、名前が含まれ、行動には吠える、走る、食べるなどがあります。オブジェクトはクラスのインスタンスです。

  • クラス - クラスはオブジェクトの抽象化であり、オブジェクトはクラスの具体的なインスタンスです。

  • メソッド - メソッドは、クラスに複数のメソッドを含めることができます。

  • フィールド - すべてのオブジェクトには、フィールドであるインスタンス変数の一意のセットがあります。オブジェクトのプロパティは、フィールドに値を割り当てることによって作成されます。


最初の Scala プログラム

インタラクティブ プログラミング

インタラクティブ プログラミングはスクリプト ファイルの作成を必要としません。スクリプト ファイルは次のコマンドで呼び出すことができます:

$ 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>


スクリプト フォーム

HelloWorld も作成できます.scala ファイルを使用してコードを実行します。HelloWorld.scala コードは次のとおりです:

object HelloWorld {
   /* 这是我的第一个 Scala 程序
    * 以下程序将输出'Hello World!' 
    */
   def main(args: Array[String]) {
      println("Hello, world!") // 输出 Hello World
   }
}

次に、scalac コマンドを使用してコンパイルします:

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

コンパイル後、HelloWorld.class ファイルがディレクトリに生成されることがわかります。これは Java 仮想マシン (JVM) で使用できます。

コンパイル後、次のコマンドを使用してプログラムを実行できます:

$ scala HelloWorld
Hello, world!

オンライン例»
基本構文

Scalaの基本構文は次の点に注意する必要があります:

  • 大文字と小文字を区別する - Scala は大文字と小文字を区別します。これは、識別子 Hello と Hello が Scala では異なる意味を持つことを意味します。

  • クラス名 - すべてのクラス名の最初の文字を大文字にします。
    クラス名を形成するために複数の単語を使用する必要がある場合は、各単語の最初の文字を大文字にします。

    例:
    class MyFirstScalaClass

  • メソッド名 - すべてのメソッド名の最初の文字は小文字です。
    メソッドの名前を形成するために複数の単語が使用される場合は、各単語の最初の文字を大文字にする必要があります。

    例:
    def myMethodName()

  • プログラム ファイル名 - プログラム ファイルの名前はオブジェクト名と正確に一致する必要があります。
    ファイルを保存するときは、オブジェクト名を使用して保存し (Scala では大文字と小文字が区別されることに注意してください)、ファイル拡張子として「.scala」を追加する必要があります。 (ファイル名とオブジェクト名が一致しない場合、プログラムはコンパイルされません)。

    例: オブジェクトの名前が「HelloWorld」であると仮定します。次に、ファイルは「HelloWorld.scala」として保存されるはずです

  • def main(args: Array[String]) - Scala プログラムは、すべての Scala プログラムの必須のプログラム エントリ部分である main() メソッドから処理を開始します。


識別子

Scala では、英数字と記号の 2 つの形式の識別子を使用できます。

文字番号は文字またはアンダースコアで始まり、記号「$」も Scala では文字とみなされます。ただし、「$」で始まる識別子は、Scala コンパイラーによって生成される識別子とともに使用するために予約されており、アプリケーションは競合を避けるために「$」で始まる識別子の使用を避ける必要があります。

Scala の命名規則は、Java と同様の Camel 命名規則を採用しており、toString のように最初の文字が小文字になります。クラス名の最初の文字は大文字のままです。また、競合を避けるために、アンダースコアで終わる識別子の使用も避けてください。シンボル識別子には、次のような +、:、? などの 1 つ以上の記号が含まれます。

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

Scala は、次のようなエスケープされた識別子を使用します。 -> これを表すには $colon$minus$greater を使用します。シンボル。したがって、Java コードで :-> メソッドにアクセスする必要がある場合は、Scala の内部名 $colon$minus$greater を使用する必要があります。

混合識別子は、Scala の + メソッドの内部実装の名前である unary_+ など、英数字の識別子の後に 1 つ以上の記号が続いたもので構成されます。リテラル識別子は、「x」「yield」など、「」を使用して定義された文字列です。

「」の間には任意の有効な Scala 識別子を使用できます。Scala はそれらを Scala 識別子として解釈します。これは、Thread の yield メソッドです。 yield は Scala のキーワードであるため、Scala では Thread.yield() を使用できません。このメソッドを使用するには Thread.`yield`() を使用する必要があります。


Scala キーワード

次の表は、scala の予約キーワードをリストしています。次のキーワードを変数として使用することはできません:

la zymatchnewnullオブジェクトオーバーライドパッケージプライベート保護リターンシールドスーパーこのスロー特性 trytru​​etypeval varwhilewithyield-:==>< #

Scala コメント

Scala は Java に似ており、単一行および複数行のコメントをサポートしています。複数行のコメントはネストできますが、1 つのコメント開始記号が 1 つの終了記号に対応するように正しくネストする必要があります。 Scala のコンパイルではコメントは無視されます。例は次のとおりです。

object HelloWorld {
   /* 这是一个 Scala 程序
    * 这是一行注释
    * 这里演示了多行注释
    */
   def main(args: Array[String]) {
      // 输出 Hello World
      // 这是一个单行注释
      println("Hello, world!") 
   }
}

空白行とスペース

行にスペースまたはコメントのみがある場合、Scala はそれを空白行とみなして無視します。タグはスペースまたはコメントで区切ることができます。


改行

Scala は行指向の言語であり、ステートメントはセミコロン (;) または改行文字で終了できます。 Scala プログラムでは、ステートメントの最後のセミコロンは通常はオプションです。必要に応じて入力できますが、1 つしかない場合は、 一文も書く必要はありません。一方、1 行に複数のステートメントを記述する場合は、セミコロンが必要です。たとえば、

val s = "php中文网"; println(s)

Scala package

Define package

Scala では、package キーワードを使用してパッケージを定義します。 Scala でパッケージにコードを定義するには、次の 2 つの方法があります。

最初の方法は Java と同じです。ファイルの先頭 パッケージ名を定義します。このメソッドでは、後続のすべてのコードがパッケージ内に配置されます。 例:

package com.php
class HelloWorld

2 番目のメソッドは、次のような C# に似ています。

package com.php {
  class HelloWorld 
}

2 番目のメソッドは、1 つのファイルで複数のパッケージを定義できます。

参照

Scala は、パッケージを参照するために import キーワードを使用します。

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

Import ステートメントは、ファイルの先頭だけでなく、どこにでも記述できます。インポートの効果は、ステートメント ブロックの最初から最後まで広がります。これにより、名前の競合の可能性が大幅に減少します。

パッケージ内に複数のメンバーを導入したい場合は、セレクターを使用できます:

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

注: デフォルトでは、Scala は常に java.lang._、scala._ および Predef._ をインポートしますが、これもインポートできます。 scala で始まるパッケージを使用するときに scala が省略される理由を説明します。

abstractcasecatchclass
def するそれ以外拡張
falsefinalやっとfor
forSomeif暗黙的インポート
<:<% > ;:
@