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

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

评论区