787 字
4 分钟
Flutter学习之旅二:Dart语法
新建文件夹然后用VSCode打开,再随便新建个Dart文件,比如 hello.dart ,开始学习 Dart 语法吧!
TIP不要忘了在 VSCode 安装 Flutter 和 Dart 插件哦~
Dart需要分号,JavaScript习惯了不写分号的话需要注意一下。先来个 Hello World 起手:
void main() {
print('Hello,World!');
}基础语法
变量和数据类型
Dart 是强类型语言,但支持类型推导。var 表示局部变量,const 编译时常量,final 运行时常量。显式声明类型:
| 类型 | 类别 | 说明 | 示例 |
|---|---|---|---|
int | 数值 | 存储整数 | int age = 25; |
double | 数值 | 存储浮点数 | double price = 10.5; |
num | 数值 | int 和 double 的父类 | num x = 3.5; |
String | 文本 | 存储字符串 | String name = "Flutter"; |
bool | 布尔型 | 存储 true 或 false | bool isActive = true; |
List<T> | 集合 | 数组/列表 | List<int> nums = [1, 2, 3]; |
Set<T> | 集合 | 无重复元素的集合 | Set<String> names = {"A", "B"}; |
Map<K,V> | 集合 | 键值对存储 | Map<String, int> scores = {"张三": 90}; |
dynamic | 特殊 | 允许存储任意类型 | dynamic value = 123; |
Object | 特殊 | Dart 中所有对象的基类 | Object obj = "字符串"; |
void | 特殊 | 表示无返回值 | void sayHello() {} |
Never | 特殊 | 表示永不返回的函数 | Never error() { throw Exception(); } |
T? | 空安全 | 允许变量为 null | String? nullableStr = null; |
var name = '张三';
int age = 20;
const pi = 3.14;
final now = DateTime.now();
List<String> nameList = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];
Object image = {
'tag': ['cute','cat'],
'url': 'https://dart.cn/language/variables/',
};运算符
支持常见的运算符,同时也有一些Dart特色的:
// 可空类型
int? a;
// 空值合并运算符,若 a 为 null,则 b = 0
int b = a ?? 0;
// 安全调用,若 a 为 null 则返回 null
print(a?.toString());控制流
if/else、for、while 的写法和 JavaScript 一致。
void main() {
for (var i = 0; i < 5; i++) {
print(i);
}
}函数
函数定义
// 常规定义
int add(int a, int b) {
return a + b;
}
// 函数体只有一行可用箭头函数
int times(int a, int b) => a * b;
// 可选参数
void greet(String name, {String? title}) {
print('Hello,${title ?? '你好'} ${name}');
}使用函数
void main() {
greet('张三', title: 'Mr.');
add(1, 2);
times(3, 4);
print("3+5=${add(3, 5)}");
// 匿名函数,常用于函数回调,与JavaScript的箭头函数类似
var list = [1, 2, 3];
list.forEach((item) => print(item));
}类和对象
类定义
class Person {
String name;
int age;
Person(this.name, this.age);
void sayHello() {
print('Hello,I am $name.');
}
}类继承
class Student extends Person {
String school;
Student(String name, int age, this.school) : super(name, age);
@override
void sayHello() {
print('Hello,I am $name from $school');
}
}使用
void main() {
Person p = Person('Alice', 30);
p.sayHello();
Student s = Student('Bob', 20, 'Harvard.');
s.sayHello();
}异步编程
Future
Future<String> fetchData() {
return Future.delayed(Duration(seconds: 2), () => '数据');
}async/await
void main() async {
print('开始');
String data = await fetchData();
print(data);
print('结束');
}集合
List
类似 JavaScript 的数组:
void main() {
var list = [1, 2, 3];
list.add(4); // 添加元素
list.forEach(print); // 逐个输出数组
}Map
类似 JavaScript 的对象:
void main() {
var map = {'name': '张三', 'age': 20};
print(map['name']); // 输出:张三
}Set
类似 JavaScript 的Set,用于存储唯一值:
void main() {
var set = {1, 2, 3};
set.add(2); // 重复元素不会添加
print(set); //输出:{1, 2, 3}
}异常处理
try/catch 用于捕获和处理异常:
void main() {
try {
int result = 10 ~/ 0;
} catch (e) {
print('错误:$e'); // 输出:错误:IntegerDivisionByZeroException
} finally {
print('finally');
}
}Flutter学习之旅二:Dart语法
https://blog.timemoss.com/posts/e2e1192d/