代码改变世界

周末话题-语法糖

  横刀天笑  阅读(2907)  评论(24编辑  收藏  举报

不知道此类文章是否合适发在首页,如果不合适,请管理团队告知,我将马上撤走,不过周末人很少,明天一到肯定是发帖高峰期,我的这篇也会马上被淹没,应该没有什么大问题。

 

正文:

众所周之,C#是一个含有丰富的语法糖的语言,每次C#推出一些新的特性的时候,很多开发者都丢下这句话:不过是个syntax sugar而已。一边我们为C#为我们带来很多简洁的语法,“优雅“的编程风格而高兴不已,一边我们又在”鄙视“这种只在其表而没有内涵的做法。

这里很想和引起大家一番对语法糖的讨论。

 

首先还是关注一下syntax sugar的历史吧,俗话说要了解一个东西还是先知其历史。

 

我们从google开始:

Wiki里我找到了关于语法糖的一些历史介绍,语法糖(Syntactic sugar),是由Peter J. Landin(和图灵一样的天才人物,是他最先发现了Lambda演算,由此而创立了函数式编程)创造的一个词语,它意指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜“的语法。语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读。不过其并没有给语言添加什么新东西。

Wiki的介绍上来看,好像这个语法糖还是一个好东西。Wiki上还举了一个例子:在C语言里用a[i]表示*(a+i),a[i][j]表示*(*(a+i)+j),看来语法糖不是“现代语言“才有啊,连我们的老大哥C也有,而且这种写法简洁明了,也更好懂了。

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

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

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

不过也并不是没有反对的声音,这其中就有图灵奖的第一个获得者: Alan Perlis

 

.net2.03.03.5底层CLR并没有做更新,没有添加任何新的IL指令,所以C#2.03.0中所有的特性都是语法糖,就算从1.02.0,也只有一个泛型不是语法糖,其余的新特性也都是如此,但是每一次C#发布新特性的时候我们不得不为之而鼓舞,为之而喝彩。新的语法可以酿造更好的编程风格,以前一些难以实现的方面现在也轻而易举了。

 

欢迎大家一起来讨论语法糖,品品语法糖的甜头。

 

PS:在搜集有关语法糖的资料的时候还搜集到一个以前不了解的名词:Syntactic salt(难道叫做语法盐”?)。它的意思和语法糖相反,它促使程序员难以书写坏代码。

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示