Dart2基础

Dart2

  Flutter1.0已经发布,而作为Flutter的编写语言Dart2相比较Dart1也有了非常大的改进,在Flutter发布预览版的时候试着使用Flutter编写了一些demo,但是因为写惯了java,使用Dart2的时候还是有一些别扭。目前貌似还没有Dart2的书籍出版(有的话可以告诉我),所以准备根据 Dart2官方文档 从零开始学习。

Dart2重要概念
  • 你可以放到一个变量中的所有内容都是对象,每一个对象都是一个类的实例。数字,函数以及 null 都是对象。所有的对象都继承自 Object 类。
  • 尽管Dart是强类型的,但是类型注释是可选的,因为Dart可以推导出类型。如果要明确说明不需要任何类型,请使用特殊类型dynamic
  • Dart支持泛型类型,如List(整数列表),List(任何类型的对象列表).
  • Dart支持顶级函数(例如main()),以及绑定到类或者对象的函数(分别是静态和实例方法)。你还可以在函数内创建函数(嵌套函数或本地函数)。
  • 类似的Dart支持顶级变量以及绑定到类或者对象的变量(分别是静态或者实例变量)。实例变量有时也被称为字段或者属性。
  • 不同于Java,Dart没有publicprotectedprivate关键字。如果一个标识符以下划线(—)开始,那么它对其库是私有的。
  • 标识符以字符或者下划线开头,后跟字符和数字的任意组合。
  • Dart有两种表达式(具有运行时值)和语句(不具有运行时值)。例如:条件表达式condition ? expr1 : expr2 的值为expr1expr2,将其与if-else语句相比较,该语句没有任何值。语句通常包含一个或者多个表达式,但是一个表达式不能直接包含一个语句。
  • Dart工具可以报告两种问题:警告(warning)和错误(errors).警告(warning)仅仅暗示你的代码可能不会运行,但是它们不会阻止你的程序的运行。错误(Errors)可以使编译时或运行时的。一个编译时错误会阻止代码的运行;而一个运行时错误导致代码在执行时引发异常。
注释
  1. 单行注释,使用//开头
// TODO: refactor into an AbstractLlamaGreetingFactory?
  1. 多行注释
void main() {
  /*
   * This is a lot of work. Consider raising chickens.

  Llama larry = Llama();
  larry.feed();
  larry.exercise();
  larry.clean();
   */
}
  1. 文档注释
  • 第一种方式以 /// 开头
/// Feeds your llama [Food].
///
/// The typical llama eats one bale of hay per week.
void feed(Food food) {
  // ...
}
  • 第二种方式以 /** 开头
/// Feeds your llama [Food].
///
/// The typical llama eats one bale of hay per week.
void feed(Food food) {
 /**
}

注:在文档注释中可以使用括号[],()来链接到 类,方法,字段,全局变量,函数以及参数

变量

  如下可以创建一个变量并且初始化它:

var name = 'Bob';

  变量存储的是引用。一个名为 name 的变量包含对字符串对象的引用,其值为“Bob”。
  name变量的类型被推断为字符串,但是你可以通过明确指定其类型来改变它的类型。如果一个对象不限于单一类型,可以指定为 Objectdynamic类型。

dynamic name = 'Bob';

  另一种选择是显式声明可以推断出的类型:

String name = 'Bob';
默认值

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

int lineCount;
assert(lineCount == null);
Final 和 const

  如果你从不打算更改变量,请使用final 或 const,而不是var或者类型。一个 final 变量仅仅可以被设置一次;一个 const 变量是一个编译时常量。const 变量是隐式 final 变量final修饰的顶级变量或者类变量在第一次使用时被初始化。
  例如:

final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';

  你不能改变一个final 变量的值:

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

  对于一个要成为编译时常量的变量请使用 const 修饰。如果一个const变量是类级别的,将他标记为 static const。在定义变量的地方,将值设置为编译时常量,例如数字或字符串字面量,const变量或者对常数进行算术运算的结果。

const bar = 1000000; // Unit of pressure (dynes/cm2)
const double atm = 1.01325 * bar; // Standard atmosphere

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

var foo = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`

你可以从const声明的初始化表达式中省略const,例如上面的 baz 变量。
你可以改变一个非 final,const变量的值,即使它曾经有一个 const 值

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

你不能改变一个 const 变量的值:

baz = [42]; // Error: Constant variables can't be assigned a value.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值