语法糖(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类型的变量,但是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
語法。
switch (caseSwitch)
{case 1:Console.WriteLine("Case 1...");//在此撰寫break或其他跳離語法,否則將產生編譯錯誤case 2:Console.WriteLine("... and/or Case 2");break;
}
来源:维基百科
语法糖(Syntactic sugar)/ 语法盐(syntactic salt)相关推荐
- syntactic sugar - 语法糖 - 糖衣语法
syntactic sugar - 语法糖 - 糖衣语法 语法糖 (syntactic sugar),亦称为糖衣语法,是英国计算机科学家彼得 - 约翰 - 兰达 (Peter J. Landin) 发 ...
- 语法糖(Syntax Sugar)Python
语法糖让程序更加简洁,有更高的可读性 连续比较 1 < x < 10 (x>1 and x<10) 三元表达式(结果一 if 判断条件 else 结果二) 推导表达式 推导表 ...
- python3语法糖_python的语法糖
# -*- coding: utf-8 -*- def deco(func): print("before myfunc() called.") func() print(&quo ...
- Java的12个语法糖【转】
本文转载自公众号 Hollis 原创: 会反编译的 Hollis 侵权删 本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学 ...
- 不了解这12个语法糖,别说你会Java!
作者:Hollis 微信公众号:Hollis 本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学会如何使用 Java 语法糖的 ...
- Java 语法糖详解
语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序 ...
- 在Java中12个常见的语法糖!
作者 l Hollis 来源公众号 l Hollis(ID:hollischuang) 跟着Hollis大佬的脚步,学学学! 本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧, ...
- 阿里云面试:什么是语法糖?Java中有哪些语法糖?
点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...
- 什么是语法糖?Java中有哪些语法糖?
本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学会如何使用 Java 语法糖的同时,了解这些语法糖背后的原理 1 语法糖 语 ...
- Java 中的语法糖,真甜。
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 我们在日常开发中经常会使用到诸如泛型.自动拆箱和装箱.内部 ...
最新文章
- 微信小程序如何进行登录授权和获取用户信息
- PCI与PXI的区别
- 【算法】anchor free 和 anchor based 目标检测模型
- 截取字符串,但要保证汉字不被截取半个
- 实战 IE8 开发人员工具
- 【计算机网络】wireshark数据流追踪、图像抓取(转)
- ping,python实现批量ping包工具--小案例v3优化版本
- 农学院计算机考试题,天津农学院计算机考试参考.doc
- 机器学习基石和机器学习技法_机器学习和洞穴寓言寓言
- 麦氏细菌浊度分析仪的校准物质选择
- [ERROR] Failed to execute goal org.mortbay.jetty:jetty-maven-plugin:8.1.12.v20130726:run (default-cl
- xp重启计算机的快捷键,xp电脑关机重启快捷键是什么
- 嵌套在iframe页面打印去掉页眉页尾
- 中国历史上5个谣言,单是第1条就骗了不少人!
- 六度分离(Six Degrees of Separation)理论
- hdu 6656 Final Exam
- 一种在Houdini中让顶点动画循环的简单方法
- 使用Altium Designer绘制一个STM32系统的电路原理图
- 怎么把视频里的音乐提取成音频?一分钟帮你搞定
- 命令行删除文件夹及文件夹下文件
热门文章
- 「ZBrush」学习ZB出来可以从事什么工作
- 用python花猫_Python竟能画这么漂亮的花,帅呆了(代码分享)
- [死磕 Spring 21/43] --- IOC 之 Factory 实例化 bean
- 多变量微积分笔记(1)——向量和矩阵
- android控制wifi,Android控制wifi开关
- WSL gcc -m32 readdir 出错: Value too large for defined data type
- Pexels Videos – 可以免费商业使用的短视频
- vipJr联合朵拉举办童模大赛 潮童萌娃自信来袭
- Cannot find SourceMap 'XXX.js.map'问题解决
- 手机新闻网站,手持移动新闻,手机报client,jQuery Mobile手机新闻网站,手机新闻网站demo,新闻阅读器开发...