[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
scala.Predef
というオブジェクトを知っていますか?知らない人も多いと思います。
でも、実はScalaを使っている人でPredefオブジェクトを使ったことのない人はいないんです。いったいなぜでしょうか。
そういえばprintlnってなんでどこからでも使えるんでしょうかね??
この記事では、そんなScalaの縁の下の力持ちであるPredef
オブジェクトについてご紹介します。
Predef
PredefオブジェクトはScalaプログラムのどこからでも使える
Predefオブジェクトは、Scalaの標準ライブラリの中では極めて特殊なオブジェクトです。
というのも、Predefオブジェクトに定義されたメソッドや変数やクラスは、どんなScalaプログラムからでもアクセス可能になっています。
これによって、使いたいクラスやメソッドをわざわざ明示的にインポートするという手間なく、どこでも自由に使うことができるのです。
コンソール出力をするprintln
/print
標準出力への出力を簡単にするため、Predef
オブジェクトにはprint
やprintln
という便利なメソッドが宣言されています。
def print def println def printf
println
は"Hello! World"をするのに必須ですね。皆さんおなじみです。
println("Hello! World")
Hello! World
これはscala.Console
に実装されている同名のメソッドのエイリアスとなっています。
print
、println
メソッドについてはこちらの記事で詳しく解説しています。
また、この記事を読んでいる方には今更だとは思いますが、よければこの記事も参考にしてください。
よく使われる型
普段Scalaを書くとき、コレクションを扱うことが多いですよね。
Map
、Set
などのコレクションを使いますよね。
これらのクラスをインポートしていないのに使っていませんか?
なぜインポートせずに使えるのかというと、Predef
にこうした型へのエイリアスが定義されているからです。
scala.collection.immutable.Map
scala.collection.immutable.Set
暗黙の型変換
Scalaを便利に使用するための暗黙の型変換が定義されています。
暗黙の型変換についてはこちらの記事にて詳しく説明しています。
Stringの変換
String
をStringOps
やWrappedString
に変換するメソッドが定義されています。
implicit def augmentString(x: String): StringOps implicit def wrapString(s: String): WrappedString
scala.collection.StringOps
scala.collection.immutable.WrappedString
JavaとScalaとの相互変換
Javaのプリミティブラッパー型からScalaのAnyVal系のクラスへと変換するメソッドが用意されています。
implicit def Boolean2boolean implicit def Byte2byte implicit def Character2char implicit def Double2double implicit def Float2float implicit def Integer2int implicit def Long2long implicit def Short2short
逆に、ScalaのAnyVal系のクラスをJavaのプリミティブラッパー型へと変換するメソッドが定義されています。
implicit def boolean2Boolean implicit def byte2Byte implicit def char2Character implicit def double2Double implicit def float2Float implicit def int2Integer implicit def long2Long implicit def short2Short
RichAnyVal
AnyVal系の各クラスをRich***系のクラスへ暗黙的に変換するメソッドが定義されています。
implicit def booleanWrapper implicit def byteWrapper implicit def charWrapper implicit def doubleWrapper implicit def floatWrapper implicit def intWrapper implicit def longWrapper implicit def shortWrapper
Rich***系のクラスのScaladocはこちらです。
scala.runtime.RichBoolean
scala.runtime.RichByte
scala.runtime.RichChar
scala.runtime.RichDouble
scala.runtime.RichFloat
scala.runtime.RichInt
scala.runtime.RichLong
scala.runtime.RichShort
ArrayをArraySeqに変換する
Array[T]
をArraySeq[T]
に変換するメソッドが定義されています。
implicit def genericWrapArray implicit def wrapUnitArray implicit def wrapBooleanArray implicit def wrapByteArray implicit def wrapCharArray implicit def wrapDoubleArray implicit def wrapFloatArray implicit def wrapIntArray implicit def wrapLongArray implicit def wrapRefArray implicit def wrapShortArray
scala.collection.mutable.ArraySeq
ArrayをArrayOpsに変換する
Array[T]
をArrayOps[T]
に変換するメソッドが定義されています。
implicit def genericArrayOps implicit def unitArrayOps implicit def booleanArrayOps implicit def byteArrayOps implicit def charArrayOps implicit def doubleArrayOps implicit def floatArrayOps implicit def intArrayOps implicit def longArrayOps implicit def refArrayOps implicit def shortArrayOps
scala.collection.ArrayOps
CharSequence Conversions
Seq[Char]
やArray[Char]
をCharSequence
に変換するメソッドが定義されています。
implicit final class SeqCharSequence implicit final class ArrayCharSequence
java.lang.CharSequence