方法的定义、方法的作用域
/*
内置方法/函数:
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
网友评论