究竟什么是语法糖呢

其实语法糖只是一个概念,大家可能很早就在接触语法糖了,只是一直不知道这个就是语法糖

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

这里有两点需要注意的:

1语法糖的目的:是为了让代码更易读,更容易让人理解。

2语法糖的本质:只是一种新的编码方式,并没有给语言增加新的功能

比如 C语言中  如果数组用指针的形式表示某元素的话

1 a[i]表示 1 *(a+i)

1 a[i][j] 表示 1 *(*(a+i)+j)    这在本质上并没有给c增加新的功能,但是读起来却方便很多

在C#中比如:

1 public string MyName { get; set; }

表示

 1 private string _myName;
 2
 3 public string MyName
 4
 5 {
 6
 7     get { return _myName; }
 8
 9     set { _myName = value; }
10
11 }
12
13  
using (var stream = new FileStream("", FileMode.Create))
{
    // do something
}

表示:

 1 var stream = new FileStream("", FileMode.Create);
 2 try
 3 {
 4     // do something
 5 }
 6 finally
 7 {
 8     if (stream != null)
 9     {
10         stream.Dispose();
11     }
12 }

在此需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法。(貌似每个介绍语法糖的文章都会来这么一句)很多人觉得写原生的方法时不是效率更高,其实不然,在程序编译过程中,编译器已经会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。

时间: 2024-10-13 00:48:35

究竟什么是语法糖呢的相关文章

python_装饰器_语法糖

什么是高阶函数? -- 把函数名当做参数传给另外一个函数,在另外一个函数中通过参数调用执行 #!/usr/bin/python3 __author__ = 'beimenchuixue' __blog__ = 'http://www.cnblogs.com/2bjiujiu/' def func_x(x): return x * 2 def func_y(y): return y * 3 def func_z(x, y): # 等价于 return func_x(5) + func_y(3) r

Java语法糖初探(三)--变长参数

变长参数概念 在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用.形如 function(T -args).但是需要明确的一点是,java方法的变长参数只是语法糖,其本质上还是将变长的实际参数 varargs 包装为一个数组. 看下面的例子: 12345678910111213 public class VariVargs { public static void main(String []args) { tes

C#十种语法糖

语法糖 指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用.通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会.需要声明的是"语法糖"这个词绝非贬义词,它可以给我们带来方便,是一种便捷的写法,编译器会帮我们做转换,而且可以提高开发编码的效率,在性能上也不会带来损失. 一.自动属性 以前:手写私有变量+公有属性现在:声明空属性,编译器自动生成对应私有成员字段. 写法:输入prop ,连续按两次tab键,自动生成属性. 1 /// <s

程序设计语言中的语法糖

语法糖是什么呢?按我现在的理解,如果一门语言没有某个语法,照样可以通过其它更通用的方式来表达某种语义.这种语法的引入,只不过是 让表达语义更方便了.那么这个语法,就叫语法糖. Scheme 中有两个关键字 lambda, let ,我目前的理解是,他们就是语法糖. lambda lambda 用来定义一个匿名函数.有时候,一个函数我们只在一个地方用一次,完全没必要给它定义一个名字,这时候,我们就用 lambda 定义 一个匿名函数. 如果没有 lambda ,那么我们定义函数时,会使用下面这种方

看看C# 6.0中那些语法糖都干了些什么(终结篇)

终于写到终结篇了,整个人像在梦游一样,说完这一篇我得继续写我的js系列啦. 一:带索引的对象初始化器 还是按照江湖老规矩,先扒开看看到底是个什么玩意. 1 static void Main(string[] args) 2 { 3 Dictionary<string, string> dic = new Dictionary<string, string>() 4 { 5 ["Name"] = "ctrip", 6 ["Age&qu

深入理解java虚拟机(十二) Java 语法糖背后的真相

语法糖(Syntactic Sugar),也叫糖衣语法,是英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语.指的是,在计算机语言中添加某种语法,这些语法糖虽然不会对语言的功能产生任何影响,却能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会.但是如果只是大量添加和使用语法糖,却不去了解他,容易产生过度依赖,从而无法看清语法糖的糖衣背后,程序代码的真实面目. 总而言之,语法糖可以看做是编译器实现的一些"小把戏",这些"小

java语法糖

语法糖 Java语法糖系列,所以首先讲讲什么是语法糖.语法糖是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的字节码或者特定的方式对这些语法做一些处理,开发者就可以直接方便地使用了.这些语法糖虽然不会提供实质性的功能改进,但是它们或能提高性能.或能提升语法的严谨性.或能减少编码出错的机会.Java提供给了用户大量的语法糖,比如泛型.自动装箱.自动拆箱.foreach循环.变长参数.内部类.枚举类.断言(assert)等 断言(as

python 装饰器语法糖(@classmethod @staticmethod @property @name.)原理剖析和运用场景

引用:http://blog.csdn.net/slvher/article/details/42497781 这篇文章系统的介绍这几者之间的关系和区别.有兴趣的朋友可以到上面的链接查看原文,这里我把原文拷贝如下(如有侵权,通知马上删除) ==================================================================== 在阅读一些开源Python库的源码时,经常会看到在某个类的成员函数前,有类似于@staticmethod或@classme

看看C# 6.0中那些语法糖都干了些什么(中篇)

接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点 叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲. 一:字符串嵌入值 我想String.Format方法就是化成灰大家都认识,比如下面代码: 1 class Bird 2 { 3 private string Name = "swallow"; 4 5 public void Fly() 6 { 7 var result = string.Format(&quo