今天看資料時,遇到乙個詞——語法糖,不是第一次遇到這個詞,之前覺得很簡單,沒有深究過,今天特意看了看,發現其並且應用廣泛,而且還挺有意思。
首先來看百科的解釋(都大同小異,大致如下):語法糖(syntactic sugar),也譯為糖衣語法,指計算機語言中新增的某種語法,這種語法對語言的功能並沒有影響,但是更方便程式設計師使用。通常來說使用語法糖能夠增加程式的可讀性,從而減少程式**出錯的機會。
從該解釋中我們可以得到如下的知識點:
1、語法糖是計算機語言中的「新增」的語法,對功能沒有影響,也就是說它是額外新增的,計算機沒有它也可以正常執行。
2、語法糖出現的目的是為了方便程式設計師使用,增加了程式的可讀性,減少了程式**出錯的機會。
那麼,問題來了:
1、計算機本身的**到底有什麼樣的問題,為什麼用語法糖可以增加程式的可讀性,減少程式出錯的機會?
2、語法糖對功能沒有影響,那麼對效能呢,額外新增的它對效能的影響呢?
首先,我們來解決第乙個問題:用乙個網上的比較常見的例子來解釋計算機本身**的問題,在c語言中,我們知道陣列名代表著陣列的首位址,用「*(陣列名+下標)」可以表示陣列中的元素,但是我們常見的表示方法是「陣列名[下標]」,這種「陣列名[下標]」的方式就是一種「語法糖」。很明顯第一種表示方法可讀性比較差,需要編寫人員有較好的基礎,也給初學者和閱讀**的人增加了難度。當然,你可能會說,這沒什麼啊,很簡單啊,完全不需要第二種方式也行啊,那麼,我們繼續,現在我們有乙個二維陣列,陣列名叫array,我需要取出其中的某乙個元素,用第一種方式我們要這樣表示「*(*(array+i)+j)」,而用第二種即語法糖的方式則是這樣「array[i][j]」,這樣對語法糖的作用就有點感覺了吧。如果還是覺的沒什麼,好吧,那麼我們繼續,現在有乙個四維陣列,請取出其中的某個元素,請自行腦補兩種方式......
通過上面的簡單的乙個例子,我們可以明顯的感覺到語法糖的好處,大大簡化了我們編碼難度,增強了我們的閱讀體驗。當然,語法糖絕對不僅僅運用在c語言的陣列中,我們平時程式設計時所用的很多語法都是語法糖的體現,比如後置和前置自增減、陣列字典的顯示定義等等。都是語法糖,無論對程式設計人員還是讀者來說都是極大的簡化和極好的體驗。
現在再來看我們提出的問題,很明顯,計算機本身的**在面對比較複雜的問題時就會變的可讀性差,編寫難度大,而用語法糖,就可以使得**有清晰的表示和極高的可讀性,從而減少程式出錯的機會。
再來看第二個問題:作為額外增加的語法,語法糖到底會不會影響計算機效能呢?我們此時所說的效能主要指計算機**執行的效率。我們首先來看看什麼時候**執行的效率才會被影響,我個人做了個總結,影響計算機**執行效率大致有以下幾種情況:(1)計算機硬體運算速率太低(2)**複雜度太高(3)**太過冗餘 這三個原因如果細究起來要做的太多,不在此贅述。我們再來看看語法糖到底是怎麼做的,計算機對語法糖只需要做一件事,就是編譯器在編譯階段會將會將語法糖包裹的東西自動轉化為計算機**,僅此而已,對效能幾乎沒有影響。
語法糖概念的問題解決了,那麼他就真的只有這麼一點作用嗎?當然不是,我們進一步擴充套件下,我們可以把語法糖看作是對現有**的一種包裝來簡化編寫和增強可讀性。回想一下,我們平時所用的很多重要的程式設計思想是不是也是這個目的呢,我們可不可以也看成是語法糖呢,再進一步,我們接觸的各種設計模式,框架模式是不是又是程式設計思想的語法糖呢?
語法糖的應用廣泛,我們平時所接觸的很多語法與思想其實都是其體現。究其根本,這是一種追求簡潔的思想,我們無時無刻都在和它打交道,寫**時語法力爭簡潔明瞭,演算法力爭最優等等,我們每乙個人都是語法糖的受益者,也是創造者。
語法 C 基本語法
標頭檔案 在程式設計競賽中,我們常見乙個標頭檔案 include 發現它是部分c 中支援的乙個幾乎萬能的標頭檔案,包含所有的可用到的c 庫函式,如 在程式設計競賽中,使用這個標頭檔案是乙個好的想法,特別是當你在選擇標頭檔案時想減少時間,我們更加專注於找到演算法解決問題而不是軟體工程。而從軟體工程的視...
jdbc mysql語法 JDBC SQL語法
結構化查詢語言 sql 是一種標準化語言,允許對資料庫執行操作,例如 建立資料記錄,讀取內容,更新內容和刪除資料記錄等。本教程中將概述sql,這是了解和學習jdbc概念的前提條件。經過本章後,您將能夠在資料庫中建立,建立,讀取,更新和刪除 通常稱為crud操作 資料。有關sql的詳細了解,可以閱讀我...
oracle語法轉mysql語法
連線字串 concat decode case when else end 行轉列 wm concat group concat nvl ifnull 通用 coalesce 字段,指定值 返回括號裡第乙個不為null的資料,且字段值和指定值型別必須一樣 nvl2 if isnull 欄位名 0 1...