LoginSignup
2
0

More than 5 years have passed since last update.

Scalaのdef mainについて仕様を詳しく調べてみた

Last updated at Posted at 2018-11-17

Scalaのエントリポイント(def main)についてよくわからず機械的にコピペしていたので、ふと思い立って仕様を調べてみた。

言語仕様

Top-Level Definitions | Scala 2.12

翻訳

9.5 プログラム

プログラム とは (Array[String])Unit 型の main メンバーメソッドを持つトップレベルオブジェクトである。
プログラムはコマンドシェルから実行可能である。
このプログラムのコマンド引数は main メソッドへ Array[String] 型のパラメータとして渡される。

プログラムのこの main メソッドはオブジェクト内で直接定義することもできるが、継承することもできる。
scalaライブラリが定義する特殊なクラス scala.App のボディは main メソッドと同様に機能する。
このクラスを継承するオブジェクト m は、それ故オブジェクト m の初期化コードを実行するプログラムである。

以下の例は test.HelloWorldモジュール内で main メソッドを定義することにより hello world プログラムを作成している。

package test
object HelloWorld {
  def main(args: Array[String]) { println("Hello World") }
}

このプログラムはこのコマンドで開始できる

scala test.HelloWorld

Java環境では、このコマンドでも動くだろう。

java test.HelloWorld

HelloWorld は App を継承することで main メソッドなしに定義することもできる:

package test
object HelloWorld extends App {
  println("Hello World")
}

わかったこと

  • いつの間にかScalaの言語仕様はすごくアクセスしやすくなっていた
  • 引数の型としてSeq[String]などは依然使えない
  • Appはほとんど使われなくなったよう感じるがまだ仕様としては残っている
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0