语法糖

2020-2-2 语法糖

◇◆丶佛笑我妖孽 提交于 2020-02-02 01:24:55
原文: https://www.cnblogs.com/lyraLee/p/10931721.html 语法糖字面意思是语法+糖(美化)。 其实就是在编译结果不变的情况下,为了达到某种目的(使代码简洁,使语义自然,使更接近面向对象编程等...),改变代码的书写方式,使达到目的。 常见的语法糖有: 1. ES6中的 class(更像面向对象编程的语法) ES6 的 class 可以看作是ES5中构造函数的另一种写法。而且class去检测类型就是function。 class A {} console.log(typeof A) // "function" 它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。 2. react中的jsx语法(使代码简洁)。其实是React.createElement(component, props, ...children)的语法糖。 <MyButton name="hello">world</MyButton> 相当于 React.creatElement("MyButton", {name: "hello"}, 'world'); 来源: https://www.cnblogs.com/reclusive/p/12250853.html

计算机语言之java基础知识二

不想你离开。 提交于 2020-02-01 16:17:20
语法糖 问:Java 中语法糖原理、解语法糖? 答: 语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法。语法糖的存在主要是方便开发人员使用。但其实,Java 虚拟机并不支持这些语法糖,这些语法糖在编译阶段就会被还原成简单的基础语法结构,这个过程就是解语法糖。Java 中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。 语法糖:switch 支持 String 与枚举、泛型、自动装箱与拆箱、方法变长参数、枚举、内部类、条件编译、 断言、数值字面量、for-each、try-with- 问:resource、Lambda 表达式? 答:从 Java 7 开始,Java 语言中的语法糖在逐渐丰富,其中一个比较重要的就是 Java 7 中switch开始支持String。泛型需要在编译阶段通过类型擦除的方式进行解语法糖,虚拟机中没有泛型,只有普通类和普通方法,所有泛型类的类型参数在编译时都会被擦除,泛型类并没有自己独有的Class类对象。比如并不存在List<String>.class或是List<Integer>.class,而只有List.class。枚举类型不能被继承。内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念。 static 问:”static

Python语法糖——遍历列表时删除元素

核能气质少年 提交于 2020-01-25 10:50:34
Python的for可以遍历一个List,但是在遍历的过程中删除元素常常会得到意想不到的结果甚至程序出现异常,例如: lst = [1, 1, 0, 2, 0, 0, 8, 3, 0, 2, 5, 0, 2, 6] for item in lst: if item == 0: lst.remove(item) print lst 输出: [1, 1, 2, 8, 3, 2, 5, 0, 2, 6] 这段代码的本意是想删除列表中元素为 0 的项,但实际跑起来并不是那个结果。 再看下面这个例子,利用索引来遍历删除列表中的元素: for item in range(len(lst)): #此处可以每次循环时打印下item 然后就知道结果了 print(item) if lst[item] == 0: del lst[item] print lst 输出: IndexError: list index out of range 这时候就报错了,抛出了数组下标越界的异常。原因是用for发起任何形式的遍历时,它的遍历顺序都是从最初就确定的,而在遍历中删除了元素会导致当前索引的变化,这样一是会导致漏删元素,二是会导致遍历超过链表的长度。 所以遍历一个List时要删除其中的部分元素就需要其他的解决方案。 方法一:可以使用filter过滤返回新的List lst = [1, 1, 0, 2, 0,

语法糖

天涯浪子 提交于 2019-12-30 03:41:54
语法糖 是计算机语言中的一种语法,语法糖并没有为计算机语言添加新的功能,而是对已有的功能进行了封装,提供给用户更好的编程方式和编码风格。 举例来说,C语言中的a[i] 表示*(a+i),在C#语言中,语法糖更多,比如下面的代码: View Code 1 public class Person 2 { 3 // Automticall Implemented Property (自动实现的属性) 4 public string Name { get; set; } 5 public int Age { get; set; } 6 } 7 8 class Program 9 {10 static void Main()11 {12 // Object Initializer (对象初始化器)13 Person person1 = new Person { Name = "Andy", Age=24 }; 14 Person person2 = new Person { Name = "Bill", Age = 20 };15 Person person3 = new Person { Name = "Carol", Age = 28 };16 17 // Collection Initializer (集合初始化器)18 List<Person> persons = new List

ES6新语法之---对象语法糖class(8)

被刻印的时光 ゝ 提交于 2019-12-30 03:41:30
这节学习ES6中创建对象 新语法class 。 第一部分:ES5中创建对象、对象继承。    1.ES5中创建对象     ES5中创建对象是通过 构造函数 进行 new 实例化实现的。      举例: 创建用户对象 //创建User构造对象 function User(name, age) { this.name = name this.age = age } //创建静态方法 User.getClassName = function(){ return this.name } //创建普通方法 User.prototype.changeName = function(name){ this.name = name } User.prototype.changeAge = function(age){ this.age = age } Object.defineProperty(User.prototype, 'info', { get() { return 'name:' + this.name + '|age:' + this.age } }) //通过new构造函数创建对象user var user = new User('leo', 23) console.log(user) //User { name: 'leo', age: 23 } console.log

Class语法糖

[亡魂溺海] 提交于 2019-12-30 03:41:21
TypeScript源码 class A { hello() { } } class B extends A{ welcome() { } } TypeScript编译 var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); } return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var A = /*

Java的自动拆/装箱

安稳与你 提交于 2019-12-27 02:45:57
作者:Alvin 关键字:语法糖  类  对象 参考 Java 中的语法糖 语法糖--这一篇全了解 浅谈 Integer 类 什么是Java中的自动拆装箱 深入剖析Java中的装箱和拆箱 前言 我们知道,Java有8中基本数据类型,分别是byte,short,int,long,char,float,double,boolean,但是定义的这些基本数据类型的值只是一个字面量,而字面量的补码是的的确确存储在内存上的一个量,这个量不具有其他的方法属性。但是我们在编程开发中有把一个整型int转换成字符串等的需求,再如当我们需要把数据放到集合中时,我们的基本数据类型是不允许被放入的,而Java中的中心思想就是对象,所以Java将它们封装成对象Byte、Short、Integer、Long、 Character、Float、Double、Boolean,并给出相应的方法。这样当我们有需求的时候我们就可以通过相对应的对象进行调用方法来解决。 一、案例引入 public static void main(String[] args) { Integer i = 10; Integer j = 10; System.out.println(i == j); Integer a = 128; Integer b = 128; System.out.println(a == b); int k = 10

注册组件的语法糖

微笑、不失礼 提交于 2019-12-05 07:32:46
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><div id="app"> <mycpn1></mycpn1><!--使用自定义的组件名称--> <mycpn2></mycpn2><!--使用自定义的组件名称--></div><body><script src="vue.js"></script><script> // 1创建一个组件构造器对象(子组件) // const cpn1=Vue.extend({ // template:'<div><h2>我是标题1</h2><p>我是内容</p><p>我是安徽</p></div>' // }); // 1创建第二个组件构造器对象(父组件) const cpn2=Vue.extend({ template:'<div><h2>我是标题2</h2><p>我是内容</p><p>我是安徽</p><mycpn1></mycpn1></div>', components:{ // mycpn1:cpn1 /*在某一个组件内部创建了另一个组件 只需要在Vue中实现2即可以同时实现1和2*/ } }); //2注册组件(全局组件,意味着可以在多个Vue的实例中使用) (自定义名字,组件); //在某个Vue的实例下注册

关于scala搞出的新概念的语法糖

ε祈祈猫儿з 提交于 2019-12-05 06:55:33
对于scala搞那么多语法糖和新概念真是又爱又恨。爱的是scala引入了java一直没有的lambda特性,这对于使用高阶函数抽象来处理集合数据非常有爱(spark简洁的RDD处理得益于此)。恨的是scala搞那么多的新概念和语法糖。 下面就来说说这些个语法糖和新概念: 一、单例对象(singleton object) scala没有static关键字,搞出了个object关键字来新建单例对象。在单例对象中的成员都是static的。所以要写util类一般都要用这个东西。 object xxUtil { def process(xx:String):String = { xx } } 二、伴生对象和伴生类(companion object & companion class)、独立对象(standalone object) 这两个概念是相互的。假设有object A 和 class A 两个同名了。这时候就可以说:object A是class A的“伴生对象”;class A是object A的“伴生类”。当一个object B没有同名的class B的时候,object B就叫“做独立对象”。 伴生带来的特权就是:它们可以互相访问私有成员。 class和object的区别: 1、单例对象不能用new来初始化。 2、单例对象不能带参数。 3、单例对象在第一次调用的时候才初始化。 三

python装饰器 语法糖

不打扰是莪最后的温柔 提交于 2019-12-04 18:17:26
简介: 装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。 比如说我们写flask,路由就是用装饰器定义的。如果写权限控制,那么权限控制一般也是由装饰器来实现的。日志记录,一般也可以通过装饰器来实现。 简单说,就是为了给某些函数增加一种或几种功能的做法。 下面举例实现。 一:基本函数 1.源码 from time import sleep def watch_movie(): print('看电影') sleep(3) print('The End') if __name__ == '__main__': watch_movie() View Code 2.执行结果 代码很简单,先打印看电影,间隔3秒,打印The End。 二:装饰器原理 1.目标:计算函数运行时间 2.源码 from time import sleep, time def ceal_time(): before = time() watch_movie() after = time() print('函数运行%s秒' % (after - before)) def watch_movie(): print('看电影') sleep(3) print('The End') if __name__ == '__main__': ceal_time() View