義大利麵條程式碼
Spaghetti 程式碼表示使用許多且通常令人困惑的結構的程式碼片段。如 GOTO
s,異常和不一致的程式碼。
示例和解決方案
例 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
使用較少的 GOTO
s,我們大大減少了程式碼量,我們可以專注於實際的程式碼。
例 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
兩個指令碼都輸出完全相同的結果,但新指令碼更短更清晰。