Atitit.dart语言的特性 编译时js语言大总结
Atitit.dart语言的特性 编译时js语言大总结
2. 第二个期待的理由是Dart的语言特性,没有什么特别特性好像,类似java c#一小时会3
2.1.4. 级联操作符(..)允许在一个成员变量上执行多个操作5
2.3.1. Optional and Named Arguments7
3. 要体验Dart很简单,如果装了Java SDK,只要下载个集成环境(只有145M),9
1. 原型环境
编程语言并不是孤立存在的,Dart也是这样,他由语言规范、虚拟机、类库和工具等组成:
· SDK:SDK 包含 Dart VM、dart2js、Pub、库和工具。
· Dartium:内嵌 Dart VM 的 Chromium ,可以在浏览器中直接执行 dart 代码。
· Dart2js:将 Dart 代码编译为 JavaScript 的工具。
· Dart Editor:基于 Eclipse 的全功能 IDE,并包含以上所有工具。支持代码补全、代码导航、快速修正、重构、调试等功能。
Dart 两种运行模式:
· 检查模式(checked):进行类型检查,如果发现实际类型与声明或期望的类型不匹配就报错。
· 生产模式(production):不进行类型检查,忽略声明的类型信息,忽略 assert 语句。
Dart 两种运行环境(和 JavaScript 类似):
· 客户端模式(client):在浏览器中运行,通过 dart:html 库与页面交互,操作 DOM、CSS,HTML5 编程等。
o 在支持 Dart VM 的浏览器中直接执行 dart 代码,如 Dartium。
o 在不支持 Dart VM 的浏览器中,dart 代码被编译为 JavaScript 执行。
· 服务器模式(server):在操作系统中,以独立 VM 中运行,可以使用 dart:io 库读写文件、套接字等
作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
1.1. Dart可以编译js
谷歌推出 Dart 语言,目的是解决 JavaScript 的缺点。当谷歌在 Dart 上注入满腔热情之时,微软却泼了一盆冷水,称“改善 JavaScript 还有很长的路要走”。
Google正式正式发布了Dart语言,貌似是JavaScript的替代品。看看下面的代码,是不是很熟悉:整个就是一个Java框架,C++小局部混搭的MINI版JAVA。很看好这个语言。几乎没有任何障碍,一般的java程序员花1个小时看看语法,就几乎能够无障碍的上手开发了。

简单的看了一下官网的说明,给我初步体验的感觉是Dart是Java和javascript结合体的样子,然后又围观了一下他的core library,给自己带来了不少的惊喜,很好的封装了Queue Collection等强大的集合以及数据结构,而且有match这样的匹配表达式的类,总之,就是一个开发Web程序的利器。
2. 第二个期待的理由是Dart的语言特性,没有什么特别特性好像,类似java c#一小时会
官网上文章介绍说Java程序员可以一小时熟悉Dart语法,那C#程序员半小时就够了。看那句 list.sort((a, b) => a.compareTo(b)),是不是倍感亲切?当然Dart刚刚起步,语言特性没有C#那么丰富,比如没有特性、反射之类的支持,不过能看出其该有的总归会有的。
第三个理由,Dart从一开始就是开源项目,我们都可以参与其中,如果有一个Dart也成为像C一样不朽的语言,我们还可以名留青史呢。
二、基本语法
Dart 中的所有东西都是对象,包括数字、函数等,它们都继承自 Object,并且对象的默认值都是 null(包括数字)。
Dart 中的语句以分号结束,并且不是可选的。
Dart 的类型是可选的。Dart 语言本质上是动态类型语言,可以使用 var 声明变量,一个变量也可以被赋予不同类型的对象。但大多数情况,我们不会去改变一个变量的类型。在 Dart 中也可以使用类型来声明变量,就像在静态语言中做的那样。关于可选类型,详见我的另一篇文章《Dart 中的可选类型》。
Dart 支持顶层的变量和函数,就像 JavaScript 一样,它并不要求你像 Java 那样把所有的东西都放到类中。
Dart 中以下划线开头的标识符是私有的。除此之外,都是公有的。注意私有单元不是类,而是库。也就是说,在同一个库中全部可见,私有只是对库的外部不可见。
2.0.1. 魔术私有变量方法
String _appellation;
2.0.2. 类型转换
Dart 用关键字 as 来做类型转换。
void updateBadge(Event e) {
String inputName = (e.target as InputElement).value;
}
2.0.3. 表达式的值即为返回值的情况
2.0.4. 级联操作符(..)允许在一个成员变量上执行多个操作
级联操作符(The cascade operator (..))可以允许在一个成员变量上执行多个操作。
genButton..disabled = false
..text = 'Aye! Gimme a name!';
· 1
· 2
以上语句就等价于
genButton.disabled = false;
genButton.text = 'Aye! Gimme a name!';
2.1. 字符串转换
Dart 中变量转化成字符串比 Java 方便多了,跟 Python 有一拼,直接在变量名前加上$符号就可以了。
'$_firstName the $_appellation';
2.2. 支持有名字的构造方法构造方法 与魔术构造方法
Dart 支持有名字的构造方法,这一点比 Java 和 Python 都先进。
PirateName.fromJSON(String jsonString) {
Map storedName = JSON.decode(jsonString);
_firstName = storedName['f'];
_appellation = storedName['a'];
}
· 1
· 2
· 3
· 4
· 5
这里 PirateName.fromJSON 是一个整体,用的时候要写全了。
return new PirateName.fromJSON(storedName);
2.2.1. Optional and Named Arguments
跟 Python 一样,Dart 也支持 Optional and Named Arguments,例如参数可以这么写:
PirateName({String firstName, String appellation}) {
# ...
}
· 1
· 2
· 3
参数要用一个大括号括起来,应该是需要把参数封装成一个类似于 Python 的 Dictionary。
但是调用的时候不需要传递所有的参数。
new PirateName(firstName: inputName)
2.3. 异步操作 await 和 async。
Dart 语言原生支持异步操作,主要是用两个关键词 await 和 async。
例如,如果我们要定义一个异步方法,不需要像 java 那样去 new Thread,直接在方法后面加上 async 关键字就OK了,这样调用时,该方法时会直接返回一个 Future,caller 无需等待。
static Future readyThePirates() async {
String path = 'piratenames.json';
String jsonString = await HttpRequest.getString(path);
_parsePirateNamesFromJSON(jsonString);
}
· 1
· 2
· 3
· 4
· 5
await 跟 java中的 wait 方法用法一样,表示等待,但是它只能用于 async 的方法中。
例如上面代码片段中, await HttpRequest.getString(path) 就表示必须要等到 HttpRequest.getString(path) 返回的 Future 有了最终结果才会继续往下执行 _parsePirateNamesFromJSON(jsonString);。
2.3.1. 生成器(Generator)
3. 要体验Dart很简单,如果装了Java SDK,只要下载个集成环境(只有145M),
解压缩,运行DartEditor即可。作为初代IDE,界面很不错了,我觉得相当于VS2003的程度吧,也支持调试。
3.1. TypeScript 不好用
3.2. Coffeescript 带测试
这一点来说,Dart、CoffeeScript、TypeScript和Fantom等许多后JavaScript语言的意义很大。Bredan Eich虽然嘴上不服软,但JavaScript和ES标准的演进在这些语言出现后明显加快,却是事实。
3.3. 参考
Google的飞镖有多犀利 - 试用Dart语言 - 小城故事 - 博客园.htm
众家评说谷歌新编程语言Dart - 51CTO.COM.htm
Dart是一个怎样的语言? - 一介码农 - 博客频道 - CSDN.NET.htm
Dart是一个怎样的语言? - 一介码农 - 博客频道 - CSDN.NET.htm
Dart 语言入门(一)——概述和基本语法 - hanguokai Jackie的日志 - 网易博客.htm (吗看完)
---佛拉了我nnot
Read finish
Dart语言惯用语——Dart中特有的代码味道(1) - 51CTO.COM.htm (骂完
初读谷歌自家的语言之作------Go语言和Dart语言 Golang中文社区(Go语言构建) Go语言中文网 Go语言学习园地.htm
Dart实战 (2) Dart语言特点 - 推酷.htm
[观点]众家评说谷歌新编程语言Dart-CSDN.NET.htm
Atitit.dart语言的特性 编译时js语言大总结的更多相关文章
- C语言中的编译时分配内存
1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等: 2.堆区(heap) --由程序员分配释放: 3.全局区或静态区 --存放全局变量和静态变量:程序结束时由系统释放 ...
- 关于JAVA,特点,历史,编译式的语言&解释式的语言,什么是java?JDK?DOS?一次编译到处运行原理。
1.java语言的特点: 简单的:面向对象的:跨平台(操作系统)的(一次编译,到处运行):高性能的: 2.类名的首字母大写,方法小写: 3.历史: java2(即java),为什么加个2呢?1998年 ...
- Atitit.eclise的ide特性-------abt 编译
Atitit.eclise的ide特性-------abt 编译 为什么要在Intellij IDEA中使用Eclipse编译器 如果你使用Intellij Idea,你应该考虑使用Eclipse编译 ...
- 将Microsoft Ajax Minifier集成到VS2013对JS、CSS进行编译时压缩
在网站发布中,一般要将js,css文件压缩减少体积,以减少在HTTP请求中的流量.将Microsoft Ajax Minifier集成到VS2013中就可以对JS.CSS进行编译时压缩. VS2013 ...
- cocos2d-html5的jsb模式下如何在编译时自动将js编译为jsc
cocos2d-html5是一个用JS来开发游戏的框架,通过javascript Binding的方式可以将游戏编译到手机上.这对前端开发人员来说非常方便,开发效率也比使用c++开发要快的多. jsb ...
- C# 9 新特性:代码生成器、编译时反射
前言 今天 .NET 官方博客宣布 C# 9 Source Generators 第一个预览版发布,这是一个用户已经喊了快 5 年特性,今天终于发布了. 简介 Source Generators 顾名 ...
- 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const
C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...
- 《Effective C#》读书笔记-1.C# 语言习惯-2.使用运行时常量(readonly)而不是编译时常量(const)
概念 编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识 ...
- Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面
Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面 1. 常用算法1 1.1. 目录2 1.2. 定义和用法编辑2 1.3 ...
随机推荐
- uva11019矩阵匹配器D316
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #inclu ...
- AC日记——[HNOI2008]水平可见直线 bzoj 1007
1007 思路: 维护一个下凸壳: 用单调栈来维护这玩意儿: 先将斜率排序: 然后判断栈顶元素和当前元素的交点x是否小于栈顶元素和栈顶上一个元素的交点x: 注意: 人神共愤的精度问题和输出空格问题: ...
- Ubunntu kylin下安装VmWare Tools(简洁方法)
1.在VM菜单栏单击虚拟机,选择安装Vmware tools(或者是重装Vmware Tools) 2.会弹出一个界面,就是光盘加载的那个界面,里面有个.******.gz文件 3.复制到桌面(你喜欢 ...
- Python与数据库[2] -> 关系对象映射/ORM[1] -> sqlalchemy 的基本使用示例
sqlalchemy 的基本使用示例 下面的例子中将利用sqlalchemy进行数据库的连接,通过orm方式利用类实例属性操作的方式对数据库进行相应操作,同时应用一些常用的函数. 完整代码如下: fr ...
- 线段树【SP1043】GSS1 - Can you answer these queries I
Description 给出了序列\(A_1,A_2,-,A_n\). \(a_i \leq 15007,1 \leq n \leq 50000\).查询定义如下: 查询\((x,y)=max{a_i ...
- 浅析 Node.js 单线程模型
总结笔记:对于每个用户请求,由主线程接收并存放于一个事件队列中(不做任何处理),当无请求发生时,即主线程空闲,主线程开始循环处理事件队列中的任务: 对于非阻塞JS程序: 1.若某事件需要I/O操作,则 ...
- Log4j记录日志到数据库
1.自定义输出消息 /** * 参数化消息 * @author Johnson.Lee * */ public interface ParameterizedMessage extends Seria ...
- 分享最新申请IDP账号的过程,包含duns申请的分享(2013年6月)
5月份接到公司要申请开发者账号的任务,就一直在各个论坛找申请的流程,但都是一些09年10年的比较旧的流程,现在都已经不适用了,好不容易找到2012年分享的流程吧,才发现申请过程中少了DUNS编码的步骤 ...
- centos下配置ssh使用密钥
查询了网上的一些教程,然后根据自己的实际操作,记录自己实际配置ssh密钥的过程: 首先在centos终端切换到要链接的用户,比如用户ssh 使用该用户生成密钥: ssh-keygen -t rsa 中 ...
- linux之openssh协议
SSH的全称是Secure Shell,简单说来ssh是一种安全的外壳协议,用于两个计算机间安全的远程登陆,说它安全,是因为ssh采用公钥加密的机制.最开始时用作远程管理的工具是telnet,这个协议 ...