常常看到很多文章都會討論不同程式語言之間的優缺點,學校或補習班在排課時也都會特別針對時下備受重視程式語言來進行課程的規劃,但是,前幾天我在網路上看到了 Ayuda Media System 這家公司在其 Tumblr 部落格上發表了一文章< Do I really need a programming language >,作者透過淺顯的例子做說明提出了不同的想法,個人覺得非常有趣,所以也提供給各位參考。
接著就來看看這篇有趣的文章吧。(以下文字以原文作者 Ayuda Media System 第一人稱撰寫)
我的主管指示我在我們的系統中新增一個季節性折扣的功能,對於想成為一名頂尖高手的我而言,我選擇用 C 語言來實踐這個需求,以下是判斷的邏輯:
if ( price > 100 ) {
return 10;
}
else {
return 5;
}
我突然想到,我們部門其實並不允許使用像 C 語言這樣的低階語言,所以,我必須用 Visual Basic .NET 來實踐,語法則有了些微的改變:
If price > 100 Then
Return 10
Else
Return 5
End If
但這語法簡直就是大大的貶抑了我的能力,我了解 C 和 VB.NET 的語法只是做為編程人員與硬體之間的一個中介步驟,而真正的實踐目標,還是必須讓這些語法轉譯成可執行的指令。
所以,語法的分析器 (Parser) 會將我所撰寫的語法掃描後進行 Tokens 的分解,再做進一步的規則判斷,像 C 語言的分析器會以大括弧為一個區塊來進行解讀,VB.NET 分析器也會對關鍵字 (Keyword) 進行分析。
這些 Tokens 會進一步被編譯成語法樹 (Syntax Tree) 來檢驗編程人員的思維邏輯:
各位讀者看到這裡可能會覺得我說了很多的廢話,還舉了 C 語言和 VB.NET 語言做例子,其實,我想說的是,無論使用哪一種程式語言,編譯器都會把語法編譯成語法樹,那麼我們真的需要這麼介意使用哪一種程式語言做工具嗎?
也許我們可以直接透過語法樹的邏輯來撰寫程式,如此或許可以避免掉許多程式語言本身的缺失,接著,就來看看我的思維是否是合理的。
實踐的方式是:將父節點設定為 P1,它的兩個子節點分別為 C1 和 C2,那麼,就可以得到像是 P1-C1- C2 的路徑組合,接著再判斷是否符合語法規則,而這種方法是可以遞迴實踐的。
最後,依語法樹邏輯所撰寫出來的語法就會成為:
( if ( > price 100 )
10
5 )
寫到這裡我突然發現,這不就是 LISP 嗎!?
(資料來源:ayudasystems.tumblr.com ; Laurence Vagner , CC Licensed)
Source: techorange.com