2014年4月3日木曜日

Programming in Scala, First Edition: Chapter 2

2. First Steps in Scala
  ** 気になったところだけをコメントとして記載。
  これからの議論はインタープリタを使う。

Step 1. Learn to use the Scala interpreter
  基本的にはJavaの対応する機能が呼び出されて実施される。
  Javaのバイトコードにコンパイルすればパフォーマンは良くなる。
  resXに結果が自動的に収められて後から参照出来る。

Step 2. Define some variables
  valは不変、immutable、Javaのfinalと同じ。
  varは可変。
  文字列はjava.lang.String。javaの型がそのまま使える。
    単にStringでも参照出来る。
  複数行にまたがるときは途中でenterを入れると|が出て入力待ちになる。
    enterを2回叩くと抜けられる。
    ** 途中だとインタープリタが分かるところにenterを入れる必要あり。

Step 3. Define some functions
  "="を使うのは関数型なので関数型変数に関数リテラルを代入している
  ?? defキーワードを使わないで無名関数を変数に代入する書き方も出来る??
  パラメータの型は省略できない。
  result typeは省略できる。
    recursiveの時は省略出来ない。
  one statementなら{}も省略出来る。
  Unitはvoid。戻り値なし。副作用のみの関数。
  :quit :qで抜けられる。
  :helpなど:xxxがインタプリタへのメタ命令。

Step 4. Write some Scala scripts
  スクリプト言語としても使える。
  インタープリタで書いたことをそのままファイルにいれてscala.batに食わせるだけ。
    scala.bat hello.scala args...
  引数はargsにArrayで入る。
    Arrayは0始まりでアクセスは()。args(0)など。

Step 5. Loop with while; decide with if
  命令型の記法での。whileとifの説明。
    「もっと良いスタイルが次で出てくる」とある。
  i++は使えないi+=1は使える。
  文末の;は多くの場合に「省略可能」
    文法的にはある。shell scriptににている?
  while, ifの論理式の()は省略不可。
    rubyは省略可。
  while, ifのbodyが一文なら{}は省力可。

Step 6. Iterate with foreach and for
  ** 今度は関数的な書き方。
  関数リテラルの書き方
    (x: Int, y: Int) => x + y
  関数リテラルは変数に代入出来る。
    val f = (x: Int, y: Int) => x + y
    val f: (Int, Int) => Int = (x, y) => x + y
    ?? 部分適用は??
  パラメタの型は省略可能。()も省略可能。
    ?? 戻り値の型は指定しない?? それとも省略しているだけ??
    ?? 型宣言だけを出来るのはclassだけ。変数は実体が必要??
  パラメタそのものも省略できる。
    型がもともと分かっているから。
  for文は関数型的
    for (arg <- args) println(arg)
      argはvarに見えるがval
      毎回新しく作られる。
      bodyで変更不可。
  ** for文は関数型への移行を促進するために敢えて関数的なものだけにしている。

Conclusion
  次章でもoverviewが続く

0 件のコメント:

コメントを投稿