Scala
Scala
のロゴ
Screenshot
パラダイム 並行計算関数型プログラミング命令型プログラミングオブジェクト指向プログラミング ウィキデータを編集
登場時期
  • 2004年1月20日 ウィキデータを編集
開発者 マーティン・オーダスキー、スイス連邦工科大学ローザンヌ校 ウィキデータを編集
最新リリース 3.8.4 / 2026年6月5日[1]
型付け 強い静的型付け
主な処理系 Scala
影響を受けた言語 MLJavaErlangHaskellSmalltalkStandard MLOCamlCommon LispEiffelOz、Pizza、Scheme ウィキデータを編集
影響を与えた言語 Java, Chisel, F#, Kotlin, Flix
プラットフォーム Linux, Windows, Mac, JVM, JavaScript, Android
ライセンス Apache-2.0 ウィキデータを編集
ウェブサイト
拡張子 scala、sc ウィキデータを編集
テンプレートを表示

カテゴリ / テンプレート

Scala(スカラ、SKAH-lah[2])はオブジェクト指向言語関数型言語の特徴を統合したマルチパラダイムのプログラミング言語である。名前の「Scala」は英語の「scalable language」に由来するものである。

プラットフォーム

編集

主にJavaプラットフォームJava仮想マシン)上で動作し、既存のJavaのプログラムと容易に連携させることができる。

対応プラットフォーム

また、過去には下記のプラットフォームもサポートしていたが、現在は開発が中断している。

歴史

編集

Scalaは2001年にスイス・ローザンヌにあるスイス連邦工科大学 (EPFL) 教授のマーティン・オーダスキー英語版によって設計された。マーティン・オーダスキーはFunnelという、関数型プログラミングとペトリネットとを合わせたプログラミング言語の開発に携わっていた。オーダスキーは過去にJavaの総称型(ジェネリクス)とjavacの開発に携わった事があった。

Scalaは2003年の暮れに内部で公開された後、2004年の始めにJavaのプラットフォームにリリースされ、2004年の6月に.NETのプラットフォームに公開された。Ver2.0は2006年3月にリリースされたが、.NETのサポートは2012年に中止になった。

2021年5月12日、コードネームdottyと呼ばれていたコンパイラを抜本的に再設計して作られたScala 3がリリースされ、多くの機能が追加された。[6]

また、現在も活発に開発が続けられている。

特徴

編集

主に以下のような特徴がある。

  • 開発生産性を高める簡潔な表記が可能である。
  • Javaの豊富なライブラリが使える(Scala.jsの場合、JavaScriptのライブラリが使える)。
  • 全てがオブジェクトとして扱われるオブジェクト指向言語である。
  • 静的型付けを行う関数型言語である。静的型付けのため、コンパイル時点でのエラー(特に型関連の)検出が得意である。
  • 型(クラス)をJavaなどと比べてより容易に作ることができ、また、型を使った条件分岐をはじめとして、型に関する機能が豊富なため、メソッドやフィールドを束ねるだけのクラスではなく、型に積極的な意味を持たせてのプログラミングが可能である。
  • 型推論をサポートし、多くの場面で型を自動的に補ってくれる。
  • 純粋関数型言語的な、val(定数)と不変List, Set, Mapという組み合わせでもプログラミングできるし、より手続き型的なvar(変数)と可変List, Set, Mapという組み合わせでもプログラミングができる。
  • 関数もオブジェクトとして利用可能であり、カリー化が可能。
  • パターンマッチを利用可能であり、任意のクラスをグループ化してパターンマッチで判定させることが可能(caseクラス)。
  • implicit def と言う宣言を用いて、既存のクラスを拡張したような記述が可能。
  • traitクラスを用いた、Mix-in機能を持つ。
  • クロージャをサポートする。
  • XMLを直接プログラム内部に記述可能。
  • 遅延評価のある関数型言語であるため、無限リストを扱え、標準ライブラリにそのためのクラスが提供されている。
  • 構文解析のための、パーサーコンビネータ英語版が2.12まで標準ライブラリに入っていた。2.13以降は外部ライブラリとなった。

Scala 3の新機能

編集
  • Pythonと同様のインデント構文をサポート
  • 代数的データ型の新しい標準をつくるために再設計されたEnumerations
  • Opaque Types. Boxingのオーバーヘッドを起こすことなく抽象化できる新たな値型
  • Intersection and union types. [A & B] や [A | B] と表現可能
  • Implicitsの文法変更
  • Dependent function types.
  • Polymorphic function types.
  • Type lambdas.
  • Match types.
  • Trait は class のように引数をとれるようになった。
  • open classesの概念を導入
  • traitsに transparent とマークすることで継承をユーザーに公開しない
  • Composition over inheritance. imports と対称的に、 export clauses はオブジェクトの特定のメンバーへアクセスするためのエイリアスを定義する
  • No more NPEs.
  • メタプログラミングも大幅に強化された

編集

「文字列の中に'a'という文字が存在するか判定する」という例を挙げる。

手続き型言語的なコードを書くと以下のようになる。

def hasLowerCaseA(s: String): Boolean = {
  for (i <- 0 until s.length) {
    if (s(i) == 'a') return true
  }
  return false
}

上のコードは、添え字を使わずに、次のように書くことができる。

def hasLowerCaseA(s: String): Boolean = {
  for (c <- s) {
    if (c == 'a') return true
  }
  return false
}

上のコードは、トレイトscala.collection.Traversableを使って、次のように書くことができる。

def hasLowerCaseA(s: String) = s.exists(_ == 'a')

典型的な関数型言語では再帰をよく使う。再帰に置き換えると以下のようになる。

def hasLowerCaseA(s: String, i: Int = 0): Boolean = {
  if (i == s.length) return false
  if (s(i) == 'a') return true
  return hasLowerCaseA(s, i + 1)
}

部分関数

編集

Scalaの部分関数 (partial function) は数学における同名の概念をもとにして生まれた機能である。具体的には、定義域が制限された関数に相当する。以下は [-1, +1] の範囲で2乗を計算する部分関数の例である。

val myPartialSquare: PartialFunction[Double, Double] = {
  case x if -1 <= x && x <= 1 => x * x
}

println(myPartialSquare(-0.5)) // 0.25
println(myPartialSquare(0.9)) // 0.81
println(myPartialSquare.isDefinedAt(1)) // true
println(myPartialSquare.isDefinedAt(-10)) // false
println(myPartialSquare(1.1)) // MatchError

Scala開発の動機

編集

Martin Oderskyによると、Scala開発の動機は2つの仮説による。

  1. 汎用言語はスケーラブルでなくてはならない。同じ概念で、小さいプログラムも大きなプログラムも記述できるべきである。
  2. スケーラビリティ関数型言語オブジェクト指向言語の2つのプログラミングの概念を統合し、一般化することにより実現できる。

利用例

編集

TwitterがバックエンドをRubyからScalaに2009年に移行した[7]のを初め、大型のソフトウェアでの利用例がいくつか存在する。

統合開発環境

編集

以下の統合開発環境が Scala をサポートしている。括弧内の数字は 2019 Scala Developer Survey での複数回答ありでの利用している人の割合[11]

Scala をベースにしたプログラミング環境として Kojo がある。

ビルドツール

編集

Apache MavenGradle などの Java 汎用のビルドツールも利用可能だが、Scala 向けのビルドツールとして以下の物がある。括弧内の数字は 2019 Scala Developer Survey での複数回答ありでの利用している人の割合[11]

  • sbt (93.6%)
  • Mill (4.1%)

Webアプリケーションフレームワーク

編集

Scala 用の主なWebアプリケーションフレームワークとして以下の物がある。

サポートバージョン

編集

以下の4種がサポートされている。[12]

  1. Scala Next: Scala 3の通常版。
  2. Scala LTS: Scala 3の長期サポート版。2年以上の間隔でリリースされ、次の長期サポート版がリリースされても1年間は保守される。Scala 3のライブラリ作者はこのバージョンを相手にビルドすることが推奨されている。過去にリリースされたのは2023年5月30日にリリースされたScala 3.3[13]
  3. Scala 2.13: サポート終了予定なし。Scala 2.13のリリース日は2019年6月11日[14]
  4. Scala 2.12: sbt 1が利用していて、sbt 1が使い続ける限りサポート終了予定なし。Scala 2.12のリリース日は2016年11月3日[15]

Scala 2.11以前のサポートは終了している。Scala 4のリリース予定はない。

脚注

編集
  1. ^ 題名: Release 3.8.4, 出典URL: https://github.com/scala/scala3/releases/tag/3.8.4, 閲覧日: 2026年6月6日, 出版日: 2026年6月5日
  2. ^ Scala: Martin Odersky, Scala -- the Simple Parts
  3. ^ Scala.js
  4. ^ Scala Native — Scala Native documentation
  5. ^ A Brief History of Scala
  6. ^ [1]
  7. ^ The Secret Behind Twitter's Growth
  8. ^ Scala, Lift, and the Future
  9. ^ Announces General Availability of SynapseML
  10. ^ Woof, a pure Scala 3 logging library
  11. ^ a b 2019 Scala Developer Survey
  12. ^ Scala development guarantees”. scala-lang.org. 2025年1月3日閲覧。
  13. ^ Scala 3.3.0 released!”. scala-lang.org. 2025年1月3日閲覧。
  14. ^ Scala 2.13.0”. scala-lang.org. 2025年1月3日閲覧。
  15. ^ Scala 2.12.0”. scala-lang.org. 2025年1月3日閲覧。

関連項目

編集

外部リンク

編集

📚 Artikel Terkait di Wikipedia

機能モデル

model)で創られる。 機能分割 (Functional decomposition)[訳語疑問点]は、オリジナル機能が、機能構成 (function composition)[訳語疑問点]によるそれらの部品から再構築され得る方法のような、構成要素部品に機能的 (functional)[訳語疑問点]関係

アメリカ合衆国国防総省

2017年5月25日時点のオリジナルよりアーカイブ。2012年5月3日閲覧。 ^ [1] 10 USC 151. Joint Chiefs of Staff: composition; functions ^ Polmar, Norman (2005). “Defense organization”. The Naval

写像の合成

数学において写像あるいは函数の合成(ごうせい、英: composition)とは、ある写像を施した結果に再び別の写像を施すことである。 たとえば、時刻 t における飛行機の高度を h(t) とし、高度 x における酸素濃度を c(x) で表せば、この二つの函数の合成函数 (c ∘ h)(t) = c(h(t))

チュクチ族

Statistic Service ^ State statistics committee of Ukraine – National composition of population, 2001 census. Ukrainian Federal State Statistic Service

原始再帰関数

Function): n ≥ 1 の任意の n について、1 ≤ i ≤ n であるような各 i についての n 項射影関数 Pin(i 番目の引数を返す関数)は原始再帰的である。 より複雑な原始再帰関数は、以下の公理で与えられる作用素を適用することで得られる: 合成 (Composition) :

コール賞

1951をはじめとする諸論文に対して) 第6回 (1960年) - サージ・ラング ("Unramified class field theory over function fields in several variables", Annals of Mathematics, Ser. 2, Vol. 64,

ミルトン・バビット

(1965). "The Structure and Function of Musical Theory," College Music Symposium 5. (1972). "Contemporary Music Composition and Music Theory as Contemporary

ホスファチジルセリン

(2008). Food Composition and Nutrition Tables. Medpharm Scientific Publishers Stuttgart  ^ C.R. Scholfield (October 1981). “Composition of Soybean Lecithin”