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
语句配合on
或catch
(两者也可同时使用)关键字来捕获一个异常
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();
}
}