hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

Scala入門しました

今日,明日とはてなの京都オフィスでScala Hackathonが開催されていて,参加しました.
Scalaは全く触ったことがなかったのですが,インストールから始めて,チュートリアルを読んだりして,Fizz Buzzを出すところまでできました.

インストール

Macならportで入る

% sudo port install scala

Hello, World(1)

scalaで対話的に実行できる

% scala
Welcome to Scala version 2.7.3.final (Java HotSpot(TM) Client VM, Java 1.5.0_16).
Type in expressions to have them evaluated.
Type :help for more information.

scala> println("Hello, World!")
Hello, World!

Hello, World(2)

ファイルから実行

println("Hello, World!")

これをhello.scalaとして保存して,

% scala hello.scala
Hello, World!

Hello, World(3)

オブジェクトを定義してコンパイルして実行

object Hello {
  def main(args: Array[String]) {
    println("Hello, World!")
  }
}

これをHello.scalaとして保存して,

% scalac Hello.scala
% scala Hello
Hello, World!

Fizz Buzz

Fizz Buzzを出せれば面接に受かるらしい,とどこかで聞いたので,やってみました.

object FizzBuzz {
  def fizzbuzz(i:Int) = (i%3==0, i%5==0) match {
    case (true,true)   => "Fizz Buzz"
    case (true,false)  => "Fizz"
    case (false,true)  => "Buzz"
    case (false,false) => i
  }

  def main(args: Array[String]) {
    println((1 to 30).map(i => fizzbuzz(i)))
  }
}

これをFizzBuzz.scalaとして保存して,

% fsc FizzBuzz.scala
% scala FizzBuzz
RangeM(1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, Fizz Buzz)
% 

きれいに書けたと思います.

参考

1つめの記事はすぐに読める上にチートシート的に見返せて便利でした.
2つめのチュートリアルは英語だったので,読むのに時間がかかってしまいましたが,だいたい分かるようになったので,よい資料だと思います.

まとめ

初日としては順調な学習を行えたので,明日のHackathonではなにか実用的なアプリケーションを作りたいと思います.


Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)

Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)