Step by Step Scala [vol.01]@scala-be 備忘録

Step by Step Scala [vol.01]@scala-be*1に参加した。
会場で記録したメモを忘れないうちにblogに載っけとく。鉄は熱いうちに打て。

テーマ:インタプリタに色々打ち込んで実験してみよう

val と var の違い

→ val 宣言された変数は再代入不可 (Java でいう final みたいなものか?)

Any って何?

scalaの型のひとつ

AnyVal って何?

scalaの型のひとつ。Any とはちがう

println メソッドってどのオブジェクトにメッセージを送ってるの?

→ Predef であらかじめ定義されていて、scala の起動時に読み込まれる。Prefef のソースはぜひ読んでみよう
→ 困ったときはライブラリのソースを見よう!

List の /: っていう演算子もメソッドなの?

→ メソッド。Iterable.scala に定義されている

trait 重要

→ 具体的にどう重要かは言及なし。今後明らかになっていく?

プログラマー登竜門、FizzBazz を scala っぽく書いてみよう

→ まず 1 から 100 まで出力するリストをつくる
→ リストに対して、FizzBazz の結果を与えるような 1 to 1 の写像(map)を考える

scala> (1 to 100).map ( x => x match {
     |   case x if x % 3 == 0 && x % 5 == 0 => "FizzBazz"
     |   case x if x % 3 == 0 => "Fizz"
     |   case x if x % 3 == 0 => "Bazz"
     |   case _ => x
     | }).foreach(println)

ファイルから行を読み出してみよう

→ マルチバイト文字があると表示が止まる?? → 要追試

インタプリタ上でオブジェクトのメソッド一覧とかが見たい

→ 現状の解は foo.getClass.getMethods.foreach(println)
id:yuroyoro さんが InteractiveHelp*2 というライブラリを作っている (Python の help 関数のようなものかな?)

演習

P01

お題:与えられたリストの最後の要素を返す。

○俺の回答

scala> val list = List(1,1,2,3,5,8,13)
list: List[Int] = List(1, 1, 2, 3, 5, 8, 13)

scala> def last(list:List[Int]) : Int = {
     |   list(list.length - 1)
     | }
last: (List[Int])Int

scala> last(list)
res1: Int = 13

○模範解答

scala> def last(list:List[Int]): Int = list.last
last: (List[Int])Int

scala> last(list)
res6: Int = 13
P06

お題:与えられたリストが回文数かどうかを判定し結果を返す。

○俺の回答

scala> def isKaibun(list:List[Int]): Boolean = {
     |   list == list.reverse
     | }
isKaibun: (List[Int])Boolean

scala> isKaibun(list)
res7: Boolean = false

scala> isKaibun(List(1))
res8: Boolean = true

scala> isKaibun(List(1,2,1))
res9: Boolean = true

scala> isKaibun(List(1,2,2,1))
res10: Boolean = true

ここでタイムアップ。

感想

第1回ということで、初歩の初歩からスタートという感じ。
F1でいうとオープニングラップが終わった段階か。

懇親会

勉強会終了後、参加者の半分程度で台風の中の懇親会。
飛び交ったワードなどを適当にピックアップ。

つーわけで、おそらく次回も参加します。次かその次あたりからが本番かなぁ?