文档章节

A Tour of the Dart Language(译文):一Dart基础

obaniu
 obaniu
发布于 2018/10/11 12:01
字数 2015
阅读 278
收藏 5

当下Dart中文资料很少。以其啃人家半吊子的二、三手资料,不如爬蜗牛自己试着处男译一次技术文档。本系列根据dart官网最新《A Tour of the Dart Language》翻译凑合着看吧。注意:译注、个人乱评的都是这种斜体段落出现

Dart基础

以下dart代码展示了dart的大概功能:

// 定义函数
printInteger(int aNumber) {
  print('The number is $aNumber.'); // 答应到控制台
}

// 这里是app开始执行的地方
main() {
  var number = 42; // 声明且初始化变量
  printInteger(number); // 调用函数.
}

下面这个程序用途适用于所有Dart app:

// This is a comment.

单行注释。Dart同时支持多行注释和文档注释。更多查阅Comments

int

一种类型。其他内置类型是String、List和bool.

42

数字。数字是一种编译期常量。

print()

简便的方法输出显示。

'...'(or "...")

字符串

$variableName (or ${expression})

字符串插值。查阅Strings

语法跟kotlin、scala(f"xxxx$var")是相似的

main()

特殊、必须的顶级函数,在app启动时执行。查阅The main() function.

var

不用类型定义变量的方式.

注意:这个站点的代码遵循Dart style guide约定

重要概念

当您在学习Dart语言时,牢记这些概念和事实:

  • 变量里存储的都是对象,对象是某个class的一个实例。数字、函数、null也是对象。所有对象均继承自Object

一切皆为对象,java还有int、long、float、double等原生类型,C#、kotlin、scala则是彻底的皆为对象

  • 虽然Dart是强类型语言,但类型声明是可选的因为Dart可以推导类型。在上面的代码中。number变量被推断出是int类型。若不想明确指明预期类型,使用特殊类型dynamic

类型推导成熟的编译技术,现在的语言基本是标配的功能。

  • Dart支持泛型,像List<int>(一个整数列表)或List<dynamic>(任何类型对象的列表)。
  • Dart支持顶级函数(如main()),以及绑定到类或对象的函数(分别是静态和实例方法)。还可以在函数中创建函数(嵌套或本地函数)
  • 同样的,Dart支持顶级变量,以及绑定到类或对象的变量(静态和实例变量)。实例变量通常称为域(fields)或属性(properties)。

顶级函数实际跟kotlin是一样的。

  • 与java不同,Dart没有pulicprotectedprivate关键字。如果标识符号始于下划线(_),则是library私有的。更多详情查阅Libraries and visibility

跟go一样尿性约定俗成没有可见空间关键字,而且可见空间控制非常鸡肋逼您二选一!

  • 标识符以字母或者下划线开头,紧随任意字符数字组合。

大部分语言都是这么套路

  • Dart具有表达式(有返回值)和语句(无返回值)。栗子:条件表达式 condition ? expr1 : expr2返回expr1或expr2。相反if-else语句则没有返回值。一个语句可以包含多个表达式,但是一个表达式不能直接包含多个语句。

别想多了Dart跟kotlin、scala不一样:if-else、while是表达式而不是语句。

  • Dart的工具可以报告两种类型的问题:warningerrors。warning表明代码可能无法正常工作,但它不阻止程序运行。编译期errors阻止执行;运行时errors将引发运行异常。

关键字

下表是Dart特别对待的词。

abstract<sup>2</sup>dynamic<sup>2</sup>implements<sup>2</sup>show<sup>1</sup>
as<sup>2</sup>elseimport<sup>2</sup>static 2
assertenuminsuper
async<sup>1</sup>export<sup>2</sup>interface<sup>2</sup>switch
await 3external<sup>2</sup>issync<sup>1</sup>
breakextendslibrary<sup>2</sup>this
casefactory<sup>2</sup>mixin<sup>2</sup>throw
catchfalsenewtrue
classfinalnulltry
constfinallyon<sup>1</sup>typedef<sup>2</sup>
continueforoperator<sup>2</sup>var
covariant<sup>2</sup>Function<sup>2</sup>part<sup>2</sup>void
defaultget<sup>2</sup>rethrowwhile
deferred<sup>2</sup>hide<sup>1</sup>returnwith
doifset<sup>2</sup>yield<sup>3</sup>

奶奶的oschina不支持markdown<sup></sup>角标

避免使用表里的词用于标识符。不过,在必要条件下可以使用角标标记的词用作标识符:

  • 角标1是上下文关键词。意味着只作用在特殊地方。在其他地方可以是有效的标识符。
  • 角标2是内置标识符。为了简化将 JavaScript 代码移植到 Dart,这些关键字在大多数地方有效,但不能用作类或类型名, 也不能作为导入前缀。
  • 角标3是新加的。Dart1.0发布后添加的异步支持相关的有限保留字。在任何函数体标记为asyncasync*sync*中,不能使用awaityield

在表中的其他词是保留字,不能用作标识符。

变量

下面是一个创建变量和初始化例子:

var name = 'Bob';

变量存储引用。名为name的变量包含一个String对象是值为"Bob"对象的引用。 变量name被推断为String类型,也可以指定它的类型。若想要一个对象不限制为某一类型,请遵循设计准则,声明对象为dynamic类型。

dynamic name = 'Bob';

另一种方式是显式声明要推断的类型:

String name = 'Bob';

注意: 这里也遵循 style guide recommendation 本地变量使用var而不是声明类型。

缺省值

未初始化的变量有一个初始值为null。即使是数字类型的变量初始值也是null,因为数字跟任何Dart其他类型一样都是对象。

数字初始值是null,不是0或0.0!

int lineCount;
assert(lineCount == null);

注意:在生产代码中忽略assert()调用。在设计时, assert(condition)若condition不为true将引发异常。详情查阅Assert.

final和const

如果从不打算更改变量,使用finalconst,而不是var或类型。一个final变量仅能设置一次;一个const变量是编译期常量(const是隐式的final变量),一个顶级final类变量在第一次使用时被初始化。

注意:实例变量可以是final的但不能使用const。final实例变量必须在构造函数之前初始化-定义时初始化,由构造函数参数初始化,或在构造函数的初始化列表

原文很拗口.Note: Instance variables can be final but not const. Final instance variables must be initialized before the constructor body starts — at the variable declaration, by a constructor parameter, or in the constructor’s initializer list.

下面是创建并设置final变量例子:

final name = 'Bob'; //无类型声明
final String nickname = 'Bobby';

不能修改final变量值:

name = 'Alice'; // Error: a final variable can only be set once.

const变量用于编译期常量。如果是类级const变量,标记其为static const。在声明变量的时候 将值设置为编译期常量, 如数字或字符串、常量或恒定数字的算术运算:

const bar = 1000000; // 气压单位 (dynes/cm2)
const double atm = 1.01325 * bar; // 标准大气.

const关键字不仅用于常量声明。也可用于创建常量值,以及声明创建常量值的构造函数。任何变量都可以具有常量值。

var foo = const [];
final bar = const [];
const baz = []; // 等价于 `const []`

如上面的baz,在const声明初始化表达式处可以忽略const。详情查阅DON’T use const redundantly。 非final、非const变量可以修改,即使用到了const值

foo = [1, 2, 3]; // Was const []

不能修改const变量的值:

baz = [42]; // Error: Constant variables can't be assigned a value.

更多使用const创建常量值的内容,查阅ListsMapsClasses

© 著作权归作者所有

共有 人打赏支持
obaniu
粉丝 37
博文 83
码字总数 39241
作品 0
广州
高级程序员
私信 提问
《Dart 语言导览》发布

旨在改善 web 应用开发过程的 Dart 团队本周发布了《Dart 语言导览》(A Tour of the Dart Language),详细介绍了 Dart 语言的各项功能,是快速入门的极佳读物,也是 Dart 语言用户的便捷参...

红薯
2012/04/23
3.4K
9
Dart的语法详解系列篇(四)-- 泛型、异步、库等有关详解

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/a4a9c89b85ca 转载请标明出处: https://www.jianshu.com/p/a4a9c89b85ca 本文出自 AWeiLoveAndroid的博客...

AWeiLoveAndroid
2018/12/30
0
0
Flutter原理与美团的实践

Flutter是Google开发的一套全新的跨平台、开源UI框架,支持iOS、Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件。自从2017年5月发布第一个版本以来,目前Flutter已经发布了近6...

美团技术团队
2018/08/10
0
0
ECMA 接受 Dart 语言规范

Ecma 宣布接受 Dart 编程语言规范 —— Dart language specification. 新标准是 Ecma-408 standard. Dart是一种基于类的可选类型化编程语言,设计用于创建Web应用程序。 Google称,Dart的设计...

chai2010
2014/07/05
2.3K
10
Google Dart 问世:再见,JavaScript

“Google发布了Dart——一个为简化Web应用开发而设计的新语言——的一个早期版本。不过,尽管它是对 JavaScript 的进化版,Dart 要被接受仍然困难重重。 Google aims Dart at "the Visual Ba...

xyxzfj
2011/10/11
0
1

没有更多内容

加载失败,请刷新页面

加载更多

数据库技术-Mysql主从复制与数据备份

数据库技术-Mysql 主从复制的原理: MySQL中数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”...

须臾之余
昨天
12
0
Git远程仓库——GitHub的使用(一)

Git远程仓库——GitHub的使用(一) 一 、 Git远程仓库 由于你的本地仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要一下设置: 步骤一、 创建SSH key 在用户主目录下,看看有没有.ss...

lwenhao
昨天
2
0
SpringBoot 整合

springBoot 整合模板引擎 SpringBoot 整合Mybatis SpringBoot 整合redis SpringBoot 整合定时任务 SpringBoot 整合拦截器...

细节探索者
昨天
0
0
第二个JAVA应用

第二个JAVA应用 方法一:配置文件: # cd /usr/local/tomcat/conf/# vim server.xml</Host> <Host name="www.wangzb.cc" appBase="/data/wwwroot/www.wangzb.cc" //引用所......

wzb88
昨天
0
0
2019年阿里Java面试必问:JVM与性能优化+Redis+设计模式+分布式

前言 一年之计在于春 金三银四已经要到来,2019的新的开始,作为一个开发人员,你是否面上了自己理想的公司,薪资达到心中理想的高度? 面试:如果不准备充分的面试,完全是浪费时间,更是对...

火力全開
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部