2010年2月28日日曜日

Option

Scalaで本格的にプログラミングを始めたのが昨年の7月だから、だいたいScala歴1年8ヶ月ということになる。結構沢山のコードを書いてきたけど、最近分かってきたのはOptionの威力。Optionを使えるようになってくるとScalaプログラムが見違えるようになる。この点が腑に落ちるまでずいぶんかかった。

Optionはメソッドの結果型に使用することが多いけど、インスタンス変数に使うのも相当クールである。

たとえば、以下のクラスPersonのような感じでOptionを使う。最近、こういうOptionの使い方を多用するようになった。

Person.scala
class Person(val name: String) {
  var zip: Option[String] = None
  var prefecture: Option[String] = None
  var city: Option[String] = None

  def address: String = {
    (for (Some(s) <- List(zip, prefecture, city)) yield s).mkString(" ")
  }
}

addressメソッドは、インスタンス変数zip, prefecture, cityを接続して住所を生成するメソッド。この実装がfor-comprehension, pattern matching, ListというScalaの特徴的な機能を活かした文になっている。また、このfor文がOptionと相性がよいという点も重要。このテーマはいずれ取り上げようと思うけど、ここではこういった機能を使うことで複雑な処理を簡単に書けるということをアピールしておきます。

次はクラスPersonのインスタンス変数を生成するスクリプト。変数の型がOption[String]になっているため、変数に設定する時に「Some(XXX)」という形になっているのがあまり美しくないけど、このような瑕など気にならなくなるくらいOptionのメリットは大きい。

tryout.scala
val 山田さん = new Person("山田太郎") {
  zip = Some("221-0000")
  prefecture = Some("神奈川県")
  city = Some("横浜市")
}

val 鈴木さん = new  Person("鈴木花子") {
  zip = Some("556-0000")
  city = Some("大阪市")
}

REPLでの実行結果は以下の通り。

scala> 山田さん address
res68: String = 221-0000 神奈川県 横浜市
scala> 鈴木さん address
res70: String = 556-0000 大阪市

今日はOptionについていくつか論点を挙げた。面白いテーマなので追々取り上げていこうと思う。

2010年2月25日木曜日

Modegramming Style

2010年。次の10年はクラウドで凄いことになりそうだ。
そんなこともあって2010年1月からブログを新規に立ち上げ直そうと考えていたんだけど、よいタイトルが思い浮かばず延び延びになっていた。
先日ふと「Modegramming Style」というタイトルを思いついて、やっとブログを立ち上げるきっかけができた。

Modegrammingは2009年の活動コンセプトとして考えたもので、テキストDSLを使ってモデリングとプログラミングを融合したソフトウェア開発アプローチである。
一つの具体例はボクの開発しているSimpleModelerを使って、Scala DSLでSimpleModelを記述して、ここから仕様書やUML図、AppEngineアプリケーションなどを自動生成するという開発アプローチ。

以前からある2つのブログ「浅海智晴プログラマ日記」はTwitterのログ用に特化、「SimpleModeler開発日記」はSimpleModelerの開発が再活発化してディープなネタが出てきたら順次、ということにしようと思う。