トップ «前の日記(2019-07-14) 最新 次の日記(2019-07-20)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|

2019-07-15 [cocoa][swift]【研究】スパゲッティ・コード誕生の理由(わけ)

自分はスパゲティ・プログラムには二種類あって、一つは未熟だから、もう一つは経験も技術もあるのに、と考えている。そして、問題は後者の方で、考えに考え抜いたスパゲティ、理由を聞いても皆が納得するないようで、本人も信念を持って取り組んだ結果だから、それを何とかするのが非常に困難だと考えている。

今回、別件でワインバーグ氏について調べていたら、スパゲティ・プログラムの原因を見つけるヒントが目に留まったので、それと、発見した原因を発表する。

_ よく適応すれbするほど、適応力を失いがちだ。

『コンサルタントの秘密 - 技術アドバイスの人間学 -』で紹介されていて、生物学の分野でロナルド・フィッシャー卿の「フィッシャーの基本定理」と呼ばれるもので、自然淘汰に関する基本定理だ。

ワインバーグ氏の著書では、プログラミングに関して取り上げた定理でないが、この意味を考えてみた閃いた。

経験のある、プロジェクトでも声がでかい人間が生み出すスパゲッティ・プログラム。それは、今、この瞬間に最適なもので、そのため、将来の変化に対応できず、それが、のちの人を苦しめている。

具体的な例を挙げてみよう。

例えば、三つのテーブル・ビューがあるスマートフォン・アプリケーション。一つは新規リスト、もう一つは、編集リスト、最後は削除リスト。リストを管理して、表示するという部分のコードは共通化できる。ベースクラスを導入しよう、と、スパゲティ・プログラム料理人は考える。

class BaseTableViewController {
    func sortList() {
        ....
    }
}

よし、うまくいった。これがリファクタリングだ!俺ってすごい。

ここで悲しい依頼が。新規リストは、条件によって並び替えのルールを変えて欲しい。ああ、どうしよう。そうだ、前処理関数を導入すればいい!

class BaseTableViewController {
    func prepare() {
        ...
    }
    
    func sortList() {
        prepare()
        ...
    }
}
 
class NewTableViewController {
    override func prepare() {
        ...
    }
}

新規リストのクラスで、前処理関数をオーバーライドして、挙動を変えればいい!

こうして、また新たなスパゲティ・プログラムが生み出される!

基本クラスのコードを読んでも、新キリストのコードを読んでも、どんな動きをするのか読み取れない。

では、どうやって、スパゲティ・プルグラムの調理が行われているのを見つけるのか?

長年の研究によって、自分が見つけたのは、以下だ。

  • これはリファクタリングした方がいいな。やろう!
    今この瞬間の共有に適応した、将来の適応力がないコードを生産する掛け声だ!
  • このコードは安全でないので修正する!
    これからプログラミングされる部分は安全であるように心がけることには意義がないが、既に生産されたコード。そして、それが今後も手を加える可能性が低い箇所だとしてら、そいつが単に気に食わないから修正するということの言い訳だ。そんな奴に贈るワインバーグ氏の言葉はこれだ。『壊れていないものを直すな。』

トップ «前の日記(2019-07-14) 最新 次の日記(2019-07-20)» 編集