05Dart 方法

本篇从大地老师《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);
}

闭包

  1. 全局变量特点: 全局变量常驻内存、全局变量污染全局
  2. 局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
  • 闭包常驻内存且不会污染全局
  • 闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
  • 闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
fn() {
  var a = 123; /*不会污染全局   常驻内存*/
  return () {
    a++;
    print(a);
  };
}
var b = fn();
b(); // 124
b(); // 125
b(); // 126
原文地址:https://www.cnblogs.com/johu/p/15696561.html