哥哥带你学Dart

概念:

Dart是什么?

具体Dart语法内容请走这边:https://www.jianshu.com/p/9e5f4c81cc7d

Dart是一门新的编程语言,如同JAVA、PHP一样,是为了解决编写应用程序中的一些实际问题而被造轮子发明出来的,而这个造轮子的人就是 Google。可能大家都熟悉Google 的另一个轮子Golang,而对Dart 听闻甚少,其实Dart 的出生跟Go很相近,只是由于它的星途比起Go来说有点坎坷,一直没有被广大开发者重视,相关的技术文章和应用比较匮乏,也就一直蒙尘在泛泛语言之中。

最初设计Dart,是Google的一帮程序员出于对JavaScript的不满,决定自己搞一个新语言用来替换JavaScript的,所以刚开始Dart也就是用来作为浏览器脚本运行在浏览器中的。为了推广Dart,Google利用自己的利器Chrome让它内置了DartVM的引擎。有了运行环境,加上用户群的可观数量,Dart最初也赢得了部分前端开发者的青睐。但是!!!,咳咳,这里要停顿一下,有转折——Google的这帮程序员万万没想到,看似并无大用的JavaScript居然因为NodeJS而焕发了第二春。此时移动互联网处于萌芽发展中,一个叫做NodeJS的开源项目借助这股移动互联的东风顺势而起,很快的烧遍了前端、烧到了后端,甚至烧到了手机应用和桌面应用,可以说是在编程界无孔不入,几乎成就了JS程序员口中的“凡是能被JS实现的,最终都要被JS实现”的愿景。前端的开发模式因此而改变,进入了一个新的天地。一些明星项目如React、React-Native、Vue等等如雨后春笋般迅速的崛起,一句话总结就是“Javascript很忙”。

Javascript很忙,程序员更忙,Dart就这样被慢慢地遗忘在角落。加上一直以来缺少顶级的项目使用,就算再是亲儿子,得不到JS开发者的心,Google也没什么办法,在2015年的时候,Google在Chrome中默默的移除了内置的Dart引擎。但是!!!这里又是但是,我喜欢在但是这里停顿一下,可以刷存在感2333——Google并没有放弃Dart,Google内部用Dart编写孵化了一个移动开发框架Sky,之后又被命名为Flutter,进入了移动跨平台开发的领域。如同Javascript,Dart在服务端和浏览器前端也在不遗余力的发展:服务端可以编写命令行程序,前端可以编译成Javascript运行在浏览器中。Google的另一个前端大杀器Angular也有对应的Dart版本。在Google的未来操作系统Fuchsia中,Dart被指定为官方的开发语言。

Dart的发展经历这么多,在历史的版本迭代中,已经不是当初设计的仅仅作为一个脚本运行在浏览器中了。船小好调头,也正是使用者较少,没有历史包袱,Dart的创造者们总结了Dart1.0版本的优缺点,决定打造一个运行更快、更加安全的强类型语言Dart2.0(在Dart2.0之前,Dart是一门弱类型语言。变更为强类型语言(注:官网原文是 Dart 2.0 has a sound type system )之后,Dart依旧可以使用类型推断等弱类型语言的特性)。Dart2.0版本目前正处于dev的状态,开发者可以使用Dart进行开发了,在不久之后就会发布正式的版本。

Dart 属于什么级别的语言

Dart 属于应用层编程语言。它有自己的 DartVM ,通常情况下运行在自己的VM上,但是在特定情况下他也可以编译成 Native Code 运行在硬件上(比如移动开发框架中,Flutter 会将代码编译成指定平台的 Native Code 以提高性能)。运行 Dart 编写的软件,既可以以明文代码的方式直接运行,还支持运行快照打包后的二进制,以提高启动速度、安全性和性能。你可以将它当做JAVA,亦可以当做 JavaScript;它比 JAVA 简单,易于理解,比JavaScript 更加规范,更加工程化。

Dart 的特性

单进程异步事件模型;

强类型,可以类型推断;

DartVM,具有极高的运行效率和优秀的代码运行优化,根据早前的基准测试,性能比肩 Java7 的JVM;

独特的隔离区( Isolate ),可以实现多线程;

面向对象编程,一切数据类型均派生自 Object ;

运算符重载,泛型支持;

强大的 Future 和 Streams 模型,可以简单实现高效的代码;

全平台语言,可以很好的胜任移动和前后端的开发。

在语法上,Dart 提供了很多便捷的操作,可以明显减少代码量。比如字符连接,可以直接"my name is $name, age is $age",无需+号拼接,也无需做类型转换。

使用 Dart 可以做什么

登录 Dart 的官网,你可以很清楚的看到 Dart 的创作者将 Dart 明确的分成了三个方向: 移动开发、DartVM 命令行程序(Server 端)、浏览器(前端)。

移动开发:这是 Dart 的杀手锏,也是众多 Dart 开发者开始接触学习 Dart 语言的原因。这个移动开发的核心是叫做 Flutter 的一个框架,它使用Dart + C++ + Skia 开发,对外提供了完全不依赖系统平台的 Widget 的能力,只通过自绘图形的方式工作,因此具有极其优秀的跨平台性。目前已经支持了 iOS、Android、Fuchsia。可以想象,你对应 Android 编写的一套软件可以不用修改一行代码的运行在 iOS 中,甚至是未来的 Fuchsia 中(尽管不知道这个系统最终能不能发布出来),是不是很有要马上去尝试的心动?

DartVM 命令行程序:就是写服务端的应用。比如写个 http 的服务,对应用提供 api ,都是及其简单的事情。和 JavaScript 一样,Dart 也是单进程异步事件的模型,所以它天生擅长高并发,而且它还提供了隔离区(isolate)的接口,可以实现多线程的操作,应对CPU密集型场景也不再话下。

浏览器:这个应该是 Dart 一开始造轮子的初衷,结局嘛,大家也都是知道,还是 JS 一统江湖。所以我只是建议大家在前端用用看,毕竟 Angular 也有官方的团队在支持 Dart 的版本,而且用 JS 写简单的应用还好,复杂的场景下那个代码真的是。。。。这个时候用 Dart 一定会给你一个完全不一样的体验。当然,可能开发效率上Dart会逊色一些,但维护成本上 Dart 绝对碾压 JS。(这里用“碾压”是一种夸张的手法,望知.)

总之,Dart 可以做的很多,涉及到编程的方方面面。但是当下我最看好的是移动开发的前景。Google 也是想鼓励开发者使用这个Flutter 来为以后的 Fuchsia 打基础,做生态,所以 Flutter 这块各位可以放心大胆的用起来。对。就是现在!!!

为什么要用 Dart

Dart 仅仅是你工作中解决问题的一种选择,我认为特定的场景中使用最适合的语言编程才是聪明人的做法,所以为什么要用 Dart 这取决于你。如果非要给个理由,那可能就是 Flutter 让你爱上的原因。

学习 Dart 的路线

不管你是 JavaScripter、JAVAer,还是PHPer、Pythoner,还是Goer、Ruster,都可以用极低的成本学习 Dart ,并在短时间内上手做东西。如果你是一个开发的入门者,那我建议你还是先学习一下国民语言C,无论你是不是要学习 Dart,你都应该先走学习 C 的路线。

学习 Dart 的路线,我只针对有编程经验的人来说,可以分成四步:基础语言语法 ;代码编写风格;基础类库的使用;开始你的编程。

我比较鼓励开发者在学习新语言的时候尽早的上手项目去使用它。只有你在编程中反复的使用,你才会理解继而更好的运用这个语言的优势。如果可能,还可以在一段时间后对代码进行重构,更能加深对该语言的组织和整体语言的进一步理解。

Dart 入门教程

1,所有能够使用变量引用的都是对象, 每个对象都是一个的实例。在 Dart 中 甚至连 数字、方法和 null 都是对象。所有的对象都继承于 Object 类

2,使用静态类型(例如前面示例中的 num ) 可以更清晰的表明你的意图,并且可以让静态分析工具来分析你的代码, 但这并不是牵制性的。(在调试代码的时候你可能注意到 没有指定类型的变量的类型为 dynamic。)

3,Dart 在运行之前会先解析你的代码。你可以通过使用 类型或者编译时常量来帮助 Dart 去捕获异常以及 让代码运行的更高效。

4,Dart 支持顶级方法 (例如 main()),同时还支持在类中定义函数。 (静态函数和实例函数)。 你还可以在方法中定义方法 (嵌套方法或者局部方法)。

5,同样,Dart 还支持顶级变量,以及 在类中定义变量(静态变量和实例变量)。 实例变量有时候被称之为域(Fields)或者属性(Properties),和 Java 不同的是,Dart 没有 public、 protected、 和 private 关键字。如果一个标识符以 (_) 开头,则该标识符 在库内是私有的。详情请参考: 库和可见性

6,标识符可以以字母或者 _ 下划线开头,后面可以是 其他字符和数字的组合。

7,有时候 表达式 expression 和 语句 statement 是有区别的,所以这种情况我们会分别指明每种情况。,7Dart 工具可以指出两种问题:警告和错误。 警告只是说你的代码可能有问题, 但是并不会阻止你的代码执行。 错误可以是编译时错误也可以是运行时错误。遇到编译时错误时,代码将 无法执行;运行时错误将会在运行代码的时候导致一个 异常

关键字:

带有上标2的都是用于异步相关特性的

对于只有一个表达式的方法,你可以选择 使用缩写语法来定义:
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

这个 => expr 语法是 { return expr; } 形式的缩写。=> 形式 有时候也称之为 胖箭头 语法。

注意: 在箭头 (=>) 和冒号 (;) 之间只能使用一个 表达式 – 不能使用 语句。 例如:你不能使用 if statement,但是可以 使用条件表达式 conditional expression

注意:没有初始化的变量自动获取一个默认值为 null。类型为数字的 变量如何没有初始化其值也是 null,不要忘记了 数字类型也是对象。

内置类型
R前缀可以创建原始字符串
只有true对象才被认为是TRUE,所有其他都是FALSE
在list字面量之前添加const关键字吗,可以定义一个不变的list对象
键值对的键只能出现一次
方法也是对象
把方法的参数放到【】中间就变成可选位置参数了
用=定义可选参数的默认值
入口函数返回值为void或者List<String>
可以把方法赋给变量和方法
Dart中最难理解的一点
作用域和java作用域类似
不管在何处被调用,该对象都可以访问其作用域内的变量


操作符
算术操作符
递增,递减等操作
相等相关
测试是否是同一个对象,使用iedntical方法
as类型转换
赋值操作
逻辑操作
移位
测试是否为空
级联操作符
forin遍历


switch case


断言只在检查模式下运行有效,生产模式下,断言不会执行
rethow可以把catch的问题再抛出来
实现一个或者多个mixins


区分不同库下的文件
延迟入库
async 和 await


方法的函数体不需要使用FuFutureAPI,Dart会自动在需要的时候创建
方法的函数体不需要使用Future API,Dart会自动创建
Dart多线程
元数据


数字操作库
radix
限定小数位数
字符串和正则
从字符串中提取数据
大小写转换
制定字符串空格
RegExp正则表达式
比较对象
Future


dynamic用法
final和const
Dart函数如果没有显式声明返回值,会默认为dynamic
一个表达式,可以简写
future使用方式
whencomplete
wait
使用future消除callback
await必须出现在async函数内部
stream用于多次读取数据的异步任务
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 在上一篇教程中说了Flutter使用Dart语言开发。本篇教程整体介绍一下Dart语言,注意,本篇不会介绍Dart...
    lazydu阅读 5,070评论 3 13
  • Dart是什么? Dart是一门新的编程语言,如同JAVA、PHP一样,是为了解决编写应用程序中的一些实际问题而被...
    爱码士平头哥阅读 27,788评论 13 41
  • Dart是什么? Dart是一门新的编程语言,如同JAVA、PHP一样,是为了解决编写应用程序中的一些实际问题而...
    浩之然阅读 794评论 0 1
  • 标签(空格分隔): Flutter Dart Flutter简介 Flutter 是 Google推出并开源的移动...
    黄昭鸿阅读 477评论 0 1
  • Flutter是什么? Flutter是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开...
    木水Code阅读 683评论 0 1