Dart基础语法

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

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

变量声明与数据类型

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

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

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中的函数定义方式:

  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;  }}


标签:

相关文章

使用 Vue 3 + TypeScript + Pinia 的简单项目

以下是一个使用 Vue 3 + TypeScript + Pinia 的简单项目示例,我们将创建一个待办事项(Todo List)应用:1. 创建项目bash npm create&nbs...

websocket原理与机制

WebSocket是一种基于TCP的全双工通信协议,其核心原理与机制如下:一、核心原理‌协议定位‌WebSocket是独立于HTTP的协议,但通过HTTP/1.1的101 Switching Prot...

前端高级函数方法

前端高级函数方法是JavaScript编程中的核心概念,主要包括高阶函数、函数式编程工具以及各种实用封装方法高阶函数与函数式编程高阶函数是指接收函数作为参数或返回函数的函数常见的数组高阶函数包括map...

最新的ai 智能工程师需要什么技术

根据2026年AI产业最新需求,AI智能工程师的核心技术能力已从单一算法实现转向系统化工程能力,结合可信搜索结果,关键技能体系如下:一、‌系统架构与智能体开发‌‌智能体(Agent)系统编排‌掌握多智...

黑帽技术搜索引擎优化(SEO)

黑帽技术主要是指在搜索引擎优化(SEO)和网络安全领域中,通过作弊或非法手段快速获取利益的技术方法,其核心特征为违反规则、追求短期收益、采用欺骗性策略,并伴随高风险。以下从多个维度进行详细介绍:定义与...

前端有哪些高并发的框架

前端高并发处理主要通过以下技术方案实现:核心处理机制‌1. 请求合并与批量处理‌将多个接口请求合并为单个批量请求,减少网络往返次数使用 Promise.all 同时发起多个请求后端提供批量查询接口,前...