Dart基础语法
Dart是一种面向对象的编程语言,广泛应用于Flutter跨平台开发。
本文将详细介绍Dart的基础语法,包括变量声明、数据类型、函数、类、控制流、空安全、异步编程等核心概念。
变量声明与数据类型
Dart提供了多种变量声明方式:
显式类型声明:明确指定变量类型
String name = 'Alice';int age = 25;
类型推断(var):由编译器推断变量类型
var city = 'London'; // 推断为Stringvar price = 9.99; // 推断为double
 动态类型(dynamic):可赋值为任意类型
dynamic value = 'Hello';value = 100; // 合法
       常量声明:
final PI = 3.14; // 运行时常量const gravity = 9.8; // 编译时常量
Dart的基本数据类型包括:
int:整数double:浮点数bool:布尔值(true/false)String:字符串List:列表/数组Map:键值对集合
类型检查与转换:
var value = '123';print(value is String); // trueint numValue = int.parse(value);String strValue = numValue.toString();
函数定义与使用
Dart中的函数定义方式:
基本函数:
int add(int a, int b) {  return a + b;}箭头函数(单表达式函数):
bool isAdult(int age) => age >= 18;
      可选参数:
void printInfo(String name, [int? age]) {  print('Name: $name, Age: ${age ?? 'unknown'}');}     命名参数:
void greet({String name = 'Guest', int times = 1}) {  for (int i = 0; i < times; i++) {    print('Hello, $name!');  }}匿名函数:
var list = [1, 2, 3];list.forEach((item) => print(item));
类与对象
Dart是面向对象语言,所有类都继承自Object:
class Person {  // 实例变量  String name;  int age;    // 构造函数  Person(this.name, this.age);    // 命名构造函数  Person.guest() : this('Guest', 18);    // 方法  void introduce() {    print('I am $name, $age years old.');  }}void main() {  var p1 = Person('Alice', 25);  var p2 = Person.guest();  p1.introduce();}Dart支持继承和混入(Mixin):
mixin Logger {  void log(String message) => print(message);}class User with Logger {  String name;  User(this.name);}void main() {  var user = User('Bob');  user.log('User created'); // 来自Logger mixin}控制流和循环结构
Dart支持标准的控制流语句:
条件语句:
if (age >= 18) {  print('Adult');} else if (age >= 13) {  print('Teenager');} else {  print('Child');}      switch语句:
switch (grade) {  case 'A':    print('Excellent');    break;  case 'B':    print('Good');    break;  default:    print('Fail');}     循环结构:
// for循环for (int i = 0; i < 5; i++) {  print(i);}// while循环while (condition) {  // ...}// do-while循环do {  // ...} while (condition);// for-in循环var list = [1, 2, 3];for (var item in list) {  print(item);}空安全机制
Dart 2.12引入的空安全特性:
可空与不可空类型:
String name = 'Dart'; // 不可为空String? nickname = null; // 可为空
      空断言操作符(!):
String? nullableName = getName();String name = nullableName!; // 断言不为null
      late关键字:
late String description;void main() {  description = 'Initialized later';  print(description);}空安全机制将运行时的空指针异常提前到开发阶段检测,提高了代码安全性
异步编程(async/await)
Dart使用Future和async/await处理异步操作:
Future基本用法:
Future<String> fetchData() {  return Future.delayed(Duration(seconds: 2), () => 'Data loaded');}void main() {  fetchData().then((data) {    print(data);  }).catchError((error) {    print('Error: $error');  });} async/await语法:
Future<void> main() async {  try {    String data = await fetchData();    print(data);  } catch (e) {    print('Error: $e');  }}Stream处理连续事件:
Stream<int> countStream(int max) async* {  for (int i = 1; i <= max; i++) {    await Future.delayed(Duration(seconds: 1));    yield i;  }}void main() async {  await for (var num in countStream(5)) {    print(num);  }}集合类型操作
Dart主要集合类型:
List(列表):
var numbers = [1, 2, 3];numbers.add(4);numbers.insert(0, 0);numbers.remove(3);print(numbers[1]); // 访问元素
      Set(集合):
var ingredients = {'gold', 'titanium', 'xenon'};ingredients.add('silver');ingredients.remove('gold');print(ingredients.contains('titanium')); Map(映射):
var scores = {'Math': 90, 'English': 85};scores['Science'] = 95;print(scores['Math']);scores.remove('English');集合操作支持展开运算符:
var list1 = [1, 2];var list2 = [0, ...list1, 3]; // [0, 1, 2, 3]
扩展方法与Mixin
扩展方法:
extension StringExtension on String {  String reverse() {    return split('').reversed.join('');  }}void main() {  print('hello'.reverse()); // olleh}      Mixin:
mixin Musical {  void playMusic() {    print('Playing music');  }}class Performer with Musical {  // ...}Dart 3.0新特性
记录类型(Records):
var record = ('first', a: 2, b: true, 'last');print(record.$1); // 'first'print(record.a);  // 2      模式匹配(Patterns):
var point = (x: 10, y: 20);if (point case (x: var x, y: var y)) {  print('Point: ($x, $y)');}switch表达式增强:
var number = 1;var result = switch (number) {  0 => 'zero',  1 => 'one',  _ => 'other'};运算符重载
Dart允许重载运算符:
class Vector {  final int x, y;  Vector(this.x, this.y);    Vector operator +(Vector other) {    return Vector(x + other.x, y + other.y);  }}void main() {  var v1 = Vector(2, 3);  var v2 = Vector(4, 5);  var result = v1 + v2; // Vector(6, 8)}可重载的运算符包括算术运算符、比较运算符等
异常处理
Dart使用try-catch处理异常:
try {  // 可能抛出异常的代码  var result = 100 ~/ 0;} on IntegerDivisionByZeroException {  // 特定异常处理  print('Cannot divide by zero');} catch (e) {  // 其他所有异常  print('Error: $e');} finally {  // 无论是否发生异常都会执行  print('Done');}生成器函数
Dart支持同步和异步生成器:
*同步生成器(sync)**:
Iterable<int> countTo(int n) sync* {  for (int i = 1; i <= n; i++) {    yield i;  }}     *异步生成器(async)**:
Stream<int> countStream(int n) async* {  for (int i = 1; i <= n; i++) {    await Future.delayed(Duration(seconds: 1));    yield i;  }}