Java.use(better); Episode#23 ファインダーを作成する

前の記事記事一覧|次の記事》
Java.use(better, Scala);


Episode#23

ファインダーを作成するリファクタリング



悲しめる心よ、落ちついて悔ゆるのをやめよ
雲の後ろには太陽が照っている
Henry Wadsworth Longfellow - Wikipedia

《関連記事》

┃余録:Complete Constructor, idiom#68

■ 事例:class Progression

次の事例は、その理解を深めるための便宜的なものです。任意の等差数列を生成するときに、

scala> print( new Progression(5).toList )
List(0, 1, 2, 3, 4)
scala> print( new Progression(3,7).toList )
List(3, 4, 5, 6)
scala> print( new Progression(3,9,2).toList )
List(3, 5, 7)

コンストラクターには、3つの引数を指定できます。このとき、どの引数を省略するかで、その解釈が異なります。これは次のように実現します。

import scala.collection.mutable.ListBuffer
class Progression(start: Int, end: Int, step: Int) {
  def this(start: Int, end: Int) = this(start, end, 1)
  def this(end: Int) = this(0, end)
  def toList() = {
    val buf = ListBuffer.empty[Int]
    var i = start
    while (i < end) { buf += i; i += step }
    buf.toList
  }
}

引数を2つ指定すると、基本コンストラクター this(Int,Int,Int) の第3引数に 1 を指定したと見なします。引数を1つ指定すると、コンストラクター this(Int,Int) の第1引数に 0 を指定したと見なします。

コンストラクターを多重定義するときには、ひとつの「完全な」基本コンストラクターに帰着させます。Scala では、クラスを定義するときに、基本コンストラクターの引数を指定できます。すると、これを見るだけで、意味のあるインスタンスを生成するために、何が必要かが分ります。

┃未来への考察

成功の秘訣は「自分に最適な」ダイエット健康法を身に付けることです。同様に、チームにとって最適な開発環境を構築することが、プロジェクトを成功へ導く鍵を握ります。「正解が1つとは限らない」ところに、プログラミングの醍醐味があります。また「正解があるとは限らない」ところが、プログラミングの奥深さです。

アジャイル開発では、耐震から免震へ転換した、建築の歴史から多くを学べます。始めに最上階から構築するという逆転の発想は、古典的な手法の問題を解決しました。というのも、完成の後に足場を解体する「無駄な作業」を解消するからです。上流工程から下流工程へ進む古典的な手法は、足場がないと建築が進まない「始めに設計ありき」というものでした。

美術品の修復は、修復技術がさらに進化したとき、やり直すことを前提に行われます。その考え方は、ソフトウエア開発にも通じます。ソフトウエアが進化を続けるかぎり、要求仕様の変更は避けられません。なによりそれは、そのソフトウエアが支持されている証です。どんな変化にも柔軟に対処できる開発環境を構築するには、チームが「リファクタリングを開発スケジュールに盛り込めるか否か」に掛かっています。

》作業中です《

 ↑ TOP

Created: 2010/05/23|Last updated: 2013/06/12 23:41:53