Dart 语言知识点总结

发布于:2025-07-11 ⋅ 阅读:(17) ⋅ 点赞:(0)

Dart 语言知识点总结

Dart 是 Flutter 框架的编程语言,是一种面向对象的、强类型的、支持垃圾回收的语言。以下是 Dart 语言的核心知识点:

一、基础语法

1. 变量与常量

// 变量声明
var name = 'Alice';  // 类型推断
String name = 'Alice';  // 显式类型
dynamic dynamicVar = 'String';  // 动态类型

// 常量
final finalVar = '不可修改';  // 运行时常量
const constVar = '编译时常量';  // 编译时常量

2. 基本数据类型

// 数字类型
int age = 30;  // 整数
double height = 1.75;  // 浮点数
num number = 3.14;  // 可以是int或double

// 字符串
String str1 = '单引号';
String str2 = "双引号";
String multiLine = '''
  多行
  字符串
''';

// 布尔
bool isTrue = true;

// 列表(List)
List<int> numbers = [1, 2, 3];
var list = [1, 'two', 3.0];  // 动态类型列表

// 集合(Set)
var uniqueNumbers = {1, 2, 3};

// 映射(Map)
Map<String, int> scores = {'Alice': 90, 'Bob': 80};

二、运算符

1. 基本运算符

// 算术运算符
var sum = 1 + 2;
var mod = 5 % 2;  // 取模

// 关系运算符
bool isEqual = (1 == 1);

// 逻辑运算符
bool result = (true && false);

// 赋值运算符
var a = 1;
a ??= 2;  // 如果a为null则赋值

2. 特殊运算符

// 空安全运算符
String? nullableString;
var length = nullableString?.length ?? 0;  // 如果为null则返回0

// 级联运算符
var person = Person()
  ..name = 'Alice'
  ..age = 30;

// 展开运算符
var list1 = [1, 2];
var list2 = [0, ...list1];  // [0, 1, 2]

三、控制流程

1. 条件语句

// if-else
if (age > 18) {
  print('成年人');
} else {
  print('未成年人');
}

// switch-case
switch (grade) {
  case 'A':
    print('优秀');
    break;
  default:
    print('其他');
}

2. 循环语句

// for循环
for (var i = 0; i < 5; i++) {
  print(i);
}

// for-in循环
for (var number in numbers) {
  print(number);
}

// while循环
while (i < 5) {
  print(i);
  i++;
}

// do-while
do {
  print(i);
  i++;
} while (i < 5);

四、函数

1. 函数定义

// 基本函数
int add(int a, int b) {
  return a + b;
}

// 箭头函数(单行函数)
int add(int a, int b) => a + b;

// 可选参数
void printInfo(String name, [int? age]) {
  print('Name: $name, Age: ${age ?? '未知'}');
}

// 命名参数
void printInfo({required String name, int age = 18}) {
  print('Name: $name, Age: $age');
}

// 函数作为参数
void execute(Function callback) {
  callback();
}

2. 高阶函数

// 匿名函数
var list = [1, 2, 3];
list.forEach((item) {
  print(item);
});

// 闭包
Function makeAdder(int addBy) {
  return (int i) => addBy + i;
}
var add2 = makeAdder(2);
print(add2(3));  // 输出5

五、面向对象编程

1. 类与对象

class Person {
  // 实例变量
  String name;
  int age;
  
  // 构造函数
  Person(this.name, this.age);
  
  // 命名构造函数
  Person.guest() {
    name = 'Guest';
    age = 18;
  }
  
  // 方法
  void introduce() {
    print('我是$name,今年$age岁');
  }
}

// 使用
var person = Person('Alice', 30);
person.introduce();

2. 继承与多态

class Animal {
  void eat() {
    print('动物吃东西');
  }
}

class Dog extends Animal {
  
  void eat() {
    print('狗吃骨头');
  }
  
  void bark() {
    print('汪汪汪');
  }
}

3. 抽象类与接口

// 抽象类
abstract class Shape {
  double area();  // 抽象方法
}

class Circle implements Shape {
  double radius;
  
  Circle(this.radius);
  
  
  double area() => 3.14 * radius * radius;
}

4. Mixin

mixin Swim {
  void swim() {
    print('游泳');
  }
}

class Duck with Swim {
  // 现在Duck类有swim方法
}

六、异步编程

1. Future

Future<String> fetchUser() async {
  await Future.delayed(Duration(seconds: 1));
  return 'Alice';
}

void main() async {
  var user = await fetchUser();
  print(user);
  
  // 或者使用then
  fetchUser().then((user) => print(user));
}

2. Stream

Stream<int> countStream(int max) async* {
  for (int i = 0; i < max; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i;
  }
}

void main() async {
  await for (var num in countStream(5)) {
    print(num);
  }
}

七、高级特性

1. 泛型

class Box<T> {
  T value;
  
  Box(this.value);
  
  T getValue() => value;
}

void main() {
  var box = Box<String>('Hello');
  print(box.getValue());
}

2. 扩展方法

extension NumberParsing on String {
  int parseInt() {
    return int.parse(this);
  }
}

void main() {
  print('42'.parseInt());  // 输出42
}

3. 空安全

String? nullableString;  // 可空类型

void printLength(String? str) {
  if (str != null) {
    print(str.length);  // 通过null检查后自动提升为非空
  }
  
  print(str?.length ?? 0);  // 使用空安全运算符
}

4. Isolate(多线程)

import 'dart:isolate';

void isolateFunction(SendPort sendPort) {
  sendPort.send('来自Isolate的消息');
}

void main() async {
  var receivePort = ReceivePort();
  await Isolate.spawn(isolateFunction, receivePort.sendPort);
  
  receivePort.listen((message) {
    print('收到: $message');
    receivePort.close();
  });
}

八、常用库

1. 核心库

import 'dart:async';  // 异步编程
import 'dart:convert';  // JSON编解码
import 'dart:io';  // 文件I/O
import 'dart:math';  // 数学函数

2. 常用第三方库

import 'package:http/http.dart' as http;  // HTTP请求
import 'package:path/path.dart' as path;  // 路径处理

九、代码风格

1. 命名规范

  • 类名:大驼峰式(MyClass
  • 变量和方法名:小驼峰式(myVariable
  • 常量:全大写加下划线(MY_CONSTANT

2. 其他规范

  • 使用2个空格缩进
  • 每行不超过80个字符
  • 使用单引号表示字符串(除非字符串内有单引号)

十、与JavaScript对比

特性 Dart JavaScript
类型系统 强类型(支持类型推断) 弱类型
空安全 支持(非空默认) 不支持
异步编程 Future/async/await Promise/async/await
模块系统 基于包的导入系统 ES6模块
编译方式 可编译为原生代码或JavaScript 解释执行或JIT编译

Dart 的这些特性使其特别适合构建高性能、跨平台的应用程序,尤其是与 Flutter 框架配合使用时。


网站公告

今日签到

点亮在社区的每一天
去签到