2014年12月1日月曜日

scala スケールプログラミング P.340

varを持っていても、純粋関数型になる例が出ている。

http://d.hatena.ne.jp/plasticscafe/20100906/1283745561
を参考にさせていただいた。

class Keyd {
 def computeKey: Int = ...//この処理には時間がかかる
...
}

class MemoKeyed extends Keyd {
  private var keyCache :Option{Int] =None
  override def computeKey: Int = {
 if (!keyCache.isDefined) keyCache = Some(super.computeKey)
 keyCache.get
 }
}

①MemoKeydのcomputeKeyでは、一回目はkeyCacheがないので、スーパークラスの
computeKeyメソッドで処理した値がkeyCacheに入る。keyCacheからデータが取り出される。
②二回目は、スーパークラスのcomputeKeyメソッドで処理はとばして、一回目に入れていた
値が、keyCacheから取り出される。
①、②いずれにしろ、同じ値がcomputeKeyからは、出てくるということで、純粋関数型とみなせる
ということのようだ。

0 件のコメント:

コメントを投稿