语法糖

02-02-08、JDK8的语法糖

风流意气都作罢 提交于 2020-04-05 19:12:24
​1、什么是语法糖 如果要来进行一个拆字游戏的话,语法糖可以拆分成“语法” 和 “糖”,每一种计算机语言都有自己的语法,Java也不例外。 语法就是在这一个语言中,要表示一种行为的表示模式,如赋值:int i = 666;如循环while(foo){},语法在一种语言的运行环境中是原生支持的,是体现在其运行时当中的。 糖是则是一种对于吃它的人来说感觉到甜的碳水化合物,往其他食物中加入糖会让食物变甜,吃糖能让人愉悦。 语法糖(Syntactic Sugar)就是给语法裹上一层糖,因此语法糖也称语法糖衣,让使用这些被裹上糖的语法的编码人员感觉到“甜”。例如,Java中使用for循环语法对一个集合进行遍历,写法为: int [] collection = new int [ 6 ]; for ( int i = 0 ; i < collection.length; i++){ // do something } 而现在,你只需要这么写就行: int [] collection = new int [ 6 ]; for ( int i : collection){ // do something } 是否内心会感到小小的“甜”呢。 有人会感觉很奇怪,我就是这么写的啊,这不就是Java的语法么?还说是什么语法糖!呸!~ 我们都知道,Java是一门高级语言,它的运行环境JVM执行的是字节码

JS语法糖总结----JS语法糖大全----一直更新

跟風遠走 提交于 2020-03-26 17:04:21
一:关于语法糖和语法盐的概念 二.JS的语法糖 ES6疯狂给JS,添加语法糖,最常见的ES6语法糖有以下多个(不停更新) 参考链接: https://segmentfault.com/a/1190000010159725 总结如下: ###对象字面量的简写属性和计算的属性名不可同时使用,原因是简写属性是一种在编译阶段的就会生效的语法糖,而计算的属性名则在运行时才生效; 主要是针对对象的一些简写     1。K和V,重名时,可以简写,为一个,这个简写的。     2.使用[XXX]来表示动态的属性。) ###箭头函数本身已经很简洁,但是还可以进一步简写;   主要是箭头函数的细分和简化。   1.按参数的个数,0参,1参,N参等等,可以对小括号进行相应的省略或不省略。   2.按语句个数,对大括号,进行省略或者不省略。 ###解构也许确实可以理解为变量声明的一种语法糖,当涉及到多层解构时,其使用非常灵活;   结构赋值,针对数组和对象,快速赋值。   基于快速赋值,还能达到其他的快速目的。 ###学会模板字符串的高级用法--标记模板字符串;   使用反引号,包裹字符串,加上${XXX},减少字符串拼接时的混乱 ###let,const声明的变量同样存在变量提升,理解TDZ机制   这两个是最基础的。 ###SET,map,symbol 三:ES6之前,也有一些语法糖   1

Java中的语法糖

Deadly 提交于 2020-03-25 03:18:42
同步发布于个人博客: https://njlife.top/2019/07/01/Java中的语法糖/ 语法糖 语法糖 (Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更 方便程序员使用 。简而言之,语法糖让程序更加简洁,有更高的可读性。 语法糖的存在主要是方便开发人员使用。但其实,Java虚拟机并不支持这些语法糖。这些语法糖在编译阶段就会被还原成简单的基础语法结构,这个过程就是 解语法糖 。 说到编译,大家肯定都知道,Java语言中,javac命令可以将后缀名为.java的源文件编译为后缀名为.class的可以运行于Java虚拟机的字节码。如果你去看com.sun.tools.javac.main.JavaCompiler的源码,你会发现在compile()中有一个步骤就是调用 desugar() ,这个方法就是负责解语法糖的实现的。 语法糖本质 糖一:泛型 很多语言都是支持泛型的,但是很多人不知道的是,不同的编译器对于泛型的处理方式是不同的,通常情况下,一个编译器处理泛型有两种方式: Code specialization 和 Code sharing 。C++和C#是使用 Code specialization 的处理机制,而Java使用的是

jvm 语法糖

狂风中的少年 提交于 2020-03-24 15:23:49
jvm 语法糖主要包括: 1. 泛型 相同擦除类型参数,返回值不同也可以编译成功, 对比方法重载矛盾。 原因:class文件格式中,只要描述符不是完全一致的两个方法就可以共存。 擦除:擦除方法code属性中字节码擦除,元数据还保留在泛型中,可以通过反射获取参数化类型。 3. 装箱拆箱:Integer.valueOf(),Integer.intValue() 4. for循环,把遍历循环代码还原成了迭代器实现,因此需要被遍历的类实现Iterable接口。 5. 变长参数:调用的时候变成了数组类型参数。 6. 条件编译:使用条件为常量的if语句,根据布尔常量值的真假,编译器会把分支中不成立的代码块消除(接触语法糖阶段) java语言编译方式:将所有编译单元语法书顶级节点输入到待处理列表再进行编译,各个文件之间能相互提供符号信息。 7. 内部类 Java的内部类也是一个语法糖,它仅仅是一个编译时的概念,outer.java里面定义了一个内部类inner,一旦编译成功,就会生成两个完全不同的.class文件了,分别是outer.class和outer$inner.class。所以内部类的名字完全可以和它的外部类名字相同。 内部类分为四种:成员内部类、局部内部类、匿名内部类、静态内部类。 8. 枚举类 在JVM字节码文件结构中,并没有“枚举”这个类型。Java的枚举类型

kotlin的方言(语法糖)

萝らか妹 提交于 2020-03-10 23:44:31
概述 之前介绍了kotlin的快速入门, http://www.cnblogs.com/lizo/p/7231167.htm l 大多数还是参照java。kotlin中提供了更多更方便的语言特性 这个方言其实是针对java而言,因为很多用法其实在其他语言里面是已经存在的。使用kotlin的这些方言能够在一定程度上提高你的开发效率 POJO类 在kotlin中定义class时候加上关键字data即可创建 //注意声明对象的成员变量的是加上val关键字 data class Persion(val name: String, val age: Int) 这种对象包含的方法有 getter和setter方法 equals() hashCode() toString() copy() 组成方法 组成方法 组成方法就是可以快速获取data对象方法,例如 data class Person(val name:String ,val age:Int) fun main(args: Array<String>) { var p = Person("lizo",18); println(p.component1()) //获取第一个成员变量 println(p.component2()) //获取第二个成立变量 var (name,age) = p; //把第一个和第二个变量分别赋值给 name

Vue.js实战——数据绑定和第一个Vue应用(二)

喜欢而已 提交于 2020-03-06 01:28:54
2.指令与事件 2.1 v-bind与v-on 指令(Dicrectives)是Vue.js模板中最常用的一项功能 数据驱动DOM 是Vue.js的核心概念,所以不可轻易主动操作DOM v-bind:动态更新HTML元素上的属性,比如id,class等,语法糖: : v-on:绑定事件监听器,语法糖: @ <!DOCTYPE html> < html > < head > < meta charset = " utf-8 " > < title > v-bind与v-on </ title > < script src = " js/vue.min.js " type = " text/javascript " charset = " utf-8 " > </ script > </ head > < body > < div id = " app " > < p v-if = " show " > 这是一段文本 </ p > < br > <!-- <a v-bind:href="http://www.baidu.com" >这是一个图片链接</a> --> < a v-bind: href = " aUrl " > 这是链接 </ a > < br > < button type = " button " @click = " btnClick " > 点击试试 </

C#语法糖之第六篇: 泛型委托- Predicate<T>、Func<T>

一个人想着一个人 提交于 2020-03-04 06:18:36
今天继续分享泛型委托的Predicate<T>,上篇文章讲了Action委托,这个比Action委托功不一样的地方就是委托引用方法是Bool返回值的方法,Action为无返回值。首先我们看一下它的定义吧: 1 public delegate bool Predicate<T>(T obj); View Code 从其定义可以看到,此委托引用一个返回bool 值的方法,在实际开发中,通常使用Predicate<T>委托变量引用一个“判断条件函数”,在判断条件函数内部书写代码表明函数参数所引用的对象应满足的条件,条件满足时,函数返回true. 我们在自己实现一下该委托: 1 public static class PredicateClass 2 3 { 4 5 public delegate bool PanDuan<T>(T t); 6 7 public static List<T> MyFind<T>(this List<T> tList, PanDuan<T> find) 8 9 { 10 11 List<T> newTs = new List<T>(); 12 13 foreach (T t in tList) 14 15 { 16 17 if (find(t)) 18 19 { 20 21 newTs.Add(t); 22 23 } 24 25 } 26 27 return

【语法糖】Delegate?.Invoke();

你。 提交于 2020-02-29 22:26:55
Delegate?.Invoke(); 格式检测委托是否为空,DoAction1与DoAction2等价,但是语法更简单。 using System; public class Test: MonoBehaviour { public Action act; void Start() { //DoAction0(); // NullReferenceException: Object reference not set to an instance of an object DoAction1(); act = MyAction; DoAction1(); DoAction2(); } void DoAction0() { act(); } void DoAction1() { if (act != null) act(); } void DoAction2() { act?.Invoke(); } void MyAction() { Debug.Log("Action"); } } 来源: CSDN 作者: setsuodu 链接: https://blog.csdn.net/mseol/article/details/104578829

async-await异步语法糖

无人久伴 提交于 2020-02-16 14:07:46
之前一直忙于webgl的学习,es6、node以及前端框架的学习稍有耽搁,今天刷到一个题,也趁此机会加深一下对es6的学习: 写过es6的都知道,es6提供了一个异步对象Promise用来编写异步代码; 我们在写Promise的时候会通过then来处理异步事件返回的结果,then方法接收两个匿名函数(回调函数)作为参数来处理对应的两种状态; 所以写法看起来是这样的: 执行结果不言而喻; 而对于async-await语法糖,我们可以这样写: 没有任何回调函数的影子,看上去就和同步代码一样,但是注意了,途中标注的①这块,在这个try-catch代码块中,①处以及后面的代码只有等work这个异步对象的状态变为resolve后,后续代码才会执行; 我们稍微修改上述代码: 控制台打印如下: 来源: https://www.cnblogs.com/eco-just/p/12316426.html

Java语言中的一些语法糖

房东的猫 提交于 2020-02-12 01:50:07
1.概念 语法糖:计算机语言中添加的某种语法,这种语法对语言功能没有影响,但是更方便程序员使用,简而言之就是语法糖让可以让代码更简洁,方便程序员编程。因为有了语法糖,所以在编译阶段就有了解糖的步骤。 2.具体实例 (1)java中基本数据类型与包装器之间的自动装箱与拆箱   如 int 基本类型自动装箱为Integer对象时,是通过在编译阶段使用Integer.valueOf()来实现。   这里有一个知识点是Integer对象有一个缓存值区间[-128,127],及Integer a = 100 与 Integer b = 100此时a与b为同一个对象。 (2)java中switch语法中参数为枚举、string对象   这个语法糖在编译阶段利用对象的hashcode和equals实现 (3)增强 for 循环 (for (String s : strs))   这个语法糖编译器编译为普通for循环实现 (4)泛型   编译阶段用到字节码共享方式,即通过类型擦除方法使多个泛型类型实例共用一个字节码的方式来实现。 (5)枚举   在编译阶段将枚举类编译为一个继承EMUM类的 final 类来实现 (6)断言   在java1.4中引入,默认不启动断言检查,如开启需用 -enableassertions 或 -ea。 (7)数值字面量   java1.7中,不管是整型还是浮点数