美文网首页
Dart 语法(一)

Dart 语法(一)

作者: 一个栗 | 来源:发表于2021-06-24 13:13 被阅读0次

Hello World

void main() {
  print('Hello, World!');
}

执行结果如下:
flutter: Hello, World!

变量

Dart 代码是类型安全的,但也支持类型判断,大多数变量是不需要显示指定类型的

var name = 'Voyager I';
  var year = 1977;
  var antennaDiameter = 3.7;
  var flybyObjects = ['Jupiter','Saturn','Uranus','Neptune'];
  var image = {
    'tag':['saturn'],
    'url':'//path/to/saturn.jpg'
  };

流程控制语句

if (year >= 2001) {
  print('21st century');
} else if (year >= 1901) {
  print('20th century');
}

for (var object in flybyObjects) {
  print(object);
}

for (int month = 1; month <= 12; month++) {
  print(month);
}

while (year < 2016) {
  year += 1;
}

函数

int fibonacci(int n) {
  if (n == 0 || n == 1) return n;
  return fibonacci(n - 1) + fibonacci(n - 2);
}

var result = fibonacci(20);

=>(箭头)语法用于仅包含一条语句的函数。该语法在匿名函数作为函数参数情况中 非常有用。

flybyObjects.where((name) => name.contains('turn')).forEach(print);

下面是一个关于类的示例,这个类包含三个属性,两个构造函数,以及一个方法。 其中一个属性不能被直接赋值,因此它被定义为一个 getter 方法(而不是变量)。

class Spacecraft {
  String name;
  DateTime launchDate;

  // 构造函数,使用语法糖设置成员变量。
  Spacecraft(this.name, this.launchDate) {
    // 这里编写初始化代码。
  }

  // 命名构造函数,最终调用默认构造函数。
  Spacecraft.unlaunched(String name) : this(name, null);

  int get launchYear =>
      launchDate?.year; // read-only non-final 属性

  // 方法。
  void describe() {
    print('Spacecraft: $name');
    if (launchDate != null) {
      int years =
          DateTime.now().difference(launchDate).inDays ~/
              365;
      print('Launched: $launchYear ($years years ago)');
    } else {
      print('Unlaunched');
    }
  }
}

类的使用

var voyager = Spacecraft('Voyager I', DateTime(1977, 9, 5));
voyager.describe();

var voyager3 = Spacecraft.unlaunched('Voyager III');
voyager3.describe();

扩展类(继承)

Dart 支持单继承。

class Orbiter extends Spacecraft {
  num altitude;
  Orbiter(String name, DateTime launchDate, this.altitude)
      : super(name, launchDate);
}

Mixin

Mixin 是一种在多个类层次结构中重用代码的方法。下面的类可以作为一个 mixin :

class Piloted {
  int astronauts = 1;
  void describeCrew() {
    print('Number of astronauts: $astronauts');
  }
}

将 mixin 的功能添加到一个类中,只需要继承这个类并 with 这个 mixin 。

class PilotedCraft extends Spacecraft with Piloted {
  // ···
}

现在 飞行器PilotedCraft 有了 astronauts 字段以及 describeCrew() 方法。

接口和抽象类

Dart 没有 interface 关键字。相反,所有的类都隐式定义了一个接口,因此,任意类都可以作为接口被实现。

class MockSpaceship implements Spacecraft {
  // ···
}

创建一个抽象类,这个类可以被一个具体的类去扩展(或实现)。抽象类可以包含抽象方法(只声明未实现)。

abstract class Describable {
  void describe();

  void describeWithEmphasis() {
    print('=========');
    describe();
    print('=========');
  }
}

任意一个扩展了 Describable 的具体类都拥有 describeWithEmphasis() 方法,这个方法调用了具体类中实现的 describe() 。

相关文章

  • dart语法7-泛型

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法8-库

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法10-生成器

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法9-异步

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法11

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法2-内置类型

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法1

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法3-函数

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法4-操作符

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法6-类

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

网友评论

      本文标题:Dart 语法(一)

      本文链接:https://www.haomeiwen.com/subject/vcewyltx.html