Hello world in Scala
どんな事もまずは世界に挨拶することから始まる。
Scala で 雑に Hello World を書くとこうなる。
object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, Scala world!") } }
基本的にScala は Java class コードに変換されるので、JVM の制約を多少なりとも受ける。例えば、main(args: Array[String]) 型のメソッドを持つクラスをエントリーポイントに持つ等。
型定義は後置。Swift やgo も後置なので違和感はない。
Unit 型 というのは副作用のみを扱う関数(メソッド??)に付けられる型。このへんはまだ良くわかってないのでわかってきたタイミングで書く。
println, Array, String, Unit はどこで定義されて来ているのか?
Scalaパッケージメモ(Hishidama's Scala package/import Memo) によると、
名前 | 用途 | 備考 |
---|---|---|
scala._ | Scalaの基本クラス | |
scala.Predef._ | 暗黙に使用できる関数が定義されているシングルトンオブジェクト | Javaのstaticインポートに相当する方式でインポートされる。Predefに定義されているメソッドを関数として(オブジェクト名の指定なしで)使えるようになる。 |
java.lang._ | Javaの基本クラス |
が、自動的に(暗黙的に)import されていて、利用できる。
Scala の Standard Library によると、scala.Predef は
package scala object Predef { // classOf --------------------------------------------------------- /** Returns the runtime representation of a class type. */ def classOf[T]: Class[T] = null // this is a dummy, classOf is handled by compiler. // Standard type aliases --------------------------------------------- type String = java.lang.String type Class[T] = java.lang.Class[T] // 中略 def println() = Console.println() def println(x: Any) = Console.println(x)
みたいな感じで記述されている。
$ scala helloworld.scala
で実行できる。スクリプト言語みたいな動作をする(多分実際には内部的にclass ファイルを作っているとは思うが)
クラスコードに変換して実行するには
# scalac helloworld.scala ではなく scala.helloworld.scala になってたのを修正しました scalac helloworld.scala scala HelloWorld