无学历何来架构 发表于 2021-5-10 21:28:40

dart各种声明与运算符/函数/方法

//变量声明:
定义变量 : var/string/int/double/bool/list/maps/dynamic
注意: dynamic 可以存储任意类型,编译器则会关闭对此变量的类型检查,正确性需要自己来保证
注意事项 : string类型变量可以用 ' / " / ''' / """ 来包裹, 3个单引号或双引号可以多行
          在dart中 int 整数型 double 小数型

内容拼接 : string拼接直接在双引号中拼接要在变量前加$ 例:print("$var $var"),拼接符 + 例: var1 +'/'+ var2            
list声明: 例: var a = [];    例: var b=new List();例:var c = new List<String>();访问: print(a)
map 声明: 例: var a = {'name':'张三','age':14};例:var a = new Map(); b['name']='李四'访问:a['name']
enum enumName {

}

//运算符
算数运算符: + - * / %~/(取整)
关系运算符: > < = != <= >=
逻辑运算符: !(取反)&&(并且)||(或者)
赋值运算符: =   ??=(变量为null则赋值) ++ --+=-= *= /= ~/=
条件运算符: a = bool ? a : b;(三元运算符)   a =b ?? c;(b为不为null则取b否者取c)
条件表达式: if switch

//定义常量 coust/final         
count 声明必须赋值
final 可以先声明后赋值且惰性加载

//循环
for / while / do--while         //循环      
break / continue                //跳出循环 / 跳出本层循环

//list数组(如果想要数据没有重复可以用Set )
属性:
list.length                  //获取list的长度
list.reversed                  //list数据翻转
list.isEmpty                   //list是否为空
list.isNotEmpty             //list是否不为空
方法:
list.add('a')                  //增加数据
list.addAll(['a','b'])      //拼接数组(可用于往数组中批量添加数据)
list.indexOf('a')         //查找数据并返回数据索引,没有则返回-1
list.remove('a')            //删除数组中的指定值
list.removeAt(0)            //删除数组中指定索引下的值
list.fillRange(开始位置,结束位置,值)    //修改数据
list.insert(index,value)    //指定位置插入数据
list.insertAll(index,list)   //指定位置插入list
list.toList()               //其他类型转换为list类型
list.join('分隔符')          //list转换成文本
string.split('分隔符')       //数组合并成文本
list.forEach()            //遍历循环
list.where()                //遍历循环查找数据
list.map()                     //遍历循环修改数据
list.any()                  //有满足条件就返回true
list.every()                //所有满足条件就返回true
//List生成指定数量数据
List.generate(生成数量,(i){
   
})

//map
属性:
map.keys                  //获取所有key值
map.values                  //获取所有value值
map.isEmpty               //map是否为空
map.isNotEmpty               //map是否不为空
方法:
map.remove(key)             //删除数据
map.addAll({..})            //添加数据
map.containsValue('abc')    //是否存在该值
map.containsKey('age')      //是否存在该键
map.forEach()            //遍历循环
map.where()                //遍历循环查找数据
map.map()                     //遍历循环修改数据
map.any()                  //有满足条件就返回true
map.every()                //所有满足条件就返回true


async / await   异步

//类型转换
int.parse(要转换为整数型的变量)   //变量转换为整数型
double.parse(要转换为小数型的变量)//变量转换为小数型
变量.toString()                  //变量转换为文本型
json.decode(json)      //json转map
json.encode(map)       //map转json


//时间操作
var now = DateTime.now().microsecondsSinceEpoch//获取当前时间戳
DateTime.fromMillisecondsSinceEpoch(时间戳) //时间戳转时间
DateTime(2021,4, 0).day       //获取本月有多天数


//判断数据类型
变量.isEmpty      //判断变量是否为空
变量.isNaN          //判断变量的值是否为NaN

try{

}catch(err){

}

//引入 库
import "lib/data.dart";   //自定义库引入
import "dart:io";         //dart自带库引入


//第三方库导入流程
1、从下面网址找到要用的库
      https://pub.dev/packages
      https://pub.flutter-io.cn/packages
      https://pub.dartlang.org/flutter/

2、项目根目录下创建一个pubspec.yaml文件,内容如下
    name: xxx
    description: A new flutter module project.
    dependencies:
      http: ^0.12.0+2
      date_format: ^1.0.6

3、引入库(具体引入可以看 流程1)
import 'package:date_format/date_format.dart';      


//函数定义于用法
1、可选参数函数 用[]包裹同时可选参数可以设置默认值
String getInfo(String Name,){
    String str = "$Name--$Age";
    if(Sex!=null) str=str+"--$Sex";
    return str;
}
print(getInfo('张三','男',12));

2、命名参数函数 用{}包裹,在运行函数是需要带上参数名称如果 Sex:'女'
String getInfo(String Name,{String Sex='男',int Age}){
    String str = "$Name--$Age";
    if(Sex!=null) str=str+"--$Sex";
    return str;
}
print(getInfo('张三',Sex:'女',Age:12));

3、匿名函数(函数赋值于变量在运行)
写法一:
var Name = (String name){
    print("这是一个匿名方法,输入的参数内容是 $name");
};
Name('aaa');

写法二:
void Name(String name){
      print("这是一个匿名方法,输入的参数内容是 $name");
};
var func = Name;
func('bbbb');

4、箭头函数
//普通代码
List list=;
var newList=list.map((value){
   if(value>2){
   return value*2;
   }
   return value;
});
print(newList.toList());
//上面代码通过箭头函数简写后的代码
var newList2=list.map((value)=>value>2?value*2:value);
print(newList2.toList());

//通过箭头函数输出list内容
list.forEach((value)=>print(value));

6、闭包函数(常驻内存/不污染全局)   
//闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
//闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。

func(){
    int a=1;
    func2(){
      a++;
      return a;
    }
    return func2;
}
var f = func();
print(f());//2
print(f());//3
print(f());//4


//类
class       //声明一个类
static      //声明一个静态属性或方法
abstract    //声明抽象类(dart在声明的时候只有普通类和抽象类不存在接口)

extends   //继承
with      //添加类(可以先继承类后在添加类,不能添加已经继承的类)
implements//以接口形式继承(可以一个或多个)

类名.方法名   //命名构造方法声明例:Person.row(this.name,this.sex){....}


运算符:
?   条件运算符
as    类型转换
is    类型判断
..    级联操作 (连缀)


命名构造方法

1、与对象同名的方法既为构造方法
2、方法或属性以 _ 开头即为私有
   
Web(String name,num age,String sex) : super(name, age){...}

super.func() / this.func()



//泛型函数
定义:
T getInfo<T>(T str){
return str;
}
运行:
print(getInfo<String>('123'));


//泛型类
定义:
class Data<T>{
List l = new List<T>();
add(T data){
    this.l.add(data);
}

printData(){
    this.l.forEach((value) {
      print(value);
    });
}
}

运行:
Data l = new Data<String>();
l.add('a');
l.add('b');
l.printData();


学习中记录这个只是为了忘记的时候方便查询!


奔波儿灞 发表于 2023-8-24 13:58:27

感谢楼主分享知识!
页: [1]
查看完整版本: dart各种声明与运算符/函数/方法