第五章:方法 1. 方法定义 1.1 概述 1.2 方法特性 1.3 代码示例 2. 可选参数 2.1 概述 2.2 代码示例 3. 默认参数值
第五章:方法
- 1. 方法定义
- 1.1 概述
- 1.2 方法特性
- 1.3 代码示例
- 2. 可选参数
- 2.1 概述
- 2.2 代码示例
- 3. 默认参数值
- 3.1 概述
- 3.2 代码示例
- 4. 方法对象
- 4.1 概述
- 4.2 代码示例
- 5. 匿名方法
- 5.1 概述
- 5.2 特性
- 5.3 代码示例
- 6. 闭包
- 6.1 概述
- 6.2 代码示例
1. 方法定义
1.1 概述
型体
1.2 方法特性
- 方法也是对象, 并且有具体类型Function- 返回值类型、参数类型都可省略
- 箭头语法: => expr是{ return expr;}缩写。只适用于一个表达式
- 方法都有返回值。如果没有指定,默认return null最后一句执行
1.3 代码示例
void main(List args) {print(args);
}PS D:\WorkSpace\1_Github\Repository_Flutter\Practice_Dart> cd chapter5
PS D:\WorkSpace\1_Github\Repository_Flutter\Practice_Dart\chapter5> dart function_declaration.dart 1 "Test" true
[1, Test, true]
PS D:\WorkSpace\1_Github\Repository_Flutter\Practice_Dart\chapter5>void main(List args) {
print(args);//[]
print(getPerson("张三", 18));//name= 张三, age= 18
printPerson("李四", 20);//name= 李四, age= 20
}
int gender = 1;
//这里这个=>箭头函数很像Kotlin的语法糖=
getPerson(name, age) => gender == 1 ? "name= $name, age= $age" : "Test";
printPerson(name, age) {
print("name= $name, age= $age");
}
2. 可选参数
2.1 概述
- 可选命名参数: { param1,param2... }- 可选位置参数: [ param1,param2... ]
- 如果存在具体参数,可选参数声明,必须在参数后面
2.2 代码示例
void main() {printPerson("李四");//name= 李四, age= 0, gender= ?
printPerson("李四", age: 20);//name= 李四, age= 20, gender= ?
printPerson("李四", age: 20, gender: "Male");//name= 李四, age= 20, gender= Male
printPerson2("张三");//name= 张三, age= 0, gender= ?
printPerson2("张三", 18);//name= 张三, age= 18, gender= ?
printPerson2("张三", 18, "Female");//name= 张三, age= 18, gender= Female
}
printPerson(String name, {int age = 0, String gender = "?"}) {//必需设置默认参数哦
print("name= $name, age= $age, gender= $gender");
}
printPerson2(String name, [int age = 0, String gender = "?"]) {//必需设置默认参数哦
print("name= $name, age= $age, gender= $gender");
}
3. 默认参数值
3.1 概述
- 使用=在可选参数指定默认值- 默认值只能是编译时常量
3.2 代码示例
void main() {printPerson("李四");
printPerson("李四", age: 20);
printPerson("李四", gender: "Male");
}
printPerson(String name, {int age = 30, String gender = "Female"}) {
print("name= $name, age= $age, gender= $gender");
}
4. 方法对象
4.1 概述
- 方法可作为对象赋值给其它变量- 方法可作为参数传递给其它方法
4.2 代码示例
void main() {Function func = printHello;
func();//Hello 这里很简单,就是变量进行赋值,然后加(),作为了一个方法执行
var list = [1, 2, 3, 4];
list.forEach(print);//1234 list依次遍历,相当于lambda的index,作为print(?)的入参进行打印
/**
* 相当于kotlin的
* list.forEach{ i ->
* println(i)
* }
*/
var list2 = ["h", "e", "l", "1", "o"];
print(listTimes(list2, times));
}
void printHello() {
print("Hello");
}
List listTimes(List list, String times(str)) {
for (var index = 0; index < list.length; index++) {
list[index] = times(list[index]);
}
return list;
}
String times(str) {
return str * 3;
}
5. 匿名方法
5.1 概述
型体
5.2 特性
- 可赋值给变量,通过变量进行调用- 可在其它方法中直接调用或传递给其它方法
5.3 代码示例
void main() {var func = (str) {
print("Hello---$str");
};
func(30);//Hello---30
(() {
print("Test");
})();//Test
var list2 = ["h", "e", "l", "l", "o"];
var result = listTimes(list2, (str) {
return str * 3;
});
print(result);//[hhh, eee, lll, lll, ooo]
}
List listTimes(List list, String times(str)) {
for (var index = 0; index < list.length; index++) {
list[index] = times(list[index]);
}
return list;
}
6. 闭包
6.1 概述
- 闭包是一个方法(对象)- 闭包定义在其它方法内部
- 闭包能够访问外部方法内的局部变量,并持有其状态
6.2 代码示例
void main() {var func = a();
var func1 = b();
func();
func();
print("----->");
func1();
func1();
/**
* 0
1
----->
0
1
*/
}
a() {
int count = 0;
printCount() {
print(count++);
}
return printCount;
}
b() {
int count = 0;
return () {
print(count++);
};
}