一、内置方法
print…
二、自定义方法
2.1 函数的定义
小驼峰命名规则 方法的返回值不知道可不写;知道的话建议进行约束。而不是依靠推断。
void printInfo() {print('自定义无返回值函数');}int getAge(int age) {return age;}void main() {}
2.2 可选参数 & 默认参数
[…] 可选 可选内部赋值代表是默认参数,必传参数不能赋默认值; 默认参数一般在最后…
String getAge(String name, [int? age, String? sex='男']) {return age!=null ? '$name - $age - $sex' : '$name - $sex';}
2.3 命名(具名)参数
String getAge(String name, {int? age, String? sex='男'}) {return age!=null ? '$name - $age - $sex' : '$name - $sex';}// 调用时指定名称 `名称:value`getAge('hao', age:18);
2.4 箭头参数
使用条件:函数体只有一句话
list.forEach((element){print(element);});list.forEach((element) => print(element));
2.5 匿名函数
直接用var声明报警告: 无法推断函数literal的类型,因为该literal的主体是块。 尝试向变量添加显式类型。
Function fn = () {print('匿名函数赋值给一个变量');};
2.6 自执行方法
不支持一元运算符
// 不包裹函数体(){print('我是自执行方法!');}();// 包裹函数体((){print('我是自执行方法!');})();
2.7 递归
自己调用自己;但必须给定退出条件
var sum = 1;fn(int n) {sum *= n;if(n == 1) {return;}fn(n - 1);}fn(5); // 计算5的阶乘print(sum);
2.7 闭包
- 全局变量:常驻内存,会污染全局
- 局部变量:不常驻内存会被垃圾回收机制回收,不会污染全局
闭包:常驻内存且不会污染全局
区分全局和局部的概念
var a = 1;void main(List<String> args) {void fn() {var b = 2;a++;b++;print('$a - $b');}fn();// 2 - 3fn();// 3 - 3}
闭包
Function bibao() {var c = 123;return () {c++;print(c);};}var d = bibao();d();// 124d();// 125d();// 126
