Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Scalaとは? わかりやすく解説

Scala

名前 スカラ

Scala

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/01/03 03:37 UTC 版)

Scala
Scalaのロゴ
パラダイム オブジェクト指向言語関数型言語
登場時期 2003年 (2003)
設計者 Martin Odersky
開発者 LAMP/EPFL, Scala Center
最新リリース 3.5.0 / 2024年8月22日[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」に由来するものである。

プラットフォーム

主に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がリリースされ、多くの機能が追加された。[7]

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

特徴

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

  • 開発生産性を高める簡潔な表記が可能である。
  • 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年に移行した[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アプリケーションフレームワークとして以下の物がある。

サポートバージョン

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

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

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

脚注

関連項目

外部リンク


Scala

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/03 01:16 UTC 版)

文字列補間」の記事における「Scala」の解説

Scala 2.10以降には、s, f, raw3つの文字列補間子が実装されている。 f補間子はString.formatを呼び出すための組み込み表現で、書式付き文字列書き直すコンパイラ・マクロである。 val apples = 4//before Scala 2.10printf("I have %d apples\n", apples)println("I have %d apples" format apples)//Scala 2.10+println(s"I have $apples apples")println(f"I have $apples%d apples") 上記コードは以下のように出力するI have 4 apples

※この「Scala」の解説は、「文字列補間」の解説の一部です。
「Scala」を含む「文字列補間」の記事については、「文字列補間」の概要を参照ください。

ウィキペディア小見出し辞書の「Scala」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Scala」の関連用語

Scalaのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Scalaのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
デジタル大辞泉デジタル大辞泉
(C)Shogakukan Inc.
株式会社 小学館
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのScala (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの文字列補間 (改訂履歴)、ユニットテスト・フレームワーク一覧 (改訂履歴)、Option型 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS