- わかりずらいソースコードのこと
- 無駄が多く、処理の順番に並んでないコード
- 絡み合ってる状態がスパゲティっぽい
ここまでで7秒!もっとくわしく知りたい人は続きをどうぞ!
スパゲッティコードをわかりやすく
スパゲッティコードをわかりやすく説明すると
無駄なく簡潔に構造化されてるべきソースコードが、無駄が多く処理する順番無視のスパゲティのように、絡まってる状態に見えるソースコードのこと
スパゲティコードと正常なコードの違い
下記のソースコードは、2つの数値の大小とプラスマイナスを判別して出力している。同じ処理をしているのに、長さが違うということは、スパゲティコードは、無駄が多くて、「このコードは何の処理してるの?」ってなる。
スパゲッティコードとは わかりやすい例
もっと噛み砕いてわかりやすく説明すると
コンピューターに命令を出すソースコードは、無駄なく構造化されてるのが理想だけど、ルールがなく、構造化されてなく、曖昧なロジックで、「動けばいいでしょ」という感じでソースコードを記述すると、「このコードは何のためにあるの?」、「このコードさっきもあったけど」、「このコードの処理は最初じゃない」と思われる無駄が多く、処理の順番に並んでない、スパゲティコードと呼ばれるソースコードになってしまう。
スパゲッティコードの手順
下記の手順でコードを記述すれば立派なスパゲティコードになる。スパゲティコードを意識的に作るひとはいないはずなので、無意識にやってしまっている場合が多い。スパゲティコードにならないように意識が必要。
- ステップ1制御フローを無秩序にする
条件分岐(if文)やループ(for/while文)を無秩序に使用し、制御フローが複雑に入り組むようにする。gotoなどのジャンプ文も思い切り使う。
- ステップ2関数の階層を無駄に深くする
関数の中に関数を定義し、さらにその関数の中に別の関数を定義するようにする。関数の階層が深くなればなるほど良い。
- ステップ3コードを冗長にする
同じロジックやコード片をどにかくコピー&ペーストして使う。重複したコードがたくさんあれば、コードの肥大化する。
- ステップ4変数名を適当に付ける
変数名はx、y、zなどの単一文字や無関係な名前にする。変数の役割が全く分からないような名前を付ける。
- ステップ5コメントを書かない
コメントは一切書かないようにする。コードに対する説明や意図を全く残さず、他の人がコードを理解できないように。
スパゲティコードの類似語
名称 | 説明 |
---|---|
スパゲッティコード | 複雑で絡み合った構造で、理解や保守が困難なコード。 まるでぐちゃぐちゃに絡まったスパゲッティのようであることから名付けられた。 |
ラザニアコード | 複数のレイヤーが密接に絡み合い、階層構造が複雑なコード。 ラザニアの層のように見えることから名付けられた。 |
ゴミコード | 無駄なコードや、本来必要のないコードが混在しているコード。 まるでゴミ箱のように汚いことから名付けられた。 |
クリスマスツリーコード | インデントが過剰に使用され、コード全体がクリスマスツリーのように見えるコード。 見づらく、理解が困難であることから名付けられた。 |
泥沼コード | 複雑で冗長なコードで、修正や変更が困難な状態。 まるで泥沼に足を取られたように抜け出せないことから名付けられた。 |
呪いのコード | バグや問題が多く、修正を試みるとさらに悪化するようなコード。 まるで呪われているように扱いにくいことから名付けられた。 |
妖怪コード | 理解不能なほど複雑で、まるで妖怪のように扱いにくいコード。 |
迷路コード | 複雑な分岐やループが絡み合い、まるで迷路のように抜け出せないコード。 |
カラスの巣コード | 無駄なコードやコメントが散乱し、カラスの巣のように汚いコード。 |
スパゲッティコードまとめ
- 絡み合ってる状態がスパゲティっぽい、無駄が多く、処理の順番に並んでない、わかりずらいソースコード
- 制御フローを無秩序にして、関数の階層を無駄に深くして、コードを冗長化して、変数名を適当に付けて、コメントを書かなければスパゲティコードができあがる
- スパゲッティコードの類似語として、ラザニアコード、ゴミコード、クリスマスツリーコード、泥沼コード、呪いのコード、妖怪コード、迷路コード、カラスの巣コードなどがある
スパゲッティコードについて理解は深まりましたか?
まだわからない点や疑問点があれば、ぜひコメント欄で質問してください。生の声を聞かせていただければ、より良い内容を提供できるはずです。
以上、スパゲッティコードについてでした。コメント欄での活発な意見交換を心よりお待ちしています!
コメント