Can you summarize the following document?
        
  以下是一段用BASIC寫的程式,是典型麵條式程式碼的例子。程式在螢幕上顯示數字 1 到 10 及其對應的平方。由於有codice_1語句,此程式需要配合行號才能知道程式的流向,也無法利用縮排的方式使程式比較容易閱讀。而且因為跳轉指令的關係,要執行的程式會不可預測的由一個區域跳轉到另一個區域,不易除錯。現實世界中的麵條式程式碼往往更加複雜,會大幅增加維護成本。  以下則是使用結構化的控制結構後的程式,由於沒有codice_1語句,程式可以用縮排的方式,增加程式的可讀性:  1 FOR i=1 TO 10 2 PRINT i;"squared=";i*i 3 NEXT i 4 PRINT "Program Completed." 5 END  程式中還是有由一個區域跳轉到另一個區域的情況,不過這種跳轉是可以預期的,也是標準的做法。使用FOR迴圈或子程式是處理程式控制流程的標準做法。若使用GOTO,也就表示允許程式任意的跳轉。上述示例的程式碼很短,實際使用的程式其原始碼更長,若是麵條式程式碼的話會相當難以維護。

  當使用各種組合語言(及其底層的機器語言)時,編寫麵條式程式碼會帶來更大的危險。其原因是由於這些低階語言很少有可以對應 FOR 迴圈或 WHILE 迴圈的機制。許多指令碼語言也有類似的情況,例如 DOS 的批處理檔案或者 OpenVMS 上的 DCL。  如果將結構化程式設計中的做法移植到組合語言的程式,會對可靠性及可維護性有顯著的改善。例如限制 GOTO 的使用,只用 GOTO 來產生類似結構化程式設計中流程控制的效果、另外許多組合語言都有提供子程式呼叫的機制,可以有類似過程式程式設計(Procedural programming)的效果。組合語言一般都會有巨集,而且支援引數傳遞,以避免全域性變數的使用,也可避免遠隔作用 (action at a distance)的反面模式。  使用高階語言編寫的程式可以利用一些標準流程控制的作法(如以上第2例的 For 迴圈),不過當編譯為彙編程式碼或者機器程式碼時,由於最後仍利用 GOTO 或 IF 之類的指令表示高階語言的標準流程控制,看起來會像是麵條式程式碼。因為編譯器會忠實的將程式的結構轉換為彙編程式碼,因此不會遇到其他結構性較弱的語言所遇到的程式流程難以辨識的問題。不過,如果程式做了過多的優化,可能在縮小程式大小的同時,也影響其程式的結構。若配合程式碼級除錯使用,有時會因此造成一些困難。

  餛飩式程式碼(Ravioli code)是指程式中是由許多小的、鬆散連線的部分所構成。餛飩式程式碼可以和麵條式程式碼作類比,後者用麵條來代表程式的結構,而前者用餛飩(Ravioli)來代表程式中的物件。這種程式碼雖然滿足了低耦合性的要求,但是過度的分離與封裝導致過多的呼叫,使得堆疊容易變得臃腫,從而也增加了閱讀程式碼的難度。
麵條式程式碼(Spaghetti code)是軟體工程中反面模式的一種,是指一個原始碼的控制流程複雜、混亂而難以理解,尤其是用了很多GOTO、例外、執行緒、或其他無組織的分支。其命名的原因是因為程式的流向就像一盤面一樣的扭曲糾結。麵條式程式碼的產生有許多原因,例如沒有經驗的程式設計師,及已經過長期頻繁修改的複雜程式。結構化程式設計可避免麵條式程式碼的出現。