iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 10
0

  電腦是一堆電路的組合,有通電代表1,沒通電代表0,只靠1與0這兩個數字形成二進位符號便讓電腦產生無限可能。在早期Computer還是Computer,電腦還只是計算機的時代,電腦只是為了幫我們做數學計算的工具,例如電影上演的破解密碼、計算登月軌道等等,對於何謂程式,科學家給我們的答案是,演算法 + 資料結構 = 程式 。 有資料又知道如何計算,那就可以寫程式。最早出現的程式語言是像組合語言一樣這種低階語言,要撰寫程式的科學家要熟知電腦每個運算步驟才能撰寫程式,程式撰寫完還要拿起手冊逐字翻譯成機器語言輸入至電腦執行。後來編譯器的出現,這種人工翻譯的工作正式消失,程式語言開始有大大的發展,雖然我們撰寫的程式仍然最後會被翻譯成機器語言,但是高階語言的出現讓人更容易閱讀、更容易理解、更好撰寫程式。

  最初的程式語言撰寫起來是沒有區段的概念,程式從頭寫到尾一行一行地寫,電腦讀進去後一行一行的執行,沒有if{...}else{...}這樣方便的判斷式幫我們判斷要執行什麼工作,也沒有方便的while、for迴圈幫助我們重複執行一段程式碼,都是用goto或是jump這種跳躍符號,告訴電腦跳至哪一行繼續執行程式,像是流水帳一樣,當這個程式發生問題時,你不知道問題是發生在哪裡,像是麵條一樣,要重頭找到尾,而且程式一多,也是像一團麵一樣全部擠在一起。這種沒有區段的程式碼被戲稱為麵條式程式,就是現在我們稱為的非結構化程式。

  我們說中繼語言是一種低階語言,現在我們仍能從IL中看到類似麵條式非結構程式語言的樣貌,撰寫以下程式並用ILSpy工具打開來看看

class Program
{
    static void Main(string[] args)
    {
        int i = 123 ;
        if (i == 123)
        {
            Console.WriteLine("123");
        }
        else
        {
            Console.WriteLine("不等於123");
        }

    }
        
}

例如:IL程式碼中,第IL_000b行中告訴我們若判斷結果是false就跳躍至IL_001c行去,而IL_001a告訴電腦執行完if就要跳過else部分。
https://ithelp.ithome.com.tw/upload/images/20190926/20120420iTFARwmJTL.png

  要改善這樣的現象程式設計範式出現了,例如結構化程式語言的出現,提供我們{}、start end、縮排這種將程式包裝成區段的概念。這讓我們有if else then、while、for、function函式等等,程式碼被一個一個的包裝後,整個程式有清晰的結構與流程,不同步驟就呼叫不同函式來執行。而相對於原本沒有區段概念的程式語言,我們便稱為非結構程式語言。而結構化程式的function函式與變數一起包裝起來變成了物件,而這個物件就是物件導向的雛形。

時至今日雖然我們改用高階語言撰寫程式,但現在我們看到一份程式碼仍是重頭寫到尾,我們還是戲稱這是麵條式程式碼。


上一篇
使用ILSpy將中繼語言(IL)轉換成C#
下一篇
因為複雜
系列文
我要轉職成 C# / .NET 工程師34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言