iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
自分はスパゲティ・プログラムには二種類あって、一つは未熟だから、もう一つは経験も技術もあるのに、と考えている。そして、問題は後者の方で、考えに考え抜いたスパゲティ、理由を聞いても皆が納得するないようで、本人も信念を持って取り組んだ結果だから、それを何とかするのが非常に困難だと考えている。
今回、別件でワインバーグ氏について調べていたら、スパゲティ・プログラムの原因を見つけるヒントが目に留まったので、それと、発見した原因を発表する。
『コンサルタントの秘密 - 技術アドバイスの人間学 -』で紹介されていて、生物学の分野でロナルド・フィッシャー卿の「フィッシャーの基本定理」と呼ばれるもので、自然淘汰に関する基本定理だ。
ワインバーグ氏の著書では、プログラミングに関して取り上げた定理でないが、この意味を考えてみた閃いた。
経験のある、プロジェクトでも声がでかい人間が生み出すスパゲッティ・プログラム。それは、今、この瞬間に最適なもので、そのため、将来の変化に対応できず、それが、のちの人を苦しめている。
具体的な例を挙げてみよう。
例えば、三つのテーブル・ビューがあるスマートフォン・アプリケーション。一つは新規リスト、もう一つは、編集リスト、最後は削除リスト。リストを管理して、表示するという部分のコードは共通化できる。ベースクラスを導入しよう、と、スパゲティ・プログラム料理人は考える。
class BaseTableViewController {
func sortList() {
....
}
}
よし、うまくいった。これがリファクタリングだ!俺ってすごい。
ここで悲しい依頼が。新規リストは、条件によって並び替えのルールを変えて欲しい。ああ、どうしよう。そうだ、前処理関数を導入すればいい!
class BaseTableViewController {
func prepare() {
...
}
func sortList() {
prepare()
...
}
}
class NewTableViewController {
override func prepare() {
...
}
}
新規リストのクラスで、前処理関数をオーバーライドして、挙動を変えればいい!
こうして、また新たなスパゲティ・プログラムが生み出される!
基本クラスのコードを読んでも、新キリストのコードを読んでも、どんな動きをするのか読み取れない。
では、どうやって、スパゲティ・プルグラムの調理が行われているのを見つけるのか?
長年の研究によって、自分が見つけたのは、以下だ。