Dart基础语法

admin5天前it知识40

Dart是一种面向对象的编程语言,广泛应用于Flutter跨平台开发。

本文将详细介绍Dart的基础语法,包括变量声明、数据类型、函数、类、控制流、空安全、异步编程等核心概念。

变量声明与数据类型

Dart提供了多种变量声明方式:

  1. 显式类型声明‌:明确指定变量类型

String name = 'Alice';
int age = 25;

       类型推断(var)‌:由编译器推断变量类型

var city = 'London'; // 推断为String
var 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); // true
int numValue = int.parse(value);
String strValue = numValue.toString();


函数定义与使用

Dart中的函数定义方式:

  1. 基本函数‌:

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支持标准的控制流语句:

  1. 条件语句‌:

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引入的空安全特性:

  1. 可空与不可空类型‌:

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使用Futureasync/await处理异步操作:

  1. 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主要集合类型:

  1. 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

  1. 扩展方法‌:

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新特性

  1. 记录类型(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支持同步和异步生成器:

  1. ‌*同步生成器(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;
  }
}


标签: 分享IT知识

相关文章

职场人如何写季度总结

作为职场人,写季度总结是一个展示自己工作成果和总结经验教训的机会。以下是一些撰写季度总结的建议:明确总结的目的:季度总结的目的是为了向上级领导汇报本季度的工作进展、成果和教训,以及下季度的工作计划。因...

灵动:生活中的艺术与智慧

在这个充满变化的世界里,灵动是一种独特的魅力,它让我们的生活更加丰富多彩,充满了可能性和创意。灵动不仅是一种艺术,更是一种智慧,它存在于我们的思维、情感和行动中。首先,灵动是一种艺术。在我们的生活中,...

享受工作:找到事业与生活的平衡点

工作是我们日常生活中不可或缺的一部分。我们花费大量的时间和精力在工作中,因此,如何享受工作并找到事业与生活的平衡点就显得尤为重要。在这篇文章中,我们将探讨如何享受工作,让事业和生活愉快并行。首先,了解...

关于夏天

在一个炎热的午后,阳光穿过树叶的缝隙,洒在公园的草地上。空气中弥漫着夏日的气息,那是炎热中夹杂着淡淡的花香,还有草地的清新味道。在这个充满活力的季节,夏天以其独特的方式展示着它的魅力。夏天是一个充满色...

拖延症重度患者怎样自救

对于拖延症的重度患者,自救的关键在于以下几点:识别并克服拖延的借口。拖延常常因为我们害怕、不确定、不想不舒服而找到各种借口。我们必须识破这些借口,并对自己说:“如果我拖延,后果将不堪设想。”制定清晰的...

个人学习计划

学习计划是一个帮助你提高学习效率和使用时间的有效工具。以下是一个可能的学习计划:目标设定。 在开始学习之前,明确你的学习目标和目的地,这有助于你制定实际可行的计划。分解任务。 将大...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。