レガシー (コア) システムで作業している開発者が、すでにスパゲッティ コードに感染している既存のコードに新しい機能を追加する際に、GOTO ステートメントを使用するよう圧力をかけられているという状況が職場で発生しています。
さて、より保守しやすいソリューションへのリファクタリングに時間を費やす代わりに、「たった 1 つの小さな GOTO」を使用することについての議論があるかもしれないことを理解しています。問題は、この孤立した「たった 1 つの小さな GOTO」がそれほど孤立していないことです。少なくとも 1 週間に 1 回程度、新しい 'one little GOTO' を追加します。このコードベースは、1984 年以前にさかのぼるコードが GOTO だらけで、多くのパスタファリアンがフライング スパゲッティ モンスター自体に触発されたと信じるようになるため、作業するのがすでに恐ろしいものです。
残念ながら、これが書かれている言語には既製のリファクタリング ツールがないため、「後で生産性を高めるためのリファクタリング」をプッシュするのが難しくなります。
新しい GOTO を追加して 2000 行をランダムなセクションにジャンプすることはできないということで誰もが同意しているこの問題を経験した人はいますか?
tldr;
開発者が継続的に GOTO ステートメントを追加するよう圧力 (強制) されているという問題に対処するにはどうすればよいでしょうか (追加とは、何行も離れたランダムなセクションにジャンプするために追加することを意味します)。
この件でラプターズに貴重な開発者を失うのではないかと心配し始めています...
説明:
後藤 here
alsoThere:
いいえ、これは、while ループの途中で、1 つのサブルーチンから別のサブルーチンに 1000 行ジャンプするような goto のことです。後藤 somewhereClose
there:
私は、プログラムが何をしていたのかを合理的に読み取って判断できる goto の種類についても話していませんでした。後藤 alsoThere
somewhereClose:
これはミートボールを作るようなコードですmidpoint:
初めてここに行く場合 nextpoint
detail:
(それぞれほぼ完全に異なります) Goto pointlessReturn
here:
この質問では、goto を時々使用しても問題ないことについて話しているのではありません。後藤there
tacoBell:
そして、それは製図板に戻ったところです。後藤 Jail
elsewhere:
アナリストがプログラムに触れるたびにその動作を解読するのに数週間かかる場合、コードベースに深刻な問題があります。実際、仕様goto gotoのhell:
最新の goto 4
レンディションではないにしても、私は実際に detail
pointlessReturn:
tacoBell
Jail:
実際には、小さな勝利を収めた小さなアップデートです。この特定のプログラムの一部を一度に 1 つのラベルずつリファクタリングするのに 4 時間を費やし、各反復を svn に保存しました。各ステップ(約20個)は小さく、論理的で簡単で、食事から自然に飛び出し bypass
nextpoint:
、奇妙な種類のスパゲッティミートボールの磁力を介して画面に飛び出しました. Goto elseWhere
bypass:
は、ロジックの変更を導入しないことを合理的に検証します。この読みやすい新しいバージョンを使用して、私はアナリストと話し合い、この変更のほとんどすべてを完了しました。後藤 end
4:
最初 *の場合は初めてここに移動hell
、なし 2 番目の場合は初めてここ hell
に移動、なし 3 番目の場合は初めてここ hell
に移動4 番目は現在最新の移動 hell
end: