Dart匿名方法函數和閉包


/*
  內置方法/函數:

      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(){

  // print('調用系統內置的方法');

  // printInfo();
  // var n=getNum();
  // print(n);


  // print(printUserInfo());


  // print(getList());

  // print(getList());
  

//演示方法的作用域
  void xxx(){

      aaa(){

          print(getList());
          print('aaa');
      }
      aaa();
  }

  // aaa();  錯誤寫法 

  xxx();  //調用方法


}
//調用方法傳參

main() {
  

//1、定義一個方法 求1到這個數的所有數的和      60    1+2+3+。。。+60


 /*
    int sumNum(int n){
      var sum=0;
      for(var i=1;i<=n;i++)
      {
        sum+=i;
      }
      return sum;
    } 

    var n1=sumNum(5);
    print(n1);
    var n2=sumNum(100);
    print(n2);

 */
       


//2、定義一個方法然后打印用戶信息


    // String printUserInfo(String username,int age){  //行參
    //     return "姓名:$username---年齡:$age";
    // }

    // print(printUserInfo('張三',20)); //實參





//3、定義一個帶可選參數的方法
    

    // String printUserInfo(String username,[int age]){  //行參

    //   if(age!=null){
    //     return "姓名:$username---年齡:$age";
    //   }
    //   return "姓名:$username---年齡保密";

    // }

    // // print(printUserInfo('張三',21)); //實參

    // print(printUserInfo('張三'));
   



//4、定義一個帶默認參數的方法


    // String printUserInfo(String username,[String sex='男',int age]){  //行參

    //   if(age!=null){
    //     return "姓名:$username---性別:$sex--年齡:$age";
    //   }
    //   return "姓名:$username---性別:$sex--年齡保密";

    // }

  // print(printUserInfo('張三'));

  // print(printUserInfo('小李','女'));

  //  print(printUserInfo('小李','女',30));



//5、定義一個命名參數的方法

  // String printUserInfo(String username,{int age,String sex='男'}){  //行參

  //     if(age!=null){
  //       return "姓名:$username---性別:$sex--年齡:$age";
  //     }
  //     return "姓名:$username---性別:$sex--年齡保密";

  // }

  // print(printUserInfo('張三',age:20,sex:'未知'));



//6、實現一個 把方法當做參數的方法


  // var fn=(){

  //   print('我是一個匿名方法');
  // };      
  // fn();




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

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

  //調用fn2這個方法 把fn1這個方法當做參數傳入
  fn2(fn1);
}
void main(){

/*需求:使用forEach打印下面List里面的數據*/

    // List list=['蘋果','香蕉','西瓜'];
    // list.forEach((value){
    //   print(value);
    // });
    // list.forEach((value)=>print(value));
    // list.forEach((value)=>{
    //   print(value)
    // });

/*需求:修改下面List里面的數據,讓數組中大於2的值乘以2*/

    List list=[4,1,2,3,4];

    // var newList=list.map((value){

    //     if(value>2){
    //       return value*2;
    //     }
    //     return value;

    // });
    // print(newList.toList());


  //  var newList=list.map((value)=>value>2?value*2:value);

  //  print(newList.toList());



/*
需求:    1、定義一個方法isEvenNumber來判斷一個數是否是偶數  
         2、定義一個方法打印1-n以內的所有偶數
*/


//定義一個方法isEvenNumber來判斷一個數是否是偶數  
    bool isEvenNumber(int n){
      if(n%2==0){
        return true;
      }
      return false;
    }

    printNum(int n){
        for(var i=1;i<=n;i++){
            if(isEvenNumber(i)){
              print(i);
            }
        }
    }

    printNum(10);


}
int getNum(int n){

  return n;
}



void main(){

    
  // print(getNum(12));



  //匿名方法

  // var printNum=(){

  //   print(123);
  // };

  // printNum();



  // var printNum=(int n){

  //   print(n+2);
  // };

  // printNum(12);




//自執行方法


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








//方法的遞歸
      // var sum=1;            
      // fn(n){
      //     sum*=n;
      //     if(n==1){
      //       return ;
      //     }         
      //     fn(n-1);
          
      // }

      // fn(5);      
      // print(sum);



//通過方法的遞歸 求1-100的和

    var sum=0;
    fn(int n){

        sum+=n;

        if(n==0){
          return;
        }
        fn(n-1);
    }

    fn(100);
    print(sum);


 
}
/*
閉包:

    1、全局變量特點:    全局變量常駐內存、全局變量污染全局
    2、局部變量的特點:  不常駐內存會被垃圾機制回收、不會污染全局  


  /*  想實現的功能:

        1.常駐內存        
        2.不污染全局   

          產生了閉包,閉包可以解決這個問題.....  

          閉包: 函數嵌套函數, 內部函數會調用外部函數的變量或參數, 變量或參數不會被系統回收(不會釋放內存)
  
            閉包的寫法: 函數嵌套函數,並return 里面的函數,這樣就形成了閉包。

    */  
*/
/*全局變量*/
var a=123;

void main(){

    // print(a);

    // fn(){
    //   a++;
    //   print(a);
    // }
    // fn();
    // fn();
    // fn();

//局部變量
    // printInfo(){
    //   var myNum=123;
    //   myNum++;
    //   print(myNum);
    // }
    // printInfo();

    // printInfo();
    // printInfo();

//閉包

          fn(){
        var a=123;  /*不會污染全局   常駐內存*/
        return(){            
          a++;            
          print(a);
        };        
      }     
      var b=fn();    
      b();
      b();
      b();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM