Dart学习笔记——函数

2021-08-26  本文已影响0人  Jabir_Zhang

方法的定义、方法的作用域

/*
  内置方法/函数:

      print();

  自定义方法:
      自定义方法的基本格式:

      返回类型  方法名称(参数1,参数2,...){
        方法体
        return 返回值;
      }
*/
void printInfo(){
  print('我是一个自定义方法');
}

int getNum(){
  var myNum=123;
  return myNum;
}

String printUserInfo(){
  return 'this is str';
}

List getList(){
  return ['111','2222','333'];
}

void main(){
  //演示方法的作用域
  void xxx(){
      aaa(){
          print(getList());
          print('aaa');
      }
      aaa();
  }
  // aaa();  错误写法 
  xxx();  //调用方法
}

方法传参

1、一般传参

//定义一个方法 求1到这个数的所有数的和
int sumNum(int n){
   var sum=0;
   for(var i=1;i<=n;i++)
   {
     sum+=i;
   }
   return sum;
} 
//定义一个方法然后打印用户信息
String printUserInfo(String username, int age) {
   //行参
   return "姓名:$username---年龄:$age";
}

2、可选参数

//定义一个带可选参数的方法 ,最新的dart定义可选参数需要指定类型默认值或者可选符号?
String printUserInfo(String username,[String sex='男',int age=0]){  //行参
  if(age!=0){
     return "姓名:$username---性别:$sex--年龄:$age";
  }
  return "姓名:$username---性别:$sex--年龄保密";
}
print(printUserInfo('张三'));
print(printUserInfo('小李','女'));
print(printUserInfo('小李','女',30));

3、命名参数

//定义一个命名参数的方法,最新的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: '未知'));

4、方法当做参数

//方法
fn1() {
  print('fn1');
}

//方法
fn2(fn) {
  fn();
}

//调用fn2这个方法 把fn1这个方法当做参数传入
fn2(fn1);

// var fn=(){
//   print('我是一个匿名方法');
// };
// fn();

函数的调用

1、箭头函数

//注意和方法的区别: 箭头函数内只能写一条语句,并且语句后面没有分号(;)
List list=['苹果','香蕉','西瓜'];
list.forEach((value){
  print(value);
});

list.forEach((value)=>print(value));

2、一般调用

// 1、定义一个方法isEvenNumber来判断一个数是否是偶数  
bool isEvenNumber(int n) {
  if (n % 2 == 0) {
    return true;
  }
  return false;
}
//  2、定义一个方法打印1-n以内的所有偶数
printNum(int n) {
  for (var i = 1; i <= n; i++) {
    if (isEvenNumber(i)) {
      print(i);
    }
  }
}
printNum(10);
}

3、匿名方法

var printNum=(){
  print(123);
};
printNum();
//带参数
var printNum=(int n){
  print(n+2);
};
printNum(12);

4、自执行方法

((int n){
  print(n);
  print('我是自执行方法');
})(12);

5、方法的递归

var sum = 1;
fn(int n) {
  sum *= n;
  if (n == 1) {
    return;
  }
  fn(n - 1);
}

fn(5);
print(sum);

闭包

/*
闭包:

    1、全局变量特点:    全局变量常驻内存、全局变量污染全局
    2、局部变量的特点:  不常驻内存会被垃圾机制回收、不会污染全局  


  /*  想实现的功能:

        1.常驻内存        
        2.不污染全局   
     
        产生了闭包,闭包可以解决这个问题.....  

        闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
  
        闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
   */  
*/
//闭包
Function fn() {
  var a = 123; /*不会污染全局   常驻内存*/
  return () {
    a++;
    print(a);
  };
}

var b = fn();
b();//124
b();//125
b();//126
上一篇下一篇

猜你喜欢

热点阅读