fbpx
维基百科

语法盐

語法鹽(英語:syntactic salt)是指在計算機語言中為了降低程式設計師撰寫出不良程式碼的設計,但其中仍會有潛藏錯誤存在的可能。例如,C語言或C++語言中Switch指令英语switch statementcase中若不加break編譯器並不會產生錯誤訊息,部分程式設計師認為宣告變數型態也是語法鹽的一種。

語法鹽的例子 编辑

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 编辑

Java中並不允许將一个宣告为float类型的变量赋值给一个宣告为int类型的变量,但是CC++会自动把float类型的变量捨去小數并赋值给int类型的变量。

int num1; float pi=3.14159; num1=pi; //賦值錯誤 

C# 编辑

C#中,如果要隱藏一個繼承的成員函數,需加上new關鍵字來說明該成員函數是隱藏的,即便不使用new關鍵字來說明隱藏也能通過編譯產生隱藏效果,但仍會產生編譯警告[1]

public class BaseC {  public int x;  public void Invoke() { } } public class DerivedC : BaseC {  new public void Invoke() { } //隱藏繼承自BaseC的Invoke()成員函數 } 

C#在switch語法中的case標記代码块內,如果沒有gotoreturnthrow跳離語法,一定得加上break語法[2]

switch (caseSwitch) {  case 1:  Console.WriteLine("Case 1...");  //在此撰寫break或其他跳離語法,否則將產生編譯錯誤  case 2:  Console.WriteLine("... and/or Case 2");  break; } 

總結 编辑

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

参考文献 编辑

  1. ^ new Modifier (C# Reference) - Visual Studio 2012. [2014-02-04]. (原始内容于2014-02-09). 
  2. ^ switch (C# Reference) - Visual Studio 2012. [2014-02-04]. (原始内容于2014-02-04). 

延伸阅读 编辑

  • Abelson, Harold; Sussman, Gerald Jay; Sussman, Julie. Structure and Interpretation of Computer Programs. Cambridge, MA: MIT Press. 1996 [1984]. ISBN 0-262-51087-1. 
  • Landin, P. J. . Communications of the ACM. 1965-02, 8 (2): 89–101 [2022-01-16]. ISSN 0001-0782. S2CID 6505810. doi:10.1145/363744.363749. (原始内容存档于2022-01-13) (英语). 
  • Landin, Peter J. Programming Without Imperatives – An Example. UNIVAC Systems Programming Research. 1965-03. 
  • Landin, P. J. Getting rid of labels. Higher-Order and Symbolic Computation. 2009-12, 22 (4): 315–329. ISSN 1388-3690. doi:10.1007/s10990-010-9057-5 (英语). 
  • Landin, Peter J. A Generalization of Jumps and Labels. UNIVAC Systems Programming Research. 1965-08. , reprinted in Landin, Peter J. A Generalization of Jumps and Labels. Higher-Order and Symbolic Computation. 1998-12-01, 11 (2): 125–143. CiteSeerX 10.1.1.85.2610 . ISSN 1573-0557. doi:10.1023/A:1010068630801 (英语). 
  • 本條目部分或全部内容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。

参閱 编辑

外部連結 编辑

语法盐, 語法鹽, 英語, syntactic, salt, 是指在計算機語言中為了降低程式設計師撰寫出不良程式碼的設計, 但其中仍會有潛藏錯誤存在的可能, 例如, c語言或c, 語言中switch指令, 英语, switch, statement, 的case中若不加break編譯器並不會產生錯誤訊息, 部分程式設計師認為宣告變數型態也是語法鹽的一種, 目录, 語法鹽的例子, java, 總結, 参考文献, 延伸阅读, 参閱, 外部連結語法鹽的例子, 编辑c, 编辑, 相较于, 中形如, 样式转换和, 的函数样式. 語法鹽 英語 syntactic salt 是指在計算機語言中為了降低程式設計師撰寫出不良程式碼的設計 但其中仍會有潛藏錯誤存在的可能 例如 C語言或C 語言中Switch指令 英语 switch statement 的case中若不加break編譯器並不會產生錯誤訊息 部分程式設計師認為宣告變數型態也是語法鹽的一種 目录 1 語法鹽的例子 1 1 C 1 2 Java 1 3 C 2 總結 3 参考文献 4 延伸阅读 5 参閱 6 外部連結語法鹽的例子 编辑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 lt int gt d 静态转换 编译时能进行类型检查的转换 void pv reinterpret cast lt void gt i 重解释转换 在不兼容的类型间进行转换 例如指针与非指针 const int pi amp i int pi2 const cast lt int gt pi 常量转换 去掉 const volatile 等修饰符 class C public virtual C class D pub lic C D d const C amp rc d const D amp rd dynamic cast lt const D amp gt rc 动态转换 在类继承体系里上下转换 因必须在编译时检查 RTTI 而得名 Java 编辑 Java中並不允许將一个宣告为float类型的变量赋值给一个宣告为int类型的变量 但是C和C 会自动把float类型的变量捨去小數并赋值给int类型的变量 int num1 float pi 3 14159 num1 pi 賦值錯誤 C 编辑 在C 中 如果要隱藏一個繼承的成員函數 需加上new關鍵字來說明該成員函數是隱藏的 即便不使用new關鍵字來說明隱藏也能通過編譯產生隱藏效果 但仍會產生編譯警告 1 public class BaseC public int x public void Invoke public class DerivedC BaseC new public void Invoke 隱藏繼承自BaseC的Invoke 成員函數 C 在switch語法中的case標記代码块內 如果沒有goto return throw跳離語法 一定得加上break語法 2 switch caseSwitch case 1 Console WriteLine Case 1 在此撰寫break或其他跳離語法 否則將產生編譯錯誤 case 2 Console WriteLine and or Case 2 break 總結 编辑語法鹽有可能會違背它的初衷 使程式碼的可讀性降低或浪費程式碼的空間占用 在極端條件下 真正有用的程式碼可能要比為了滿足語法鹽要求而增加的程式碼還要短 另外一種替代語法鹽的方法是在程式碼可能產生錯誤時 讓編譯器產生警告 這也是C和C 的編譯器常見的作法 参考文献 编辑 new Modifier C Reference Visual Studio 2012 2014 02 04 原始内容存档于2014 02 09 switch C Reference Visual Studio 2012 2014 02 04 原始内容存档于2014 02 04 延伸阅读 编辑Abelson Harold Sussman Gerald Jay Sussman Julie Structure and Interpretation of Computer Programs Cambridge MA MIT Press 1996 1984 ISBN 0 262 51087 1 Landin P J Correspondence between ALGOL 60 and Church s Lambda notation part I Communications of the ACM 1965 02 8 2 89 101 2022 01 16 ISSN 0001 0782 S2CID 6505810 doi 10 1145 363744 363749 原始内容存档于2022 01 13 英语 Landin Peter J Programming Without Imperatives An Example UNIVAC Systems Programming Research 1965 03 Landin P J Getting rid of labels Higher Order and Symbolic Computation 2009 12 22 4 315 329 ISSN 1388 3690 doi 10 1007 s10990 010 9057 5 英语 Landin Peter J A Generalization of Jumps and Labels UNIVAC Systems Programming Research 1965 08 reprinted in Landin Peter J A Generalization of Jumps and Labels Higher Order and Symbolic Computation 1998 12 01 11 2 125 143 CiteSeerX 10 1 1 85 2610 nbsp ISSN 1573 0557 doi 10 1023 A 1010068630801 英语 本條目部分或全部内容出自以GFDL授權發佈的 自由線上電腦詞典 FOLDOC 参閱 编辑语法糖外部連結 编辑 nbsp 计算机程序设计主题 取自 https zh wikipedia org w index php title 语法盐 amp oldid 72846726, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。