【笔记】Dart的函数

前言

Dart的函数学习笔记

主函数

  • 程序的入口
1
2
3
void main() {
...
}

定义函数

  • 定义自定义函数
  • 函数名通常采用驼峰命名法

返回值

有返回值的函数

1
2
3
4
返回值类型 函数名(参数列表) {
...
return 返回值;
}

没有返回值的函数

1
2
3
void 函数名(参数列表) {
...
}

任意返回值的函数

  • 返回值为自动推导类型
1
2
3
4
函数名() {
...
返回值;
}

参数列表

没有参数列表的函数

1
2
3
void 函数名() {
...
}

直接指定形参名

  • 直接指定形参名时,可以传递任意类型的形参
1
2
3
void 函数名(形参名, 形参名) {
...
}

指定形参类型

1
2
3
void 函数名(数据类型 形参名, 数据类型 形参名) {
...
}

指定可选参数

  • 如果指定可选参数,在函数调用时可以传参也可以不传参
  • 可选参数用[]包裹,多个可选参数用一对[]包裹,用,分隔
  • 可选参数需要写在参数列表末尾
  • 可选参数在调用时是根据传参顺序决定参数的赋值的
1
2
3
void 函数名(数据类型 形参名, [数据类型 形参名, 数据类型 形参名]) {
...
}
默认参数
  • 提供参数的默认值。如果可选参数不传递参数,则赋值为默认值
  • 可选参数的默认参数通常放在其他可选参数的前面
1
2
3
void 函数名(数据类型 形参名, [数据类型 形参名=默认值, 数据类型 形参名]) {
...
}

指定命名参数

  • 如果指定命名参数,在函数调用时可以传参也可以不传参
  • 命名参数用{}包裹,多个命名参数用一对{}包裹,用,分隔
  • 命名参数需要写在参数列表末尾
  • 命名参数在调用时是根据形参名决定参数的赋值的
1
2
3
4
5
void 函数名(数据类型 形参名, {数据类型 形参名, 数据类型 形参名}) {
...
}

函数名{参数值, 参数名=参数值}
默认参数
  • 提供参数的默认值。如果可选参数不传递参数,则赋值为默认值
  • 命名参数的默认参数可以不放在其他可选参数的前面,因为命名参数的调用是通过参数名决定参数的赋值的
1
2
3
void 函数名(数据类型 形参名, {数据类型 形参名=默认值, 数据类型 形参名}) {
...
}

把函数作为参数传递

1
2
3
4
5
6
void 函数名1(参数名) {
参数名();
}
void 函数名2() {}

函数名1(函数名2);

匿名函数

1
2
3
4
5
var 变量名 = (参数列表) {
...
}

变量名();

箭头函数

  • 箭头函数的函数体只能写一句代码
1
2
3
(参数列表)=>{
...
}
  • 如果箭头函数的函数体省略了{},那么无需写return即可将返回值返回
1
(参数列表)=>函数体

自执行函数

  • 在定义函数后,立即执行函数
1
2
3
((形参列表) {
...
})(实参列表);

递归函数

  • 函数内部自己调用自己的函数
1
2
3
void 函数名() {
函数名();
}

闭包

  • 全局变量:可以常驻内存,但是数据可能会被污染
  • 局部变量:会被垃圾回收,不会常驻内存,数据不会污染
  • 闭包:函数的返回值是一个匿名函数,这个匿名函数定义了一些变量,这些变量既不会被污染,也不会被垃圾回收
1
2
3
4
5
void 函数名() {
return () {
变量名 = 值;
}
}

调用函数

无返回值

1
函数名(参数列表);

有返回值

1
var 返回值 = 函数名(参数列表);

函数的作用域

  • 在函数内部定义的函数为局部函数
  • 局部作用域定义的函数只能在作用域内部调用,不能在全局调用
1
2
3
4
5
6
void 函数名() {
void 函数名() {
...
}
函数名();
}

完成

参考文献

哔哩哔哩——筱筱知晓