「スパゲッティコード」の版間の差分
imported>Fallout New Tokyo (→中級者病) |
(→中級者病) |
||
(3人の利用者による、間の3版が非表示) | |||
6行目: | 6行目: | ||
== 主な原因 == | == 主な原因 == | ||
=== 中級者病 === | === 中級者病 === | ||
− | + | [[中級者病]]とは、初級者から中級者へ昇格する時期はほぼどのような[[ソースコード]]でも読める程度に[[プログラミング言語]]に精通し、また偉い[[プログラマー]]の提唱した[[デザインパターン]]も一通り理解したくらいである。 | |
すると、[[プログラミング言語]]の持つあらゆる機能と、偉い[[プログラマー]]の提唱するあらゆる技術を使わねばならないという思い込みが発生する。 | すると、[[プログラミング言語]]の持つあらゆる機能と、偉い[[プログラマー]]の提唱するあらゆる技術を使わねばならないという思い込みが発生する。 | ||
そして[[Hello World]]にまで崇高な[[オブジェクト指向]]や[[デザインパターン]]を適用しようとしだすのである。 | そして[[Hello World]]にまで崇高な[[オブジェクト指向]]や[[デザインパターン]]を適用しようとしだすのである。 | ||
46行目: | 46行目: | ||
== 関連項目 == | == 関連項目 == | ||
+ | * [[中級者病]] | ||
* [[ペアプログラミング]] | * [[ペアプログラミング]] | ||
* [[不完全にしておよそ正しくないプログラミング言語小史]] | * [[不完全にしておよそ正しくないプログラミング言語小史]] |
2015年4月22日 (水) 01:07時点における最新版
スパゲッティコード(英語:spaghetti code)とは、スパゲッティのように複雑に絡み合い、理解に苦しむソースコードのことである。
概要[編集 | ソースを編集]
スパゲッティコードは初級者から中級者までのプログラマーに好発する精神疾患である。
主な原因[編集 | ソースを編集]
中級者病[編集 | ソースを編集]
中級者病とは、初級者から中級者へ昇格する時期はほぼどのようなソースコードでも読める程度にプログラミング言語に精通し、また偉いプログラマーの提唱したデザインパターンも一通り理解したくらいである。 すると、プログラミング言語の持つあらゆる機能と、偉いプログラマーの提唱するあらゆる技術を使わねばならないという思い込みが発生する。 そしてHello Worldにまで崇高なオブジェクト指向やデザインパターンを適用しようとしだすのである。
その結果、
- 大量のクラス
- 迷路のような変数渡し
- 底なしに深いネスト
などといった凄いものが生まれる。 [1]
善意のスパゲッティコードである。
デスマーチ[編集 | ソースを編集]
デスマーチに陥ったら誰もが迷わず「Write Once, Run Away」を考える。 これには初級者も上級者もない。 むしろ逃げるのは場数を踏んでいる上級者の方が早い。
緊急避難のスパゲッティコードである。
オブジェクト指向[編集 | ソースを編集]
オブジェクト指向では絡み合うクラスのすべてのメンバー変数の状態を完全に把握していないとスパゲッティコードが生まれる。 つまりオブジェクト指向は愚かな考えである。
と、関数型プログラミング言語の支持者たちは主張している。 彼らはHaskellとモナドこそ正義であると信じている。
実はオブジェクト指向の提唱者であるアラン・ケイも古くから同様の主張をしている。 それでもオブジェクト指向を作った理由を「関数型プログラミング言語は素晴らしいが難しすぎる」のだという。
LISPは理想的だが、使いこなせるのは一握りであり、実質的に価値がない。
対策[編集 | ソースを編集]
個人による独断と偏見で物事を進めるとスパゲッティコードを発生させやすい。 なぜなら、他人に読ませる前提ではないからである。 履歴書を書くときは一語一句に気を配ったであろう。普通は他人に読ませる前提ならば気を配るものである。
こそで登場するのがコードレビューとペアプログラミングである。