scalaには一部メソッドだけでどのクラスからも呼び出せるメソッドがあります。
サンプルコード
■PredefMain.scala
package jp.gr.kmtn.scalatutorial.grammertips
/**
* Predef用メインクラス
*
* @author Fukushi-
*/
object PredefMain {
/**
* Predefテスト用プログラムエントリポイント
*/
def main(args: Array[String]): Unit =
{
// requireメソッド確認
// trueの場合何もしない
require(true);
// falseの場合java.lang.IllegalArgumentException発生
try {
require(false);
} catch { case ex: IllegalArgumentException => ex.printStackTrace() }
// printlnメソッドを実行すると自動的にConsole.printlnメソッドにマッピング
println("PredefMain");
}
}
実行結果
java.lang.IllegalArgumentException: requirement failed
at scala.Predef$.require(Predef.scala:145)
at jp.gr.kmtn.scalatutorial.grammertips.PredefMain$.main(PredefMain.scala:21)
at jp.gr.kmtn.scalatutorial.grammertips.PredefMain.main(PredefMain.scala)
PredefMain
解説
サンプル中で、require(boolean)というメソッドを呼び出していますが、このメソッドはscalaであればどんなソースからもメソッド呼び出しのみで使用できるメソッドです。
与えた引数によって例外を発生させることが出来ます。
コンストラクタでの初期化で不正な値を弾く際などに使えますね。
で、上記のメソッド群は「scala.Predef」というobjectで定義されています。
実はprintlnメソッドが自動的にConsole.printlnメソッドにマッピングされるのも
Predefobjectの動作によるものでした。
他にもJavaでいうプリミティブ型の変換処理、文字列変換、コンソールからの入出力などが揃っています。
さすがに前回のリッチラッパーとは違い、Predefを使用して好きな機能を追加。。。
とは行かないでしょうが、無駄なメソッドを作らずに済む点では使いやすいかと。
0 コメント:
コメントを投稿