鱼C论坛

 找回密码
 立即注册
查看: 17813|回复: 59

[扩展阅读] 什么是语法糖(Syntactic sugar)

[复制链接]
发表于 2016-7-20 17:59:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
语法糖(Syntactic sugar)是由 Peter J. Landin(和图灵一样的天才人物,是他最先发现了 Lambda 演算,由此而创立了函数式编程)创造的一个词语,它意指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法。

语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读。不过其并没有给语言添加什么新东西。

在 C 语言里用 a[n] 表示 *(a+n),用 a[n][m] 表示 *(*(a+n)+m),这就是语法糖的应用,因为在内部,编译器会自动将 a[n] 转换为 *(a+n) 的形式实现。

另外,for 循环其实也是一个语法糖:
for (i = 0; i < 10; i++)
{
    //P
}
其效果和以下的 while 循环是一样的,其中 P 是循环要处理的主体:
i = 0;
while (i < 10)
{
    //P
    i++;
}

实际上从面向过程到面向对象也是一种语法糖啊,C 语言可以通过它的指针、类型转换,结构实现面向对象的编程风格,但是 C++ 更进一步的推广了这种风格,更好用了,不过到了 C# 把 OO 的风格发挥得淋漓尽致。OO 的编程风格对于面向过程来说是不是一种语法糖呢?如果生硬地照此理解,只有计算机硬件指令才不算语法糖,而其他一切利用编译器、汇编器将代码抽象,和自然语言更相近的手段都算语法糖。

现在很多很多编程思想,编程理论层出不穷,当然,对于学习来说我们是要抓住技术的核心,但对于工程来说如何提高工程质量,如何提高工程效率也是我们要关注的,既然这些语法糖能辅助我们以更好的方式编写代码为什么要“抵制“呢?

我想语法糖和其他编程思想一样重要,什么鸭子类型,人本接口,最小接口,约定优于配置,其实不都是一些思想上的“语法糖”?

不过也并不是没有反对的声音,这其中就有图灵奖的第一个获得者: Alan Perlis。.net 从 2.0 到 3.0 到 3.5 底层 CLR 并没有做更新,没有添加任何新的 IL 指令,所以 C# 从 2.0 到 3.0 中所有的特性都是语法糖,就算从 1.0 到 2.0,也只有一个泛型不是语法糖,其余的新特性也都是如此,但是每一次 C# 发布新特性的时候我们不得不为之而鼓舞,为之而喝彩。新的语法可以酿造更好的编程风格,以前一些难以实现的方面现在也轻而易举了。        

需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。

评分

参与人数 3荣誉 +7 鱼币 +1 贡献 +2 收起 理由
niuA + 5 鱼C有你更精彩^_^
小凯2013 + 1 + 1 + 1 感谢楼主无私奉献!
陪我同行 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-20 19:49:48 | 显示全部楼层
本来看视频 补码那一课 的扩展阅读  进来发现最下面是一小时以前发的  嘿嘿!

评分

参与人数 1荣誉 +5 收起 理由
zhengyihao1 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 16 反对 2

使用道具 举报

发表于 2017-3-1 21:41:12 | 显示全部楼层
get it
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-8 11:53:35 | 显示全部楼层
感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-15 18:57:55 | 显示全部楼层
听你讲课就来看了。回复是美德
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-13 15:18:28 | 显示全部楼层
回复是美德
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-5 19:58:38 | 显示全部楼层
10鱼币QAQ好吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-2-21 11:27:40 | 显示全部楼层
回复是美德,赞赏作者的无私及付出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-21 09:30:18 | 显示全部楼层
回复即美德
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-7 10:44:27 | 显示全部楼层
学习一下,感谢楼主分享啦,鱼币啊……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-19 16:38:34 | 显示全部楼层
哟哟,在指针与二维数组的课上听到,赶紧过来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-10-7 19:23:41 | 显示全部楼层
学到  指针跟二维数组来看的    不是很清楚!  array+1 不是一个地址吗?  那*(array+1)怎么又成了地址?   搞不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2018-10-26 09:49:03 | 显示全部楼层
我就问下有多少人把 语法糖 听成了 语法坛 的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-29 20:37:00 | 显示全部楼层
今天刚看了百度,发现这个文章和百度一毛一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-13 09:36:40 | 显示全部楼层
还缺3个鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-1 07:22:09 | 显示全部楼层
真好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-14 23:47:05 | 显示全部楼层
正在学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-6 15:28:02 | 显示全部楼层
牛牛牛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-15 16:44:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-27 13:35:15 | 显示全部楼层
younasd 发表于 2017-11-15 18:57
听你讲课就来看了。回复是美德

头像 很对劲
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表