Dart语法简记

星期日, 2月 9, 2025 | 2分钟阅读 | 更新于 星期日, 2月 9, 2025

Dart语言学习笔记

概述

main函数

每个应用都有一个main函数,和其他语言一样

变量

dart是类型安全的语言,但仍支持隐式变量,即使用var,由于其支持类型推断,因此大多数变量的类型会由它们的初始化内容决定

流程控制

dart的流程控制和其他语言没太大分别,都支持for,if,while

函数

dart的函数建议为每个参数和返回值都指定类型,dart还支持=>

flybyObjects.where((name) => name.contains('turn')).forEach(print);
  • flybyObjects:这是一个集合(例如List、Set等),其中包含了一系列的对象。
  • where((name) => name.contains(’turn’)):这是一个过滤操作。where方法会遍历flybyObjects中的每一个元素,并使用提供的匿名函数进行判断。匿名函数的作用是检查每个元素是否包含字符串 ’turn’。
  • forEach(print):这是一个遍历操作。forEach方法会遍历过滤后的集合,并对每个元素执行传入的函数。在这里,传入的函数是print,所以每个元素都会被打印出来。

注释

一般使用//,也支持/* */这样的注释

导入操作

使用import关键字导入包

使用class,可以构建类

枚举

使用enum

enum PlanetType { terrestrial, gas, ice }

扩展类(继承)

dart支持单继承

class Orbiter extends Spacecraft {
  double altitude;

  Orbiter(super.name, DateTime super.launchDate, this.altitude);
}

Mixins

Mixin 是一种在多个类层次结构中重用代码的方法。 允许你将多个类中的方法组合到一个类中,而无需使用继承。Mixin 可以看作是一个包含方法和属性的类,但不能被实例化。通过使用 with 关键字,你可以将一个或多个 mixins 添加到类中。

// 定义一个基类
class Animal {
  void breathe() {
    print('Breathing');
  }
}

// 定义一个Mixin
mixin Walkable {
  void walk() {
    print('Walking');
  }
}

// 定义另一个Mixin
mixin Runnable {
  void run() {
    print('Running');
  }
}

// 定义一个类,继承基类并使用Mixins
class Dog extends Animal with Walkable, Runnable {
  void bark() {
    print('Barking');
  }
}

接口和抽象类

dart中所有类都被隐式定义成了接口,因此所有的类都可以作为接口被实现

// 定义一个接口(实际上是一个普通的类)
class Flyer {
  void fly();
}

// 定义另一个接口
class Swimmer {
  void swim();
}

// 实现Flyer和Swimmer接口
class Duck implements Flyer, Swimmer {
  @override
  void fly() {
    print('Duck is flying.');
  }

  @override
  void swim() {
    print('Duck is swimming.');
  }
}

抽象类使用 abstract 关键字定义。抽象类可以包含抽象方法(没有方法体的方法)以及具体实现的方法。抽象类不能被实例化,必须通过继承来使用。

// 定义一个抽象类
abstract class Animal {
  void breathe(); // 抽象方法

  void sleep() {
    // 具体方法
    print('Sleeping');
  }
}

// 定义一个具体类继承抽象类
class Dog extends Animal {
  @override
  void breathe() {
    print('Dog is breathing.');
  }

  void bark() {
    print('Dog is barking.');
  }
}

异步

使用 async 和 await 关键字可以让你避免回调地狱

const oneSecond = Duration(seconds: 1);
// ···
Future<void> printWithDelay(String message) async {
  await Future.delayed(oneSecond);
  print(message);
}

异常

使用throw抛出异常,使用try语句配合oncatch(两者也可同时使用)关键字来捕获一个异常

if (astronauts == 0) {
  throw StateError('No astronauts.');
}
import 'dart:io';

Future<void> describeFlybyObjects(List<String> flybyObjects) async {
  try {
    // 遍历flybyObjects列表中的每个对象
    for (final object in flybyObjects) {
      // 异步读取与对象名称对应的文本文件内容
      var description = await File('$object.txt').readAsString();
      // 打印文件内容
      print(description);
    }
  } on IOException catch (e) {
    // 捕获并处理IO异常
    print('Could not describe object: $e');
  } finally {
    // 无论是否发生异常,清空flybyObjects列表
    flybyObjects.clear();
  }
}

© 2024 - 2025 Aiser's Blog

欢迎来到我的博客!

Me

我的名字是Aiser,这是我的博客