意大利面条代码

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

两个脚本都输出完全相同的结果,但新脚本更短更清晰。