Flutter学习笔记1.1 Dart基础(变量 常量 命名规则 基本类型
Flutter学习笔记1.2 Dart基础(运算符 条件判断 类型转换)
Flutter学习笔记1.3 Dart基础(循环语句 for,while, do...while, 多维列表循环,自增 自减 )
Flutter学习笔记1.4 Dart基础(List Set Map,属性,数据操作))
Flutter学习笔记1.5 Dart基础(函数 参数的多种定义方式 可选参数 默认参数 命名参数 箭头函数 匿名函数 递归 闭包))
Flutter学习笔记1.6 Dart基础(对象 类 构造函数 类的私有化 静态 类转换 继承 ))
Flutter学习笔记1.7 Dart基础(抽象类 多态 接口 mixins多重继承 泛型类 泛型方法 泛型接口 )
Flutter学习笔记1.8 Dart基础(第三方库导入 使用 , Async Await.dart 延迟加载)
Flutter学习笔记1.9 Dart基础(Dart 2.13之后的一些新特性 空类型声明符?,非空断言!,required 关键字)
自定义函数:
自定义函数的基本格式:
返回类型 方法名称(参数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(); //调用方法
}
函数 参数的定义方式
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、定义一个带可选参数的方法 ,最新的dart定义可选参数需要指定类型默认值
String printUserInfo(String username,[int age=0]){ //行参
if(age!=0){
return "姓名:$username---年龄:$age";
}
return "姓名:$username---年龄保密";
}
print(printUserInfo('张三',21)); //实参
print(printUserInfo('张三'));
4、定义一个带默认参数的方法
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));
5、定义一个命名参数的方法,最新的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: '未知'));
6、实现一个 把方法当做参数的方法
var fn=(){
print('我是一个匿名方法');
};
fn();
//方法
fn1() {
print('fn1');
}
//方法
fn2(fn) {
fn();
}
//调用fn2这个方法 把fn1这个方法当做参数传入
fn2(fn1);
需求:
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);
匿名函数
var printNum=(){
print(123);
};
printNum();
var printNum=(int n){
print(n+2);
};
printNum(12);
自执行方函数
((int n){
print(n);
print('我是自执行方法');
})(12);
函数的递归
var sum = 1;
fn(int 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);
闭包
闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
特性:
1.常驻内存
2.不污染全局
比较:
1、全局变量特点: 全局变量常驻内存、全局变量污染全局
2、局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
产生了闭包,闭包可以解决这个问题。
/*全局变量*/
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();
}
网友评论