コンテンツにスキップ

Scala

出典: フリー百科事典『ウィキペディア(Wikipedia)』
Scala
Scala
Scalaのロゴ
パラダイム オブジェクト指向言語関数型言語
登場時期 2003年 (2003)
設計者 Martin Odersky
開発者 LAMP/EPFL, Scala Center
最新リリース 3.4.0 / 2024年2月29日[1]
型付け 強い静的型付け
主な処理系 Scala
影響を受けた言語 Java, Haskell, Standard ML, OCaml, Smalltalk, Erlang
影響を与えた言語 Java, Chisel, F#, Kotlin, Flix
プラットフォーム Linux, Windows, Mac, JVM, JavaScript, Android
ライセンス Apache 2.0[2]
ウェブサイト The Scala Programming Language
拡張子 .scala
テンプレートを表示

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

プラットフォーム

[編集]

JavaJavaJava



Scala - Java

Scala.js[4] - Scala  JavaScript 

Scala Native[5] - LLVM 使


歴史

[編集]

Scala2001 (EPFL) FunnelJavajavac

Scala20032004Java20046.NETVer2.020063.NET2012

2021512dottyScala 3[7]


特徴

[編集]





Java使Scala.jsJavaScript使





Java使



valList, Set, MapvarList, Set, Map



case

implicit def 

traitMix-in



XML



2.122.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 OderskyScala2

(一)

(二)2

利用例

[編集]

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

統合開発環境

[編集]

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

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

ビルドツール

[編集]

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

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

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

[編集]

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

脚注

[編集]

関連項目

[編集]

外部リンク

[編集]