スパゲッティコード

提供: MonoBook
ナビゲーションに移動 検索に移動

スパゲッティコード英語:spaghetti code)とは、スパゲッティのように複雑に絡み合い、理解に苦しむソースコードのことである。

概要[編集 | ソースを編集]

スパゲッティコードは初級者から中級者までのプログラマーに好発する精神疾患である。

主な原因[編集 | ソースを編集]

中級者病[編集 | ソースを編集]

中級者病とは、初級者から中級者へ昇格する時期はほぼどのようなソースコードでも読める程度にプログラミング言語に精通し、また偉いプログラマーの提唱したデザインパターンも一通り理解したくらいである。 すると、プログラミング言語の持つあらゆる機能と、偉いプログラマーの提唱するあらゆる技術を使わねばならないという思い込みが発生する。 そしてHello Worldにまで崇高なオブジェクト指向デザインパターンを適用しようとしだすのである。

その結果、

  • 大量のクラス
  • 迷路のような変数渡し
  • 底なしに深いネスト

などといった凄いものが生まれる。 [1]

善意のスパゲッティコードである。

デスマーチ[編集 | ソースを編集]

デスマーチに陥ったら誰もが迷わず「Write Once, Run Away」を考える。 これには初級者も上級者もない。 むしろ逃げるのは場数を踏んでいる上級者の方が早い。

緊急避難のスパゲッティコードである。

オブジェクト指向[編集 | ソースを編集]

オブジェクト指向では絡み合うクラスのすべてのメンバー変数の状態を完全に把握していないとスパゲッティコードが生まれる。 つまりオブジェクト指向は愚かな考えである。

と、関数型プログラミング言語の支持者たちは主張している。 彼らはHaskellモナドこそ正義であると信じている。

実はオブジェクト指向の提唱者であるアラン・ケイも古くから同様の主張をしている。 それでもオブジェクト指向を作った理由を「関数型プログラミング言語は素晴らしいが難しすぎる」のだという。

LISPは理想的だが、使いこなせるのは一握りであり、実質的に価値がない。

対策[編集 | ソースを編集]

個人による独断と偏見で物事を進めるとスパゲッティコードを発生させやすい。 なぜなら、他人に読ませる前提ではないからである。 履歴書を書くときは一語一句に気を配ったであろう。普通は他人に読ませる前提ならば気を配るものである。

こそで登場するのがコードレビューペアプログラミングである。

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]