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 のソースはぜひ読んでみよう
→ 困ったときはライブラリのソースを見よう!
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でいうとオープニングラップが終わった段階か。