スカラのチュートリアル

リーディング(12975) 更新時間(2022-04-19)

Scala チュートリアル Scala は、オブジェクト指向プログラミングと関数型プログラミングのさまざまな機能を統合するように設計されたマルチパラダイム プログラミング言語です。


Scala はマルチパラダイム プログラミング言語であり、Java に似たプログラミング言語であり、スケーラブルな言語を実装し、オブジェクト指向プログラミングと関数型プログラミングのさまざまな機能を統合するように設計されています。

最初の Scala プログラム

以下は、Scala で書かれた典型的な Hello World プログラムです:

Example

 object HelloWorld extends App {
   println("Hello, world!")
 }

インスタンスの実行>>

[インスタンスの実行] ボタンをクリックしてオンライン インスタンスを表示します

または

#インスタンス

object HelloWorld {
   def main(args: Array[String]) {
     println("Hello, world!")
   }
 }

インスタンスの実行>>「インスタンスの実行」ボタンをクリックしてオンライン インスタンスを表示します

これが Java の Hello World アプリケーションとどのように似ているかに注意してください。大きな違いの 1 つは、Scala バージョンの Hello World プログラムでは、static キーワードを使用して main メソッドを静的メソッドとしてマークせず、object キーワードを使用してシングルトンを作成することです。

プログラムが HelloWorld.scala ファイルとして保存されているとすると、次のコマンド ラインでコンパイルできます:

> scalac HelloWorld.scala

実行方法:

> scala -classpath . HelloWorld

これはJava のコンパイルと実行と同じです。「Hello World」プログラムは非常によく似ていませんか?実際、Scala のコンパイルおよび実行モデルは Java と同等であるため、Ant などの Java のビルド ツールとも互換性があります。

オプション -i を使用して、Scala インタープリターを使用してプログラムを直接実行することもできます。 (ファイルからコードをロード) およびオプション -e (追加のコードを実行するには、HelloWorld オブジェクトのメソッドを実際に実行する必要があります):

> scala -i HelloWorld.scala -e 'HelloWorld.main(null)'

ヒント: Our Scala チュートリアルScala を初心者から上級レベルまで学習するのに役立ちます。ご質問がある場合は、PHP 中国語 Web サイト Scala Community にアクセスして質問してください。熱心なネチズンが答えてくれます。

Scala の機能

サポートされるプログラミング パラダイム

  • オブジェクト指向の機能

Scala はすべての値がオブジェクトである純粋なオブジェクト指向言語。オブジェクトのデータ型と動作は、クラスと特性によって記述されます。クラス抽象化メカニズムを拡張するには 2 つの方法があります。 1 つのアプローチはサブクラスの継承であり、もう 1 つのアプローチは柔軟なミックスイン メカニズムです。これら 2 つのアプローチにより、多重継承の問題を回避できます。

  • 関数型プログラミング

Scala は関数型言語でもあり、その関数は値として使用することもできます。 Scala は、匿名関数を定義するための軽量の構文を提供し、高階関数をサポートし、複数レベルの関数のネストを許可し、カリー化をサポートします。 Scala の case クラスとその組み込みパターン マッチングは、関数型プログラミング言語で一般的に使用される代数型と同等です。

さらに、プログラマは Scala のパターン マッチングを使用して、正規表現に似たコードを記述して XML データを処理できます。このような状況では、形式的なクエリを作成するためにリスト内包機能が役立ちます。

JVM は末尾再帰をサポートしていないため、Scala は末尾再帰の最適化を完全にはサポートできません。ただし、Scala コンパイラーは、いくつかの単純な末尾再帰をループに最適化できます。

次のコードは、関数型スタイルでクイック ソート アルゴリズムを実装しています。Erlang のクイック ソートの例と比較できます。

def qsort(list: List[Int]): List[Int] = list match {
  case Nil => Nil
  case pivot :: tail =>
    val(smaller, rest) = tail.partition(_ < pivot)
    qsort(smaller) ::: pivot :: qsort(rest)
}

静的型

Scala には型システムがあります。 、コンパイル時間チェックを通じて、コードのセキュリティと一貫性を確保します。型システムは特に次の機能をサポートします:

  • 汎用カテゴリ、

  • 共分散と反分散、

  • マーク、

  • 型パラメーターの上限および下限制約、

  • カテゴリと抽象型をオブジェクト メンバーとして扱う、

  • 複合型、

  • 自分自身を参照するときに型を明示的に指定、

  • View、

  • 多態性メソッド。

拡張性

Scala は、実際にはドメイン固有のアプリケーション開発ではそのドメイン固有の言語拡張が必要になることが多いという事実に準拠するように設計されています。 Scala は、ライブラリの形式で新しい言語構造を簡単かつシームレスに追加できる独自の言語メカニズムを多数提供しています。

  • 任意のメソッドを前置演算子または後置演算子として使用できます。

  • クロージャは、予想されるタイプに基づいて自動的に構築できます。

上記 2 つの機能を組み合わせて使用​​すると、構文を拡張したり、マクロなどのメタプログラミング機能を使用したりせずに、新しいステートメントを定義できます。

同時実行

Scala は、同時実行モデルとして Actor を使用します。Actor は、メールボックスを介してメッセージを送受信するスレッドのようなエンティティです。アクターはスレッドを再利用できるため、プログラムでは数百万のアクターを使用できますが、スレッドは数千のアクターしか作成できません。 2.10 以降のバージョンでは、Akka がデフォルトのアクタ実装として使用されます。 [20] 次のコードは、Actor モードを使用した EchoServer 実装です。

val echoServer = actor(new Act {
  become {
    case msg => println("echo " + msg)
  }
})
echoServer ! "hi"

Actor モードは、同時プログラミングを簡素化し、マルチコア CPU の機能を活用できます。

この Scala チュートリアル マニュアルの内容

この Scala チュートリアルでは、基本的な Scala 構文、Scala データ型、Scala 変数、Scala 演算子、Scala 関数、はじめになど、Scala の基本および高度な知識をすべてカバーしています。 Scala 文字列、Scala クラスとオブジェクトなど、Scala のすべての基本的および高度な知識。

ヒント: このチュートリアルの各章には、多くの Scala のサンプルが含まれています。[サンプルの実行] ボタンを直接クリックすると、結果をオンラインで表示できます。これらの例は、Scala をよりよく理解し、使用するのに役立ちます。