Flutter初体验 - dart

什么是 dart

刚开始接触我经常打成 drat或者datr,这玩意到底是什么?

这个是 Google 七年前(2011年)发布发布新网页编程语言Dart,是一种基于类编程语言(class-based programming language),在所有浏览器都能够有高性能的运行效率,2011年10月10日Google宣布推出Dart的预览版。其官网地址是:www.dartlang.org,目前已经是Dart2版本了

Google在dartlang.org公布Dart开发工具及源代码示例等内容,同时也提供相关虚拟机平台。
目前Dart有两种方式运行:一是在本地的虚拟机上,二是将Dart代码转成Javascript,直接在Javascript引擎上运行

ECMA已经成立技术委员会TC52展开标准化Dart的工作,同时由于Dart能够被编译成标准的JavaScript,它能够有效地在所有现代浏览器上运行。2014年7月,ECMA的第107次全体大会通过了第一版Dart语言规范。

总结下来就是 dart 是计算机编程语言,是由谷歌公司开发的网络编程语言。就类似常见的 Java、C、Swift一样。并且Dart是面向对象的、类定义的、单继承的语言。它的语法类似C语言,可以转译为JavaScript,支持接口(interfaces)、混入(mixins)、抽象类(abstract classes)、具体化泛型(reified generics)、可选类型(optional typing)和sound type system。

看到这个答案的时候我就是这个表情


本来你只想简单的做个 Android 开发者的,但是你不进步就被社会淘汰,比如现在 Kotlin,weex,react native 加上 Android 本身的生态混乱,各种适配已经让你在风中凌乱,现在又来一个 dart,能给调活路吗?

但是生活不还是得继续吗,学会了dart 到时候又可以拿出去跟小伙伴们吹牛逼了,所以继续学下去。

Dart语言的特性

Flutter 是 Google 推出的移动 UI 框架,野心路人皆知,但是为什么会选择 Dart 呢?
可以参考一下 这篇文章

Why Flutter Uses Dart ?
为什么 Flutter 会选择 Dart ?

里面也提到了一部分特性

  • Dart 是 AOT(Ahead Of Time)编译的,编译成快速、可预测的本地代码,使 Flutter 几乎都可以使用 Dart 编写。这不仅使 Flutter 变得更快,而且几乎所有的东西(包括所有的小部件)都可以定制。
  • Dart 也可以 JIT(Just In Time)编译,开发周期异常快,工作流颠覆常规(包括 Flutter 流行的亚秒级有状态热重载)。
  • Dart 可以更轻松地创建以 60fps 运行的流畅动画和转场。Dart 可以在没有锁的情况下进行对象分配和垃圾回收。就像 JavaScript 一样,Dart 避免了抢占式调度和共享内存(因而也不需要锁)。由于 Flutter 应用程序被编译为本地代码,因此它们不需要在领域之间建立缓慢的桥梁(例如,JavaScript 到本地代码)。它的启动速度也快得多。
  • Dart 使 Flutter 不需要单独的声明式布局语言,如 JSX 或 XML,或单独的可视化界面构建器,因为 Dart 的声明式编程布局易于阅读和可视化。所有的布局使用一种语言,聚集在一处,Flutter 很容易提供高级工具,使布局更简单。
  • 开发人员发现 Dart 特别容易学习,因为它具有静态和动态语言用户都熟悉的特性。

其实说白了就是,可以快速学习(但我不信)、有灵活的 UI、能达到原生的性能、还可以热重载。

听起来很厉害的样子,那不管怎么样还是要学一下的。毕竟Google 早就看 Java 不爽了,说不定 Android 15.0就不打算支持了咋整。虽然你可能不会做 Android 做到那个时候。

Dart 语法

由于你可能是做 Android 的所以应该是对 Java 比较熟悉(即使不是做 Android 的应该对 Java 也比较熟悉的我相信你),只需要注意下面强调的一些语法特性就行,其他的都比较类似,不需要全部都关注,到时候写的时候可以现学现用。

  • 方法
  printHello({String name}) {  print("hello, my name is $name");
  }

按着 Java 的这种调用方式会直接运行不起


改成这样就行。

   printHello(name:"简简单单敲代码");
  printHello({String name}) {  print("hello, my name is $name");
  }

当然还有不一样的地方,现在方法定义成两个参数,之前那样调用还是可以的。

 printHello({String name, String age}) {  print("hello, my name is $name ,my age is $age");
  }
   printHello(name:"简简单单敲代码");

最后再写个例子你就懂了


    printHello(name:"简简单单敲代码");
    printHello(age:18);
    printHello(age:18,name:"简简单单敲代码");

    printHello({String name, String age}) { 
         print("hello, my name is $name ,my age is $age");
     }

看看输出很有意思,跟 Java区别还是挺大的。

  • 首先入参需要指定参数名
  • 传参可以少
  • 顺序可以不一致
  • 所有函数都返回一个值,如果没有指定返回值,则 默认把语句 return null; 作为函数的最后一个语句执行。
  • 可以把方法当做参数调用另一个方法(羡慕 swift 很久了,也被 iOS 同学鄙视很久了)。
  • 方法也可以赋值给一个变量
  • 比Java爽

是不是就可以不需要方法重载了?

  • 在Dart的构造中可以没有方法体
  • 关键字
  • public、private、protected 没有了
  • 如果一个标识符以 (_) 开头,则该标识符 在库内是私有的,
  • 可以不使用new关键字创建对象
  • Dart中变量初始值为null,即使是int类型也是null。
  • 基本类型
  • 没有float
  • int和double是num的子类
  • String也可以使用单引号
  • Dart需要一个布尔值的时候,只有true对象才被认为true,其他都是false。
  • 操作符
    这个比较多随便举几个例子
  • isis!当对象是相应类型时返回 true/false
  • ??=操作符,如果前操作数是null类型,则将后操作数赋值给前操作数;如果前操作数不等于```null``,则保持前操作数的值发生变化。
  • 使用?? 表达式。
    expr1 ?? expr2
    如果expr1的值为non-null,则返回结果为expr1;反之则返回expr2。
  • ..级联操作符(额。。。)可以连续的操作同一对象,达到减少中间变量,减少代码的目的。
    好像很厉害的样子。

当然还有很多自己看文档吧。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,650评论 2 59
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,043评论 25 707
  • 每次回到老厝的时候,都有一种时光穿梭的感觉。残损的砖墙,陈旧的木门,灰尘满满的故物,还有那口微波荡漾的老井,都能让...
    氧气是个地铁阅读 915评论 0 0
  • 文/张江健 随着科技的快速发展,技术变革带给了人们全新的生活方式及生活体验。很多年前曾经有不少人畅想过这样的生活:...
    张江健阅读 584评论 0 0
  • 心似双丝网,中有千千结。恋爱了,心里有千百种纠结。不知如何定夺。这个人吧,优点很多,特别有趣,阅历很丰富,人比我大...
    黄河故道边的一个教书匠阅读 177评论 0 3