Hellom's Studio.

Dart 学习之方法

字数统计: 697阅读时长: 3 min
2019/07/16 Share

方法的定义

1
2
3
4
5
6
7
8
9
10
11
12
13
e.g.

//void 表示无返回类型
void main(List args) {
print(args);

print(getPerson('张三', 13));
}

//String 表示 getPerson 返回值是字符串
String getPerson(String name, int age) {
return 'name= $name, age = $age';
}

方法特性

  • 方法也是对象 并且有具体类型 Function

  • 返回值类型、参数类型都可省略

  • 箭头语法:=> expr{return expr}的缩写 但只适用一个表达式

  • 方法都有返回值 如果没有指定 默认 return null 最后一句执行

1
2
3
4
5
6
7
8
9
e.g.

//返回值类型、参数类型都可省略
getPerson( name, age) {
print('name= $name, age = $age') ;
}

//返回值 可改成 => 语法
getPerson( name, age) => 'name= $name, age = $age';

可选参数

  • 可选命名参数:{param1 ,param2...}
  • 可选位置参数:[param1 ,param2...]

  • 可选参数 必须在具体参数的后面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
e.g.

void main() {
print(getPerson('张三'));

//根据命名参数 调用时 可选参数的写法 需要带上字段名
print(getPerson('张三', age: 20, gender: 'Male'));

//根据命名参数 调用时 可选参数的写法 根据定义的位置顺序来写
print(getPerson2('李四', 22,'Female'));
}

//根据命名参数定义
getPerson(String name, {int age, String gender}) {
print('name= $name, age = $age, gender = $gender');
}

//根据位置参数定义
getPerson2(String name, [int age, String gender]) {
print('name= $name, age = $age, gender = $gender');
}

默认参数

  • 使用 = 在可选参数指定默认值

  • 默认值只能是编译时常量

1
2
3
4
5
6
7
8
9
10
11
e.g.

void main() {
print(getPerson('张三')); //name= 张三, age = 30, gender = Male

print(getPerson('张三', age: 20, gender: 'Female'));//name= 张三, age = 20, gender = Female
}

getPerson(String name, {int age = 30, String gender = 'Male'}) {
print('name= $name, age = $age, gender=$gender');
}

方法对象

  • 方法可作为对象赋值给其他变量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    e.g.

    void main() {
    Function func = printHello;

    func(); // Hello
    }

    void printHello(){
    print('Hello');
    }
  • 方法可作为参数传递给其他方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
e.g.

void main() {
var list1 = ['h', 'e', 'l', 'l', 'o'];

print(listTimes(list1, times)); //[hhh, eee, lll, lll, ooo]
}

List listTimes(List list, String times(str)) {
for (var i = 0; i < list.length; i++) {
list[i] = times(list[i]);
}

return list;
}

String times(str) {
return str * 3;
}

匿名方法

  • 可赋值给变量 通过变量进行调用
1
2
3
4
5
6
7
8
9
e.g.

void main() {
var func = (str){
print('hello---$str');
};

func(30);
}
  • 可在其他方法中直接调用或传递给其他方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
e.g.

void main() {
var list1 = ['h', 'e', 'l', 'l', 'o'];

var result = listTimes(list1, (str) {return str * 3;}); // <=

print(result); //[hhh, eee, lll, lll, ooo]
}

List listTimes(List list, String times(str)) {
for (var i = 0; i < list.length; i++) {
list[i] = times(list[i]);
}

return list;
}

闭包

  • 闭包是一个方法(对象)

  • 闭包定义在其他方法内部

  • 闭包能够访问外部方法内部的局部变量,并保持有其状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
e.g.

void main() {
var func = a();

func(); // 0
func(); // 1
func(); // 2
func(); // 3
}

a() {
int count = 0;

return () {
print(count++);
};
}
CATALOG
  1. 1. 方法的定义
  2. 2. 方法特性
  3. 3. 可选参数
  4. 4. 默认参数
  5. 5. 方法对象
  6. 6. 匿名方法
  7. 7. 闭包