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

Scala の基本的な语法

もしあなたが以前にJavaプログラマーでJava言語の基本を知っていれば、Scalaの基本的な文法をすぐに学ぶことができます。

ScalaとJavaの最大の違いは、Scalaの文の末尾のセミコロン(;)が任意であることです。

Scalaプログラムはオブジェクトの集合であり、メソッドを呼び出し合ってメッセージ伝達を実現することができます。次に、クラス、オブジェクト、メソッド、例変数の概念について説明します:

  • オブジェクト - オブジェクトには属性と行動があります。例えば、犬の状態属性には色、名前があり、行動には鳴く、走る、食べるなどがあります。オブジェクトはクラスの例です。

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

  • メソッド - メソッドは基本的な行動を記述するためのものです。クラスには複数のメソッドを含むことができます。

  • フィールド - 各オブジェクトにはユニークな例の変数集合、すなわちフィールドがあります。オブジェクトの属性はフィールドに値を割り当てることで作成されます。

最初のScalaプログラム

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

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

$ scala
Scalaバージョンへようこそ 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_31).
式を入力して評価します。
詳細情報は、helpを参照してください。
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 Virtual Machine (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 プログラムは main() メソッドから処理を開始します。これはすべての Scala プログラムの強制プログラムエントリ部分です。

識別子

Scala は文字数字トークンとシンボルの2種類のトークンを使用できます。

文字数字トークンは、アルファベットまたはアンダースコアで始まり、アルファベットまたは数字で続くことができます。シンボル「$」は Scala ではアルファベットとしても見なされます。しかし、「$」で始まる識別子は Scala コンパイラが生成する予約された識別子として使用されるため、アプリケーションでは「$」で始まる識別子を使用することを避けるべきです。

Scala のネーミングルールは、Java と似た camel ネーミングルールを使用しており、最初の文字は小文字です。例えば toString などです。クラス名の最初の文字は大文字を使用します。また、以下線で終わるトークンは避けるべきであり、シンボルトークンは1つ以上のシンボルを含みます。例えば+、:、? など、例えば:

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

Scala の内部実装では、エスケープされたトークンを使用します。例えば:-シンボル $colon$minus$greater を使用して表現します。したがって、Java コードでアクセスする場合:-メソッドを使用する場合、Scala の内部名 $colon$minus$greater を使用する必要があります。

混成トークンは、文字数字トークンに後続する1つ以上のシンボルで構成されます。例えば unary_ などです。+ Scala に対して+メソッドの内部実装時の名前です。リテラルトークンは「」で定義された文字列です。例えば `x` `yield` などです。

「」の間でどのような有効な Scala トークンでも使用できます。Scala はそれらを Scala トークンとして解釈します。典型的な使用例は Thread の yield メソッドです。Scala では Thread.yield() を使用することはできません。なぜなら yield は Scala のキーワードだからです。そのメソッドを使用するには Thread.`yield`() を使用する必要があります。

Scala キーワード

以下に Scala の予約語を挙げます。以下のキーワードは変数として使用できません:

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

Scala コメント

Scala は Java と同様に、単一行および複数行コメントをサポートしています。複数行コメントはネスト可能ですが、正しくネストする必要があります。コメントは Scala コンパイルでは無視されます。以下に例を示します:

object HelloWorld {
   /* これは Scala プログラムです
    * これは一行コメントです
    * ここでは複数行コメントを示しています
    */
   def main(args: Array[String]) {
      // Hello Worldを出力します
      // これは単一行コメントです
      println("Hello, world!") 
   }
}

空行と空格

一行に空格のみまたはコメントが含まれている場合、Scala はそれを空行と認識し、無視します。マークは空格またはコメントで区切ることができます。

改行符

Scala は行指向の言語であり、文はセミコロン(;)で終了したり、改行符で終了できます。Scala プログラムでは、文の末尾のセミコロンは通常オプションです。入力したい場合は入力できますが、一行にただ ある文は書かなくても構いません。また、一行に複数の文を書く場合、セミコロン(;)が必要です。例えば

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

Scala パッケージ

パッケージの定義

Scala では package キーワードを使用してパッケージを定義し、Scala ではコードを特定のパッケージに定義する方法が二種類あります:

第一种方法和 Java と同様、ファイルの先頭でパッケージ名を定義します。この方法では、そのパッケージ内にすべてのコードが配置されます。例えば:

package com.w3codebox
class HelloWorld

第2種方法は C#に似ています:

package com.w3codebox {
  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 の効果は、開始から文のブロックの終わりまでにわたります。これにより、名前の衝突の可能性が大幅に減少します。

パッケージの一部のメンバーをインポートするには、selector(選択子)を使用できます:

import java.awt.{Color, Font}
 
// メンバーのリネーム
import java.util.{HashMap => JavaHashMap}
 
// 隠されたメンバー
import java.util.{HashMap => _, _} // util パッケージのすべてのメンバーがインポートされていますが、HashMap が隠されています

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