Step by Step Scala [vol.04]@scala-be

いつものダラダラとしたメモ書きです。
かっこ書きの部分は自分の感想です。


モナドについて
副作用のある言語でも意味はある。デザインパターンと考えても良い(らしい)
(もっと突っ込んで話がありましたが、自分はここまでしか理解できまでんでした><)


関数と関数オブジェクト
お互いに違うもので相互に変換できるよ


末尾再帰について
普通の再帰だと深まっていくとスタック使いすぎで落ちる。
で、末尾再帰だとgotoに変換されるよ。
そもそも、(scalaで)再帰を書く必要があるか?

  • 書けた方が良い。
  • でも、極力書かずに済ませた方が効率やら意図のわかりやすさ的に良い(かも)
  • foldLeft、foldRightの話 (消化不良orz)


ローンパターン
closeのような後処理の必要なリソースを使うためのイディオム。
RubyのFile.openにブロックを渡せるような感じで書ける。
(Ruby厨からすると、標準のメソッドでそれができて
さらに、それが推奨されている事がスバラシイんです。キリッ)


DuckTypeについて
Javaのリフレクション機能を使う分、処理は少しは遅くなるよ。
以下はclose()というメソッドが備わっている型、Tという書き方。

def withClose[T<:{def close():Unit}](rsrc:T)(op:T=>Unit) {
  try { op(rsrc) } finally { rsrc.close() }
}

(DuckTypeはちょっと書きにくい。非推奨にしか見えないくらい書きにくいと思う)


Swarmという分散フレームワークについて
scala2.8からポータブルな継続がサポートされて、
別プロセスに継続を渡して途中から実行ができる(!)
(これは楽しそうです。実装が気になります)
http://vimeo.com/6614042


リストの練習問題
Listクラスのメソッドを使わずパターンマッチとNil,::だけを用いて
List操作の関数を自分で実装する。
(1問目のlength()はできたけど2問目のrevrese()がいきなりできませんでした。精進します...)