What have you found for these years?

2009-08-26

oop without state with fp (5)

連續兩天睡太少,現在頭痛得要死...
結果沒寫到什麼 >_<
完全不行了,太不舒服,只好暫停,寫筆記就好。

大概調整了一下 BFS 的排版(結構),其餘就不動了,
因為一時想不到什麼好解法(或許是頭昏的原因)。
但是想做空地圖時,才發覺我 Block 不能單單存 Creature,
因為 Block 上是有可能沒有 Creature 的。

那麼現在有三個解決方法:

1. 用 null
2. 用 Option (Maybe)
3. 做一個 NoCreature 之類的 case class (Creature constructor)

第一點稍微思考之後排除,理由如下:

1. 不容易移植至 Haskell
2. 不會強迫你檢查是否為 null, 程式正確性較低。

第三點思考後也排除了,因為 Maybe 就應該是其 generic 的版本。
而如果用 case class NoCreature() extends Creature 的話,
那根本就跟用 null 差不多了,同樣都不會強迫你檢查。

因此決定使用 Maybe, 而這在 Scala 裡叫 Option.
我很不喜歡這個名字,因為看不懂!一開始我以為是 config 咧...
所以我弄了這個:

package object prelude{
type Maybe[+A] = Option[A]
type Just[+A] = Some[A]
val Just = Some
val Nothing = None
}

然後在我的程式裡,就 import prelude._
就可以用 Haskell 的 Maybe 名稱風格... XD
(可惜 package object 的名字好像不能用點... 希望能改進)

jinjing 在自己的 Haskell 程式中,
也用了一堆自定的東西... XD
雖然看得不是很習慣,但我覺得自己的程式,
還是要能有點自己風格的空間,才比較趣味,
也比較能夠有這領域用這行話的感覺在。
有時候這些行話確實是增進抽象,減少累贅與繞遠路的重要因素。

不要懶得進入別人的世界啊。我會這樣說。

*

沒能寫完,明天繼續 >_<
本來今天還打算整理 github 的...

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0