一、基本数据类型
-
数值类型
-
Dart支持整型(int)和浮点型(double)数值。例如:
int age = 25; double pi = 3.14159;
-
-
布尔类型
-
Boolean类型只有两个值:true和false。
bool isDone = false;
-
-
字符串
-
Dart中的字符串可以使用单引号或双引号包裹,支持多行字符串和模板字符串。
String name = 'Alice'; var greeting = 'Hello, $name!';
-
-
空值
- Dart有一个特殊的类型
null
,表示没有值或者缺失值。
- Dart有一个特殊的类型
二、变量与常量
-
变量声明
-
使用var关键字声明动态类型变量,或者明确指定类型。
var count = 10; // 动态类型 int score = 100; // 明确指定为int类型
-
-
常量声明
-
使用const或final关键字定义不可变值。
const PI = 3.14; // 构造时即计算并存储,可用于编译时常量优化 final immutableValue = 'Immutable'; // 初始化后值不可更改
-
三、集合类型
-
列表(Lists)
-
列表是有序的、可变的数据集合。
List<int> numbers = [1, 2, 3]; // 定义一个整数类型的列表
-
-
映射(Maps)
-
映射是键值对的集合。
Map<String, dynamic> person = {'name': 'Bob', 'age': 30};
-
四、控制流语句
-
条件判断
-
使用
if
和else
结构进行条件分支。if (score > 90) { print('优秀'); } else { print('继续努力'); }
-
-
循环
-
Dart提供了for循环(包括普通循环和遍历集合)、while和do…while循环。
for (int i = 0; i < 5; i++) { print(i); } while (condition) { // 循环体 }
-
五、函数
-
定义函数
-
函数可以通过fun关键字声明,并可选择性地指定返回类型。
int add(int a, int b) { return a + b; }
-
-
匿名函数(Lambdas)
-
Dart也支持简洁的匿名函数表达式。
var sum = (int a, int b) => a + b;
-
六、类与对象
-
定义类
-
类在Dart中用于创建面向对象的程序模型。
class Person { String name; int age; Person(this.name, this.age); void introduce() { print('My name is $name and I am $age years old.'); } } var alice = Person('Alice', 25); alice.introduce();
-
七、集合操作
-
列表操作
-
Dart提供了丰富的列表操作方法,如添加、删除、查询和迭代等。
Dart
List<String> hobbies = ['阅读', '运动']; hobbies.add('编程'); // 添加元素 hobbies.removeAt(0); // 删除指定索引的元素 hobbies.contains('编程'); // 判断是否包含某元素 for (var hobby in hobbies) { print(hobby); }
-
-
映射操作
-
映射(map)也有相应的增删改查操作,还可以使用forEach进行遍历。
Dart
Map<String, String> skills = {'编程': 'Dart', '设计': 'UI/UX'}; skills['数据分析'] = 'SQL'; // 添加键值对 skills.remove('设计'); // 删除键值对 skills.containsKey('编程'); // 判断是否存在某键 skills.forEach((key, value) => print('$key: $value'));
-
八、控制流进阶
-
switch语句
-
Dart中的switch语句可以用于替代多个if…else if…else条件判断。
switch (grade) { case 'A': print('优秀'); break; case 'B': case 'C': print('良好'); break; default: print('继续努力'); }
-
-
断言
-
使用assert可以在开发阶段检查条件是否满足,如果不满足则抛出 AssertionError。
assert(age >= 0, '年龄不能为负数');
-
-
循环进阶
-
for-in循环可用于遍历集合或映射。
for (var item in collection) { print(item); } for (var key in map.keys) { print('$key: ${map[key]}'); }
-
九、异步编程
-
Future与async/await
-
Dart中,异步操作通常返回一个 Future 对象,配合 async 和 await 关键字实现异步代码的简洁书写。
Future<void> fetchData() async { var response = await http.get(Uri.parse('https://example.com/data')); print(response.body); }
-
十、函数进阶
-
可选参数与默认值
-
Dart允许函数具有可选参数,并可以设置默认值。
void greet(String name, {String greeting = 'Hello'}) { print('$greeting, $name!'); } greet('Alice'); // 输出:Hello, Alice! greet('Bob', greeting: 'Hi'); // 输出:Hi, Bob!
-
-
命名参数
-
使用命名参数可以使函数调用更清晰易读,尤其在参数较多或可选参数较多的情况下。(这一点在flutter开发中很明显)
void showCoordinates({required double x, required double y}) { print('($x, $y)'); } showCoordinates(x: 10, y: 20);
-
十一、类继承与接口
-
类继承
-
Dart支持单继承,子类通过extends关键字继承父类的属性和方法。
class Animal { void eat() { print('吃东西'); } } class Dog extends Animal { void bark() { print('汪汪叫'); } } Dog dog = Dog(); dog.eat(); // 输出:吃东西 dog.bark(); // 输出:汪汪叫
-
-
接口
-
接口(Interfaces)规定了类应该具有的方法和属性,通过implements关键字实现。
abstract class CanFly { void fly(); } class Bird implements CanFly { void fly() { print('飞翔'); } } Bird bird = Bird(); bird.fly(); // 输出:飞翔
-
十二、Mixins与泛型
-
Mixins
-
Mixins是一种在不改变类继承结构的情况下复用代码的方式。
mixin Printable { void printInfo() { print('基本信息'); } } class Person with Printable { String name; } Person person = Person(); person.printInfo(); // 输出:基本信息
-
-
泛型
-
泛型允许在定义类、函数或方法时使用占位类型,以便在使用时指定具体类型。
class Box<T> { T content; Box(this.content); } Box<int> integerBox = Box(10); Box<String> stringBox = Box('Hello');
-
至此,我们已概览了Dart语言的基础语法,包括变量、数据类型、控制流、函数、类、异步编程、继承、接口、Mixins和泛型等核心内容。
对于已经有Java和Kotlin基础的同学来说,Dart非常容易上手,因为Dart也是一门面向对象的语言,并且具有很多与Java和Kotlin相似的特性,比如类、接口、继承、封装、异常处理、泛型、函数等等。然而,Dart也有一些独特之处,比如我们上面提到的Mixins以及函数的命名参数,Flutter正是利用命名参数这种特性来实现它的的声明式UI。
所以对于想要学习Flutter的同学,花一点时间学习一下上面的基础语法就足够了,后面通过对flutter的学习