語法鹽

語法鹽(英語:syntactic salt)是指在計算機語言設計中,不容易產生不良代碼的特性。語法鹽就像一個程式設計師必須跳過的圈,來證明他們知道將會發生什麼,而不是只表達一個程式行為。

基本介紹

  • 中文名:語法鹽
  • 外文名:syntactic salt
  • 存在者計算機語言設計
  • 特性:不容易產生不良代碼
簡介,具體內容,語法鹽的例子,C++,總結,

簡介

語法鹽可以為容易犯的語法錯誤加上的額外語法限制,比如類型檢查。再比如,有人建議在用end if,,end while等代替統一的end

具體內容

Java中,在沒有額外的語言明確地說明意圖的情形下,Java不允許將一個聲明為float類型的變數賦值給一個聲明為int類型的變數,但是CC++會自動把float類型的變數縮短並賦值給int類型的變數。
C#中,若隱藏一個繼承類別的成員,需加上new關鍵字來說明是有意隱藏此成員,否則會產生一個警告。C語言或C++語言中Switch指令的case中若不加break也不會有錯誤訊息,因此有潛在錯誤的可能,C#在switch中未空白的case標記內,若沒有gotoreturnthrow指令,就一定要加break指令(若要像C語言或C++語言一様,一個case後要執行另一個case指令,要加上goto並標示要跳轉的標記)。
語法鹽有可能會違背它的初衷,使得代碼可讀性下降或損害代碼質量。在極端條件下,真正有用的代碼可能要比為了滿足語法鹽要求而加的代碼還要短。另外一種代替語法鹽的方式是在代碼非常有可能出錯的時候,讓編譯器產生警告——這也是現代C和C++編譯器常見的功能。
批評者開玩笑說:喜歡語法鹽的同志們,一定都是受虐狂——自己沒事找事給自己下套玩 。

語法鹽的例子

C++

相較於C中形如 (T)v 的 C 樣式轉換和 T(v) 的函式樣式轉換,C++通過引入 static_cast、reinterpret_cast、const_cast 和 dynamic_cast 這四種轉換來強迫程式設計師多敲鍵盤,從而令他們少用轉換。
double  d =0.1;const int i=static_cast<int>(d);//靜態轉換:編譯時能進行類型檢查的轉換void *pv=reinterpret_cast<void*>(i);//重解釋轉換:在不兼容的類型間進行轉換(例如指針與非指針)const int *pi=&i;int *pi2=const_cast<int*>(pi);//常量轉換:去掉 const、volatile 等修飾符class C{    public:    virtual ~C(){};};    class D: pub lic C{};D d;    const C &rc=d;const D &rd=dynamic_cast<const D &>(rc);    //動態轉換:在類繼承體系里上下轉換,因必須在編譯時檢查(RTTI)而得名
Java中並不允許將一個宣告為float類型的變數賦值給一個宣告為int類型的變數,但是CC++會自動把float類型的變數捨去小數並賦值給int類型的變數。
int num1;float pi=3.14159;num1=pi;  //賦值錯誤

總結

語法鹽有可能會違背它的初衷,使代碼可讀性降低或浪費代碼的空間占用。在極端條件下,真正有用的代碼可能要比為了滿足語法鹽要求而增加的代碼還要短。另外一種替代語法鹽的方法是在代碼可能產生錯誤時,讓編譯器產生警告——這也是C和C++的編譯器常見的作法。

相關詞條

熱門詞條

聯絡我們