Flutter/Dart - 函数详解
2020-07-13 本文已影响0人
沫之
Dart中的函数定义的几种方式
// 无返回值
void printInfo() {
print('我是一个自定义方法');
}
int getNum() {
var num = 123;
return num;
}
String getString() {
var string = '123';
return string;
}
List getList() {
var list = [33, 4, 4, 4];
return list;
}
void main() {
printInfo();
getNum();
getString();
getList();
}
定义一个方法 求1到这个数的所有数的和
int sumNum(n) {
var sum = 0;
for (var i = 0; i <= n; i++) {
sum += i;
}
return sum;
}
var sum = sumNum(100);
print(sum); //5050
定义一个方法然后打印用户信息
String printUserInfo(String name,int age){//行参
print('姓名:$name----年龄:$age');
}
printUserInfo('hhh',20);//实参
可选参数
String printUserInfo(String name, [int age]) {
if (age != null) {
print('姓名:$name----年龄:$age');
} else {
print('姓名:$name----年龄保密');
}
}
默认参数
定义一个带默认参数的方法
String printUserInfo(String name, [String sex = "女", int age]) {
if (age != null) {
print('姓名:$name--性别$sex--年龄:$age');
} else {
print('姓名:$name--性别$sex--年龄保密');
}
}
命名参数
定义一个命名参数的方法
String printUserInfo(String name, {String sex = "女", int age}) {
if (age != null) {
print('姓名:$name--性别$sex--年龄:$age');
} else {
print('姓名:$name--性别$sex--年龄保密');
}
}
printUserInfo('hhh', age: 20);
方法当做参数
定义一个把方法当作参数的方法
fn1(){
print('fn1');
}
fn2(fn){
fn();
}
fn2(fn1);
箭头函数
需求:使用foreach打印下面list里面的数据
List list = ['apple', 'banana', 'watermelon'];
list.forEach((v) {
print(v);
});
list.forEach((v) => print(v));
需求:修改下面list里面的数据,让数组中大于2的值乘2
List list2 = [1, 2, 3, 4, 5];
var newList = list2.map((v) {
return v > 2 ? v * 2 : v;
});
print(newList.toList());
var newList2 = list2.map((v) => v > 2 ? v * 2 : v);
print(newList2.toList());
函数的相互调用
定义一个方法isEvenNumber来判断一个数是否是偶数
bool isEvenNumber(n) {
if (n % 2) {
return true;
}
return false;
}
定义一个方法打印1-n以内所有偶数
printNum(int n){
for(var i=1;i< n;i++){
if(isEvenNumber(i)){
print(i);
}
}
}
匿名函数
var printNum = (int n) {
print(n);
};
print(123);
自执行方法
((n) {
print('我是自执行方法$n');
})(123);
递归
求1-100的和
var sum = 1;
fn(n) {
sum *= n;
if (n == 1) {
return;
}
fn(n - 1);
}
fn(100);
print(sum);
闭包
首先我们要了解下
- 全局变量的特点:全局变量常驻内存,全局变量污染全局
- 局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
那如何实现常驻内存
又不污染全局
, 闭包就可以解决这个问题
闭包简单来说就是函数嵌套函数,内部函数会调用外部函数的变量或参数,变量或参数不会被系统销毁。
以下是一个闭包范例
fn() {
var a = 123;
return () {
a++;
print(a);
};
}
var b = fn();
b();