1.自定义方法
自定义方法的基本格式:
返回类型 方法名称(参数1,参数2,...){
方法体
return 返回值;
}
例如:
void printInfo(){
print('我是一个自定义方法');
}
String printUserInfo(){
return 'this is str';
}
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('张三'));//打印结果 姓名:张三---年龄保密
4.定义一个带默认参数的方法
String printUserInfo(String username, [String sex = '男', int age]) {//行参
if (age != null) {
return "姓名:$username---性别:$sex--年龄:$age";
}
return "姓名:$username---性别:$sex--年龄保密";
}
print(printUserInfo('张三')); //打印结果 姓名:张三---性别:男--年龄保密
print(printUserInfo('小李', '女')); //打印结果 姓名:小李---性别:女--年龄保密
5.定义一个命名参数的方法
String printUserInfo(String username, {int age, String sex = '男'}) {//行参
if (age != null) {
return "姓名:$username---性别:$sex--年龄:$age";
}
return "姓名:$username---性别:$sex--年龄保密";
}
print(printUserInfo('张三', age: 20, sex: '未知')); //打印结果 姓名:张三---性别:未知--年龄:20
6.实现一个 把方法当做参数的方法
fn1() {
print('fn1');
}
fn2(fn) {
fn();
}
//调用fn2这个方法 把fn1这个方法当做参数传入
fn2(fn1); //打印结果 fn1
7.箭头函数(只能写一句代码)
List list = ['苹果', '香蕉', '西瓜'];
list.forEach((value) {
print(value);
});
使用箭头函数之后:
1.list.forEach((value)=>print(value));
2.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());
8.函数的相互调用
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);
9.匿名方法
var printNum = () {
print(123);
};
printNum();
var printNum = (int n) {
print(n + 2);
};
printNum(12);
10.自执行方法(一运行,就会执行,不需要主动调用)
(() {
print("我是自执行方法");
})();
((int n){
print(n);
print('我是自执行方法');
})(12);
11.方法的递归
var sum=1;
fn(n){
sum*=n;
if(n==1){
return ;
}
fn(n-1);
}
fn(5);
print(sum);
12.闭包
1、全局变量特点: 全局变量常驻内存、全局变量污染全局
2、局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
想实现的功能:
1.常驻内存
2.不污染全局
产生了闭包,闭包可以解决这个问题.....
闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
fn(){
var a=123; /*不会污染全局 常驻内存*/
return(){
a++;
print(a);
};
}
var b=fn();
b();
b();
b();
网友评论