意大利面条代码
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
两个脚本都输出完全相同的结果,但新脚本更短更清晰。