💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
## 方法定义 ~~~ 返回类型 方法名(参数,,){ 方法体; return 返回值 } ~~~ ~~~ void main(List args){ print(args); } ~~~ ~~~ getPerson('zhangsan', 18); String getPerson(String name, int age){ return"name=$name, age=$age" } ~~~ ## 方法特性 Dart中一切都是对象,包括方法 1. 方法也是对象,并且有具体类型Function 2. 返回值类型,参数类型都可省略 3. 箭头语法 =>expr是{return expr;}缩写,只适用于一个表达式 4. 方法都有返回值,如果没有指定,默认return null。 ## 可选参数 1. 可选命名参数:{param1, param2,...} 2. 可选位置参数:[param1, param2,...] 3. 如果存在具体参数,可选参数声明,必须在参数后面 ~~~ printPerson('zhangsan'); printPerson('zhangsan',age:20);//name=zhangsan,age=20,gender=null printPerson('zhangsan',age:20,gender:'Male');//name=zhangsan,age=20,gender=Male printPerson(String name, {int age, String gender}){ print("name=$name,age=$age,gender=$gender"); } ~~~ //中括号根据位置而来,只能依次传入 ~~~ printPerson('zhangsan',20);//name=zhangsan,age=20,gender=null printPerson('zhangsan',20,'Male');//name=zhangsan,age=20,gender=Male printPerson(String name, [int age, String gender]){ print("name=$name,age=$age,gender=$gender"); } ~~~ ## 默认参数 1. 使用 = 在可选参数指定默认值 2. 默认值只能是编译时常量 3. ~~~ printPerson('zhangsan'); //name=zhangsan,age=100,gender=female printPerson('zhangsan',age:20); //name=zhangsan,age=20,gender=female printPerson('zhangsan',age:20,gender:'Male'); //name=zhangsan,age=20,gender=Male printPerson(String name, {int age = 100, String gender = "female"}){ print("name=$name,age=$age,gender=$gender"); } ~~~ ## 方法对象 1. 方法可作为对象赋值给其他变量 2. 方法可作为参数传递给其他方法 3. ~~~ void testDart(){ Function func = printHello; func(); } printHello(){ print('hello'); } ~~~ ~~~ void testDart(){ var list2 = ['h','e','l','l','o']; print('YYYYYYYYY'); print(listTimes(list2,times)); } List listTimes(List list, String times(str)){ for(var index=0; index<list.length; index++){ list[index] = times(list[index]); } return list; } String times(str){ return str*3; } ~~~ ## 匿名方法 ~~~ (参数1,参数2,...){ 方法体... return 返回值 } ~~~ ### 特性 1. 可赋值给变量,通过变量进行调用 2. 可在其他方法中直接调用或传递给其他方法 ~~~ void testDart(){ var func = (str){ print('hello $str'); }; func(30); } ~~~ ~~~ void testDart(){ ((str){ print('hello $str'); })(30); } ~~~ 匿名方法作为参数 ~~~ void testDart(){ var list2 = ['h','e','l','l','o']; print('YYYYYYYYY'); print(listTimes(list2,(str){ return str *3; } )); } List listTimes(List list, String times(str)){ for(var index=0; index<list.length; index++){ list[index] = times(list[index]); } return list; } ~~~ ~~~ void testDart(){ var list2 = ['h','e','l','l','o']; print('YYYYYYYYY'); print(listTimes(list2)); } List listTimes(List list){ var func1 = (str){ return str*3; }; for(var index=0; index<list.length; index++){ list[index] = func1(list[index]); } return list; } ~~~ ## 闭包 1. **闭包是一个方法(对象)** 2. **闭包定义在其他方法内部** 3. **闭包能够访问外部方法内的局部变量,并持有其状态**(使用闭包最大的用处是访问外部方法的局部变量,因为方法内部的局部变量是在外部无法访问的,因此使用闭包的方式将其暴露出去,使外部可以访问) **方法中的局部变量只能通过闭包的方式访问。** ~~~ void testDart(){ var func = a(); func(); //0 func(); //1 func(); //2 func(); //3 func(); //4 } a(){ int count = 0; return (){ print(count++); }; } ~~~