冒號開門見山:「命令式編程由命令序列組成——『先做這,再做那』,強調『怎麼做』。學術說:它是馮·諾伊曼機運行機制的抽象,依序從內存獲取指令數據並執行。世界觀:程序是有序指令列表;方法論:用變量存數據,用語句執行指令。」
逗號嘀咕:「我們用的語言不都是命令式嗎?」冒號糾正:「絕大多數是,但非命令式也存在。語言演化漸進,多數語言源於匯編升級,匯編與機器語言一一對應,自然是命令式。」
問號窮追:「為何機器語言一定得是命令式?」冒號讚賞追問精神:「理論上可有非命令式機器語言,前提是特殊硬件——非馮·諾伊曼結構的數據流機、歸約機。但這類電腦未流行,相應機器語言自然罕見。」
引號問:「命令式與過程式是一回事嗎?」冒號答:「嚴格說,過程式是引入過程/函數/子程序的命令式。現代命令式語言均具此特征,故常不加區分。」
句號感嘆:「常用語言都是命令式,思想與機器相符,一切似乎自然而然。」冒號承認單純命令式樸素,但必須提結構化編程(SP)——過程式基礎上發展的編程原則,提倡代碼具清晰邏輯結構,保證易讀寫、測試、維護、優化。Pascal 即遵循 SP 設計的教學語言。
冒號展示流程圖:用戶輸入算術表達式,程序輸出結果,循環直到輸入 'q'。但按結構化定理,任何程序皆可用順序、選擇、循環三種基本控制結構表示,且滿足「單入口、單出口」(SESE)原則。
引號看出原圖用 break 跳出循環,非標準結構化。冒號要求改造,引號引入 quit 標志保證循環完整性。逗號驚問:「連 break 都不能用?」冒號澄清:break 只是循環內部跳轉,合理用可簡化代碼;goto 可跳程序任意點,造成靜態程序與動態進程差異,影響可讀性,竭力避免。
兩者互為因果、互為保障——基本結構拼裝的系統一定模塊清晰、層次分明;系統逐步分解到最後,一定演化成基本結構。
歎號問能否從流程圖看出差別。冒號誇張形容:結構化流程圖模塊大小適中、關係簡明、線路清晰,視覺給人美感;非結構化如雜草鬆散、迷宮錯綜、線頭剪不斷理還亂,嚴重者導致讀者頭暈目眩乃至抓狂吐血。眾人掩口失聲。
[1] 數據流機支持數據流式語言,歸約機支持函數式語言。
[2] 結構化定理參考文獻【1】。
[3] 1967 年 Dijkstra《Goto statement considered harmful》主張廢除 goto。
[4] 1974 年 Knuth《Structured Programming with Goto Statements》認為 goto 有合理性,應限制非完全摒棄。
[5] 亦稱「自頂向下、逐步求精」。