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 框架配合使用时。