Scala

[読書LOG]Scalaスケーラブルプログラミングを読む(その2)

借りているScalaスケーラブルプログラミングをそろそろ読む.

Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)
Martin Odersky Lex Spoon、Bill Venners
インプレスジャパン
売り上げランキング: 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")
}
&#91;/scala&#93;
この規模のファイルでもScalaって無茶苦茶重いよね….
それはさておき,一行ずつ読めれば,もう何とかなると思うよ(Javaの関数とか使えるし)

&#91;text&#93;
# taki&#91;10:16PM&#93; scala readfile.scala 
Please enter filename
# taki&#91;10:16PM&#93; 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 }
&#91;/text&#93;
といってもこのあたりの基本的な操作って使ってるうちに体に染み付くと思うけど…
(どうせちゃんと使わないと忘れて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っぽいような.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です