Dart语法要点汇总

栏目: IOS · 发布时间: 5年前

内容简介:[In][Out]这是一个创建并初始化变量的例子

[In]

// main为Dart程序入口
void main() {
  // 调用printNumber方法
  var number = 58;
  printNumber(number);
}

// 方法返回类型缺省时,默认返回类型为dynamic
printNumber(int number) {
  // 1. 字符串用单/双引号均可
  // 2. 字符串中支持${}表达式, 单字符变量时可简化为$
  print("The number is $number.");
}

[Out]

The number is 58.
  • Dart单行注释用 // ,多行注释用 /**/ (同Java)
  • var 是一种不需要指定类型的声明方式
  • int 是一种数据类型,对应的还有 StringListbool 类型
  • 字符串的标识用单、双引号均可(同 Python 、JS)
  • 字符串中支持 ${number} 表达式, 单字符变量时可简化为 $number (同JS的`${number}`)

当你在学习Dart语言时,你需要清楚这概念:

  • 所有的东西都是一个对象,每个对象都是一个class的实例,即使是数字、函数、 null 都是对象,并且所有的对象都集成自Object类。
  • 尽管Dart语言是一种强类型语言,但你在类型声明时仍然可以不指定类型,因为Dart可以自动进行类型推断。在上面的代码中, number 变量的类型就被推断为 int ,当你并不想显式地声明类型时,你可以使用置顶的类型 dynamic 来标识。
  • Dart语言同样支持泛型,如 List<int>List<dynamic> (同Java)。
  • Dart语言支持顶级方法(即不与类绑定的方法,如上的 main 方法),以及绑定类和实例的方法(分别对应静态方法和实例方法),而且还支持方法嵌套(同Python、JS)。
  • Java 不同的是,Dart语言并不支持 publishprotectedprivate 这些关键字,它是通过前缀 _ 来标识为私有域的(同Python),

变量

这是一个创建并初始化变量的例子

var name = 'Bob';

name 变量类型被推断为 String ,你也能更改为制定的类型。如果一个变量的类型并不限制于单一类型,你也可以使用 dynamicObject 进行声明,如:

dynamic name = 'Bob';

同样也可以选择制定的声明方式

String name = 'Bob';

但根据Dart推荐的编码风格,在局部变量中使用 var 要更优于制定的类型声明。

默认值

Dart中声明时如果未初始化,会被自动初始化为 null

int lineCount;
assert(lineCount == null);

注: assert 只在开发环境有效,在实际的生产环境无效

final与const

finalconst 标识该变量只能被赋值一次,区别在于 final 是运行时赋值, const 是编译时赋值。

final String nickname = 'Jack';
// final修饰时, 可省略类型声明
final name = 'Jack';

const 不仅可以用来声明变量,还能用来创建常量值,如:

// 此时不能在对列表a进行更新操作
var a = const [1, 2];

内置类型

数字型

包含 intdouble ,不包含

float

常用的类型转换

// String -> int
var a = int.parse('1');
assert(a == 1);

// String -> double
var b = double.parse('1.1');
assert(b == 1.1);

// int -> String
String c = 1.toString();
assert(c == '1');

// double -> String
String d = 3.14159.toStringAsFixed(2);
assert(d == '3.14');

字符串

  • 单引号、双引号均可

  • 字符串拼接时,换行可省略加号,如

    var a = '123'
        '456';
    print(a);
    // Out: 123456
    
  • 字符串可以用索引,但不支持负值索引(区分于Python),如

    var a = 'Jack';
    print(a[1]);
    // Out: a
    

列表

在Dart语言中,数组即列表

[In]

void main() {
  // 初始化
  var list = ['a', 'b', 'c'];
  // 增
  list.add('d');
  // 删
  list.remove('b');
  // 改
  list[1] = 'cc';
  // 查
  var last = list[list.length - 1];
  print('list is $list');
  print('last is $last');
}

[Out]

list is [a, cc, d]
last is d

字典

[In]

void main() {
  var map = {'a': 1, 'b': 2};
  // 增
  map['c'] = 3;
  // 删
  map.remove('a');
  // 改
  map['b'] = 22;
  // 查
  var cValue = map['c'];
  print('map is $map');
  print('cValue is $cValue');
}

[Out]

map is {b: 22, c: 3}
cValue is 3

函数

Dart是一门完全面向对象的语言,即使它的函数也是一个对象,并且有自己的类型—— Function 。这就意味着函数可以被赋值为一个变量,或者作为一个参数在其他函数之间传递。

对于只包含一个表达式的方法体,你也可以使用 => 的简写形式,如:

void say() {
    print('123');
}

// 该写法与以上有同样效果
void say2() => print('123');

可选参数

Dart的可选参数分为 命名可选参数位置可选参数 两种(两者之间互斥,即不能同时使用)。

命名可选参数

[In]

void main() {
  say(age: 27);
}

void say({String name='Jack', int age=20}) {
  print('$name\'s age is $age.');
}

[Out]

Jack's age is 27.

位置可选参数

[In]

void main() {
  say('Tom', 27, 'Love game.');
}

void say(String name, int age, [String remark]) {
  print('$name\'s age is $age.${remark??''}');
}

[Out]

Tom's age is 27.Love game.

默认参数值

参数可用 = 声明默认值,默认值只能是编译时常量。

注: 命名可选参数 的默认参数值可使用 : 指定,但对于 位置可选参数 不支持,推荐统一使用 = 的默认参数指定方式

匿名函数

[In]

void main() {
  var list = ['Android', 'iOS', 'WindowPhone'];
  list.forEach((item) {
    print(item);
  });
}

[Out]

Android
iOS
WindowPhone

特殊操作符

  • is <=> Java的 instanceof

  • a?.b <=> a == null ? null : a.b

  • a??b <=> a == null ? b : a

  • a ??= b <=> a = a == null ? b : a

  • a as String <=> Java的 (String) a

  • .. 级别操作符

    var button = querySelector('#confirm');
    button.text = 'Confirm';
    button.classes.add('important');
    button.onClick.listen((e) => window.alert('Confirmed!'));
    
    // 该写法等价上述写法
    querySelector('#confirm') // Get an object.
      ..text = 'Confirm' // Use its members.
      ..classes.add('important')
      ..onClick.listen((e) => window.alert('Confirmed!'));
    

异常

// 抛异常
throw FormatException('Expected at least 1 section');
throw 'Out of llamas!';

// 捕获异常
try {
  breedMoreLlamas();
} on OutOfLlamasException {
  // A specific exception
  buyMoreLlamas();
} on Exception catch (e) {
  // Anything else that is an exception
  print('Unknown exception: $e');
} catch (e) {
  // No specified type, handles all
  print('Something really unknown: $e');
}

try {
  // ···
} on Exception catch (e) {
  print('Exception details:\n $e');
} catch (e, s) {
  print('Exception details:\n $e');
  // 第二个参数s是一个错误堆栈实例
  print('Stack trace:\n $s');
}

try {
  dynamic foo = true;
  print(foo++); // Runtime error
} catch (e) {
  print('misbehave() partially handled ${e.runtimeType}.');
  // 关键字rethrow重新抛出异常
  rethrow; // Allow callers to see the exception. 
}

重载操作符

class Vector {
  final int x, y;

  Vector(this.x, this.y);

  Vector operator +(Vector v) => Vector(x + v.x, y + v.y);
  Vector operator -(Vector v) => Vector(x - v.x, y - v.y);

  // Operator == and hashCode not shown. For details, see note below.
  // ···
}

void main() {
  final v = Vector(2, 3);
  final w = Vector(2, 2);

  assert(v + w == Vector(4, 5));
  assert(v - w == Vector(0, 1));
}

生成器

  • sync* + yield 返回 Iterable 对象
  • async* + yield 返回 Stream 对象
Iterable<int> naturalsTo(int n) sync* {
  int k = 0;
  while (k < n) yield k++;
}

Stream<int> asynchronousNaturalsTo(int n) async* {
  int k = 0;
  while (k < n) yield k++;
}

如果生成器返回值是可迭代的,亦可使用 yield* 来提高性能,如:

Iterable<int> naturalsDownFrom(int n) sync* {
  if (n > 0) {
    yield n;
    yield* naturalsDownFrom(n - 1);
  }
}

可调用的类

给类定义 call 方法能使得当前类是Callable的(同Python)

class WannabeFunction {
  call(String a, String b, String c) => '$a $b $c!';
}

main() {
  var wf = new WannabeFunction();
  var out = wf("Hi","there,","gang");
  print('$out');
}

以上所述就是小编给大家介绍的《Dart语法要点汇总》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Book of CSS3

The Book of CSS3

Peter Gasston / No Starch Press / 2011-5-13 / USD 34.95

CSS3 is the technology behind most of the eye-catching visuals on the Web today, but the official documentation can be dry and hard to follow. Luckily, The Book of CSS3 distills the heady technical la......一起来看看 《The Book of CSS3》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码