今天来学if和循环还有函数,这个和其他语言的差不多
if条件语句
这个老熟人了,这里不过多描述了
int score = 85;
if (score >= 90) {
print("优秀");
} else if (score >= 60) {
print("及格");
} else {
print("不及格");
}
三元运算符
这个和其他语言的一样,本质上是if的简写版本,就是条件为true就是左边的,反之则是右边的
语法格式:
条件(布尔值) ? 表达式1 : 表达式2
void main() {
int age = 18;
String result = age >= 18 ? "成年人" : "未成年人";
print(result);
}
switch case语句
void main() {
String fruit = "apple";
switch (fruit) {
case "apple":
print("苹果");
break;
case "banana":
print("香蕉");
break;
default:
print("未知水果");
}
}
这个和C#和Java还有C++,C里的很像,但是大同小异,比如有的有break,有的没有,不过我们的dart语言里的default的最后一个没有break
对了,和java还有C#一样,这个也是分现代写法和旧写法的
void main() {
String fruit = "apple";
String result = switch (fruit) {
"apple" => "苹果",
"banana" => "香蕉",
_ => "未知水果"
};
print(result);
}
这个是新的写法,省略了case的和default关键字
循环
循环就不用多说了,和C#还有java里的没有区别
while循环
void main() {
int i = 0;
while (i < 5) {
print(i);
i++;
}
}
do while循环
void main() {
int i = 10;
do {
print(i);
i++;
} while (i < 5);
}
for 循环
void main() {
for (int i = 0; i < 5; i++) {
print(i);
}
}
for in循环
void main() {
List<String> fruits = ["apple", "banana", "orange"];
for (var fruit in fruits) {
print(fruit);
}
}
break和continue关键字
break(直接退出循环),continue(跳过本次)
void main() {
List<String> fruits = ["apple", "banana", "orange"];
for (var i = 0; i < fruits.length; i++) {
if (fruits[i] == "banana") {
continue;
}
print(fruits[i]);
}
}
void main() {
List<String> fruits = ["apple", "banana", "orange"];
for (var i = 0; i < fruits.length; i++) {
if (fruits[i] == "banana") {
break;
}
print(fruits[i]);
}
}
函数
函数这个都熟悉,dart的函数和java这些差不多,只是某些地方有区别
参数通常分为有参和无参,这里我就从有参和无参来分类吧
无参
普通无参函数
void hello() {
print("Hello");
}
返回值无参函数
int getNumber() {
return 10;
}
箭头写法(Lambda表达式)
但是只允许一条表达式,即只有return这一句
int getNumber() => 10;
调用规则
规则:
- 函数名 +
()
有参
普通有参函数
这个也称为必选位置参数
特点
- 必须传
- 按顺序传(位置固定)
- 最基础、性能最好(无额外处理)
- 返回值类型可省略,Dart会自动推断类型为dynamic
int add(int a, int b) {
return a + b;
}
//也可以写成箭头函数(Lambda表达式)
int add(int a, int b) => a + b;
void main() {
print(add(2, 3));
}
Function 类型参数
可以把函数作为参数
语法
void foo(Function fn) {
fn();
}
✅ 更规范写法(推荐)
void foo(void Function() fn) {
fn();
}
✅ 带参数
void foo(int Function(int, int) calc) {
print(calc(2, 3));
}
✅ 特点
- 强类型函数签名 ⭐
- Dart 比 JS 严谨
可选参数(可以不传)
位置可选参数 []
语法(用 [])
- 规则:可选位置参数必须位于必传参数后面 , 采用中括号包裹
- 语法:函数名(String a , [String?b,…..]),传递时按照顺序传递
void foo(int a, [int? b, int? c]) {
print('$a, $b, $c');
}
调用
foo(1); // b=null, c=null
foo(1, 2); // b=2, c=null
foo(1, 2, 3); // b=2, c=3
✅ 默认值写法
void foo(int a, [int b = 10]) {
print('$a, $b');
}
✅ 特点
- 可以不传
- 必须按顺序传
- 不能跳过中间参数 ❗
- 通常需要
?(可空)
❌ 错误示例
foo(1, , 3); // ❌ 不允许跳过
我们可以自己练习一下带返回值的写法
void main() {
print(add(1, 2));
print(comment("我"));
print(comment("我", "喜欢"));
}
int add(int a, int b) {
return a + b;
}
String comment(String a, [String? b, String? c = "明日方舟终末地"]) {
return a + (b ?? "") + (c ?? "");
}

命名参数 {}
语法(用 {})
- 特点:可选命名参数必须位于必传参数后面,采用大括号包裹
- 语法:函数名(String a , {String?b , …}), 传递时按照
参数名:值的方式进行传递,无需关注顺序
void foo({int? a, int? b}) {
print('$a, $b');
}
✅ 调用
foo(a: 1, b: 2);
foo(b: 2); // 可以只传一个
✅ 必填命名参数(required)
void foo({required int a, int? b}) {
print('$a, $b');
}
foo(a: 1); // ✅
foo(); // ❌ 报错
✅ 默认值
void foo({int a = 10, int b = 20}) {
print('$a, $b');
}
✅ 特点
- 按名字传,不看顺序
- 可以只传一部分
- 可读性极高 ⭐⭐⭐
- Flutter 里用得最多
✅ 适用场景
👉 参数多 / 可选多 / UI配置
例如:
Container(
width: 100,
height: 200,
color: Colors.red,
)
练习一下
void main() {
playerData("JohnDoe");
playerData("JaneSmith", age: 25);
playerData("Alice", level: "intermediate");
}
void playerData(String username, {int? age = 18, String? level = "beginner"}) {
print("Username: $username");
print("Age: $age");
print("Level: $level");
print('-------------------------');
}
this 参数
在类里非常常见👇
✅ 语法
class Person {
String name;
int age;
Person({required this.name, required this.age});
}
✅ 特点
- 自动赋值
- 常和命名参数一起用
- Flutter 代码里遍地都是
混合参数
同样的,以上两种是可以混用的,但是有顺序要求(先位置,后命名)
正确顺序(必须记住)
必选位置参数
→ 可选位置参数 []
→ 命名参数 {}
✅ 示例
void foo(int a, [int? b], {int? c}) {
print('$a, $b, $c');
}
❌ 错误写法
void foo({int? a}, int b) {} // ❌ 命名参数不能在前
匿名函数
匿名函数这个在C#和java里也很常见,而且和JavaScript差不多,都可以用Function来定义函数类型
没有名字的函数
() {
print("hello");
}
这就是一个匿名函数。
但它本身没用,必须赋值或传递:
var f = () {
print("hello");
};
f(); // 调用
在 Dart 里:函数也是对象,类型是 Function
Function f = () {
print("hello");
};
但更推荐写成:
void Function() f = () {
print("hello");
};
因为:
Function太泛(不安全)void Function()有明确参数和返回值
带参数的匿名函数
var f = (int a, int b) {
return a + b;
};
或者箭头写法:
var f = (int a, int b) => a + b;
这个东西实际用途比较广
回调函数
void run(void Function() fn) {
fn();
}
run(() {
print("执行了");
});
集合操作
- forEach
var list = [1, 2, 3];
list.forEach((item) {
print(item);
});
- map(转换)
var list = [1, 2, 3];
var newList = list.map((item) {
return item * 2;
}).toList();
箭头简化:
var newList = list.map((item) => item * 2).toList();
- where(过滤)
var list = [1, 2, 3, 4];
var result = list.where((item) {
return item % 2 == 0;
});
返回函数(闭包)
Function makeAdder(int x) {
return (int y) {
return x + y;
};
}
var add5 = makeAdder(5);
print(add5(3)); // 8
临时逻辑(立即执行函数)
(() {
print("立即执行");
})();
总之就这些功能
- 回调函数(按钮、事件)
- 集合操作(map / where / forEach)
- 异步处理(Future / async)
- 返回函数(闭包)
- 策略模式(动态逻辑)
- 立即执行函数(IIFE)


评论区