05-Dart 方法
本篇从大地老师《Dart 入门实战教程》学习整理而来。
内置方法
// 内置方法/函数:
print();
自定义方法
// 自定义方法:
// 自定义方法的基本格式:
返回类型 方法名称(参数1,参数2,...){
方法体
return 返回值;
}
void printInfo(){
print('我是一个自定义方法');
}
int getNum(){
var myNum=123;
return myNum;
}
String printUserInfo(){
return 'this is str';
}
调用方法传参
限制传入参数类型
int sumNum(int n){
var sum=0;
for(var i=1;i<=n;i++)
{
sum+=i;
}
return sum;
}
定义带可选参数的方法 中括号内是可选参数
String printUserInfo(String username,[int age=0]){ //行参
if(age!=0){
return "姓名:$username---年龄:$age";
}
return "姓名:$username---年龄保密";
}
print(printUserInfo('张三',21)); //实参
print(printUserInfo('张三'));
### 定义一个命名参数的方法
```dart
String printUserInfo(String username, {int age = 0, String sex = '男'}) {//行参
if (age != 0) {
return "姓名:$username---性别:$sex--年龄:$age";
}
return "姓名:$username---性别:$sex--年龄保密";
}
print(printUserInfo('张三', age: 20, sex: '未知'));
### 把方法当做参数的方法
```dart
//方法
fn1() {
print('fn1');
}
//方法
fn2(fn) {
fn();
}
//调用fn2这个方法 把fn1这个方法当做参数传入
fn2(fn1);
箭头函数
注意和方法的区别: 箭头函数内只能写一条语句,并且语句后面没有分号(😉。要写多条语句使用大括号。
list.forEach((value) => print(value));
list.forEach((value)=>{
print(value)
});
其他方法
自执行方法
((int n) {
print(n);
print('我是自执行方法');
})(12);
方法的递归
var sum = 1;
fn(int n) {
sum *= n;
if (n == 1) {
return;
}
fn(n - 1);
}
闭包
- 全局变量特点: 全局变量常驻内存、全局变量污染全局
- 局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
- 闭包常驻内存且不会污染全局
- 闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
- 闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
fn() {
var a = 123; /*不会污染全局 常驻内存*/
return () {
a++;
print(a);
};
}
var b = fn();
b(); // 124
b(); // 125
b(); // 126