借りているScalaスケーラブルプログラミングをそろそろ読む.
Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)
posted with amazlet at 11.07.04
Martin Odersky Lex Spoon、Bill Venners
インプレスジャパン
売り上げランキング: 55911
インプレスジャパン
売り上げランキング: 55911
前回(一昨日)に引き続き読書する.今日は3章〜を読んでいた.
リストと言えば関数型のイメージが僕にはあるけどScalaではこうやって作って,INDEXは()で与えるらしい.
scala> val a = List(1,2,3) a: List[Int] = List(1, 2, 3) scala> val b = 1::2::3::Nil b: List[Int] = List(1, 2, 3) scala> a(0)+a(1)+a(2) res3: Int = 6 scala> a.head res10: Int = 1 scala> a.tail res11: List[Int] = List(2, 3)
関数型と言えばリストですよね?いろいろ操作できる.
scala> a.filter( _ % 2 == 0 ) res5: List[Int] = List(2) scala> a.filter( s => s % 2 == 0 ) res6: List[Int] = List(2) scala> a.forall( _ % 2 == 0 ) res7: Boolean = false scala> a.forall( _ > 0 ) res8: Boolean = true
filterはよく使うというか必要になることが多いけど,forallっていつ使うのだろう.
それはともかく,とりあえず言語を使うにはファイル入出力と標準入出力が大切な気がする.
やっぱり何か受け取って何かしたいし…
import scala.io.Source if (args.length > 0) { for( line <- Source.fromFile(args(0)).getLines ) println(line.length + " " + line) } else { Console.err.println("Please enter filename") } [/scala] この規模のファイルでもScalaって無茶苦茶重いよね…. それはさておき,一行ずつ読めれば,もう何とかなると思うよ(Javaの関数とか使えるし) [text] # taki[10:16PM] scala readfile.scala Please enter filename # taki[10:16PM] scala readfile.scala readfile.scala 22 import scala.io.Source 0 22 if (args.length > 0) { 50 for( line <- Source.fromFile(args(0)).getLines ) 37 println(line.length + " " + line) 8 } else { 46 Console.err.println("Please enter filename") 1 } [/text] といってもこのあたりの基本的な操作って使ってるうちに体に染み付くと思うけど… (どうせちゃんと使わないと忘れてGoogle先生に頼ることになる) 4章ではクラスとオブジェクトについて. Scalaではstaticな変数とかを持てないので,その代わりに<strong>シングルトンオブジェクト</strong>があるらしい. よりオブジェクト指向であるとはどういうことだろう,smalltalk寄りということ? あるクラスと同じ名前のオブジェクトを作るとコンパニオンオブジェクトになるらしい. もう一冊の本であったなぁと思って,明日また研究室で読もうか?と思う. 何かclassを作ってみないと. Scalaのアプリケーションのためにはmainメソッドを書かないとダメ. そういえば最近pythonを使っているから,条件式の周りの()が面倒だな. [scala] object test{ def main(args: Array[String]){ println(1) } }
こんな感じでmainメソッドを入れておくと
taki[10:27PM] scalac test.scala taki[10:27PM] scala test 1
こんな感じで実行できるあたりはJavaっぽいような.