HelloWorld改造版(別クラス参照)
今まで生半可理解だったから色々身にしみる。。。というのはさておき。
HelloWorldを改造して、下記のソースを作成しました。
■HelloWhile.scala
class HelloWhile {
def hello(hellos: String*) = {
val upper = hellos.map((s:String) => s.toUpperCase())
Console.println(upper)
upper.foreach(Console.println(_))
}
}
■HelloWorld.scala
object HelloWorld {
def main(args: Array[String]) {
val helloWhile = new HelloWhile
helloWhile.hello("hello", "hellohello", "hellohellohello")
}
}
そんでもって、下記のようにコンパイルして実行します。
C:\work>scalac HelloWhile.scala
C:\work>scalac -cp . HelloWorld.scala
C:\work>scala -cp . HelloWorld
ArrayBuffer(HELLO, HELLOHELLO, HELLOHELLOHELLO)
HELLO
HELLOHELLO
HELLOHELLOHELLO
C:\work>
これでHelloWorldですが、別クラスを参照するHelloWorldの完成。
Javaを知っていると大体分かるんですが、微妙に違う個所も多くあります。
まず、目につくのがクラス宣言の「class HelloWhile」と「object HelloWorld」。
classが通常のクラス定義で、objectがシングルトン定義を表します。
なので、scalaのプログラムを起動する場合はシングルトン定義の中に
mainメソッドを定義して呼び出せばそこから処理がスタートするわけですね。
後は。。。「def hello(hellos: String*) = {...」の個所でしょうか。
さすが関数型言語なだけあって、メソッド自体もイコールでつないで定義しています。
加えて、「Console.println(upper)」→「ArrayBuffer(HELLO, HELLOHELLO, HELLOHELLOHELLO)」
となるように、単にプリントを行った際に型が出力されるのがJavaとは違う所。
他にも何か色々ありますが、ここまで。とりあえずはひたすら書いてみます。。。