语法糖(Syntactic sugar)/ 语法盐(syntactic salt)

语法糖

语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·蘭丁发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。它使语言“更甜”供人类使用:事物可以更清晰,更简洁地表达,或者以某些人可能更喜欢的替代方式表达。

举例来说,许多程序语言提供专门的语法来对数组中的元素进行引用和更新。从理论上来讲,一个数组元素的引用涉及到两个参数:数组下标向量,比如这样的表达式:get_array(Array, vector(i, j))。然而,许多语言支持这样直接引用:Array[i, j]。同理,数组元素的更新涉及到三个参数:set_array(Array, vector(i, j), value),但是很多语言提供直接赋值:Array[i, j] = value

 

语法盐

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

语法盐的替代方法是在代码很可能是错误的结果时生成编译器警告 - 这是现代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

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語法。

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

来源:维基百科

发布了119 篇原创文章 · 获赞 152 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/weixin_40539125/article/details/94340582
今日推荐