S-JIS[2010-12-03/2013-06-08] 変更履歴

Scala Predef

Scalaでは、デフォルトで使える関数がいくつか用意されている。
これらはPredefオブジェクトで定義されており、暗黙にインポートされているのでデフォルトで呼べる。


Predefで定義されている関数

隠れた便利関

単純な関数の定義。[2011-07-03]

関数名 説明
manifest
classManifest
optManifest
暗黙に定義されているManifest(ClassManifest)の実体(オブジェクト)を取得する。 classManifest[Int]
identity 引数の値をそのまま返す。
どちらかというと、関数の引数として利用する目的で存在する?
groupByでの使用例
identity(123)
"abcabb".groupBy(identity)
implicitly 暗黙に定義されている値を返す。  
locally 引数の値をそのまま返す。
ただし@inlineアノテーションが付いているので、インライン化されるかも?
 
??? NotImplementedErrorをスローする。Scala2.10以降。[2013-06-08] def method = ???

エラー・終了・アサーション

値チェック系およびプログラムを終了させる関数。

関数名 説明
error エラー(RuntimeException)を発生させる。
Scala2.9で非推奨になった。sys.errorを使う。[2011-07-03]
error("エラーメッセージ")

sys.error("エラーメッセージ")
exit プログラムを終了する。exit()はexit(0)と同じ。
Scala2.9で非推奨になった。sys.exitを使う。[2011-07-03]
exit()
exit(-1)

sys.exit()
sys.exit(-1)
assert 条件を満たさないとき、例外(AssertionError)を発生させる。
「条件」には、正当な値の範囲を記述する。
assert(n > 0)
assert(n > 0, n)
assert(n > 0, "0より大きい必要がある。n="+n)
assume 条件を満たさないとき、例外(AssertionError)を発生させる。
(条件に関しては、assert()と同じ)
使い道はassert()と異なるらしいが…?
assume(n > 0)
assume(n > 0, n)
assume(n > 0, "0より大きい必要がある。n="+n)
require 条件を満たさないとき、例外(IllegalArgumentException)を発生させる。
「条件」には、正当な値の範囲を記述する。
引数チェックに使用する。
require(n > 0)
require(n > 0, n)
require(n > 0, "0より大きい必要がある。n="+n)
ensuring 条件を満たさないとき、例外(AssertionError)を発生させる。
assert()を使用している)
条件を満たしているとき、値を返す。(右記の例だと、aの値を返す)
a.ensuring(b > 0)
a.ensuring(b > 0, "bが0より大きい必要がある")
a.ensuring(_ > 0)
a.ensuring(_ > 0, "aが0より大きい必要がある")

タプル

タプルを生成する関数。

関数名・型名 説明
Pair 値が2個のタプル。 Pair(1, "one")
Triple 値が3個のタプル。 Triple(1, "one", "いち")
->
値が2個のタプルを生成する。
全角文字の右矢印「→」も関数として定義されている!
1 -> "one"
1 → "one"
ただしnullに対しては直接は使用できない。[2011-03-05]
一旦Null以外の型に代入してからなら使える。
by Pomu0325さん
×null -> 123
val Null:String=null; Null->123
○(null:String)->123

コンソール入出力

画面への表示と画面からの入力を行う関数。
実体はConsoleオブジェクトにあり、デフォルトではjava.lang.Systemの標準入出力(System.out・System.in)が使われる。

関数名 説明
print 画面(標準出力)へ表示する。改行なし。 print("メッセージ")
print(123)
println 画面(標準出力)へ表示する。改行あり。
使用例
println()
println("メッセージ")
println(123)
printf 画面(標準出力)へ表示する。フォーマット指定。
フォーマット文字列(Java)
printf("%04d%n", 123)
format 指定フォーマットで整形された文字列を返す。
Scala2.9で非推奨になった。[2011-07-03]
val s = format("%04d", 123)
ScalaではStringのformatメソッドを呼ぶ のが普通。
あるいは値のformattedメソッドを呼ぶ。[2011-07-03]
フォーマット文字列(Java)
val s = "%04d".format(123)
val s = 123.formatted("%04d")
readLine コンソール(標準入力)から文字列を入力する。 val s = readLine()
val s = readLine("input> ")
readBoolean
readByte
readShort
readChar
readInt
readLong
readFloat
readDouble
コンソール(標準入力)から文字列を入力し、それぞれの型に変換する。 val b = readBoolean()
readf
readf1
readf2
readf3
MessageFormatによるフォーマットを指定し、コンソール(標準入力)から入力する。
readf()はListを返す。各要素は入力を指定フォーマットで解釈した値。
readf1()はreadf()の先頭要素を返す。
readf2()は先頭から2つ、readf3()は先頭から3つをタプルにして返す。
val s = readf("{0}")
val s = readf1("{0}-{1}")
val t = readf2("{0} {1} {2}")
val t = readf3("{0} {1} {2} {3}")

println()の使用例

REPLでちょっとした値を表示したい場合、println()関数は便利に使える。[2010-12-18]

説明
println()
println
改行のみ行う。
Scalaでは引数が無いメソッドを呼び出す際は括弧を省略できるので、「println」のみでも可。
println(123)
println("abc")
println(arg)
値を1つ表示する。
println(1, 2)
println(1, 2, 3)
println("a", 12)
println(a, b, c)
複数の値を表示する。
println(1, 2)」の場合、「(1,2)」と表示される。
実はこれは、タプルが表示されている。
Scalaでは引数が1個のメソッドを呼び出す際は括弧を省略できるので、
println(1, 2)」は、引数がタプル1個で、println()呼び出しの丸括弧が省略されている状態。
つまり、タプルを生成し、それをprintln()に渡している。
println(1, 2)」=「println((1, 2))」=「val t = (1, 2); println(t)」と同じ。

暗黙変換

別の型(クラス)に自動的(暗黙)に変換する関数が定義されている。
例えば以下のようなもの。

暗黙の型変換(implicit conversion)


Scala目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま