/* 內置方法/函數: 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(); }