義大利麵條程式碼

Spaghetti 程式碼表示使用許多且通常令人困惑的結構的程式碼片段。如 GOTOs,異常和不一致的程式碼。

示例和解決方案

例 A

@echo off
set /a counter=0

:Loop
set /a counter=%counter% + 1
echo %counter%

if %counter% equ 10 goto :exit
goto :Loop

:exit

這個程式有很多跳轉,讓我們更難以知道指令碼究竟在做什麼。

解決方案 A.

@echo off
for /l %%G in (0,1,10) echo %%G

使用較少的 GOTOs,我們大大減少了程式碼量,我們可以專注於實際的程式碼。

例 B

請考慮以下陳述。

:endGame
if %player1Score% gtr %player2Score% goto :player1wins
if %player1Score% lss %player2Score% goto :player2wins
goto :tie

:player1wins
echo player 1 wins
goto :eof

:player2wins
echo player 2 wins
goto :eof

:tie
echo tie
goto :eof

這段程式碼需要大量的 goto 語句,並且可能會讓除錯變得混亂。為簡化這些陳述,我們可以使用 call 命令。以上指令碼處於更好的狀態。

:endGame
if %player1Score% gtr %player2Score% call :message player 1 wins
if %player1Score% lss %player2Score% call :message player 2 wins
if %player1Score% equ %player2Score% call :message tie

goto :eof

:message
echo %*
goto :eof

兩個指令碼都輸出完全相同的結果,但新指令碼更短更清晰。