基本类型生命以后都是null值 没有默认java
int i = 1; //整数值
double d = 1.0; //double 64-bit (双精度) 浮点数
double.maxFinite; //最大值
//int和double都是num的子类
num n1 = 1;
num n2 = 1.0;
//转换
//String->int
int i2 = int.parse('1');
double d2 = 1; //当double的值为int值时,int自动转成double
//试着去分析 若是有误返回null
int i2 = int.tryParse('1.0');//返回null
//int->String
String str = 123.toString(); //数字也是对象
复制代码
var name = '123';
var names = '123 ${name}'; //拼接
var rawNames = r'123 ${name}'; //加r前缀 打印出来的结果是 '123 ${name}'
//三个单引号或者双引号 能够换行
var multiLinesString = ''' dongnao damon''';
复制代码
//StringBuffer
var sb = StringBuffer(); //dart 2 能够省略new
//..级联符实现链式调用
sb..write('aaa')..write('bbb')..write('ccc');
sb.writeAll(['ddd', 'eee', 'fff'], ','); //第二个参数表示分隔符,将第一个参数列表里的数据用这个分隔符拼接起来
复制代码
bool isNull;
//自动长度
List growableList = List();
List growableList = new List()..length = 3;
//固定长度
var list = List(3); //List的声明,能够用var也可用List。
//元素类型固定
var typeList = List<int>();
复制代码
int first = typeList.first; //第一个
int last = typeList.last; //最后一个
int length = typeList.length; //长度
bool isEmpty = typeList.isEmpty; //是空
bool isNotEmpty = typeList.isNotEmpty;// 不是空
Iterable reversed = typeList.reversed; //反转
复制代码
var list4 = [];
// 添加 插入
list4.add(1);
list4.addAll([2, 3, 4]);
list4.insert(0, 0);
list4.insertAll(1, [5, 6, 7]);
//删
list4.remove(5);
list4.removeAt(2);
//改
list4[4] = 5;
//range 从0开始 连续的三个数会被修改为9 批量修改
list4.fillRange(0, 3, 9);
//获取水印区间的值
Iterable getRange = list4.getRange(0, 3);
//查
//是否包含
var contains = list4.contains(5);
//获取value的索引
var indexOf = list4.indexOf(1);
//条件去查找value的索引
int indexWhere = list4.indexWhere((test) => test == 5);
//排序
list4.sort();
//洗牌
list4.shuffle();
//复制子列表 截取列表中一段
var list5 = list4.sublist(1);
//操做符 集合相加
var list6 = [8, 9];
var list7 = list5 + list6;
复制代码
Set无重复列表
var dynamicSet = Set();
var set1 = {'123', 'asd'};
var set2 = {'123', 'qwe', 'asd'};
//set1 里独有的元素
var difference12 = set1.difference(set2);
//set2中独有的袁术
var difference21 = set2.difference(set1);
//交集
var intersection = set1.intersection(set2);
//并集
var union = set1.union(set2);
/只保留目标集合到当前set中
set2.retainAll(['123', 'asfd']);
复制代码
//forEach
collection.forEach((item) => print('forEach: $item'));
//for-in遍历元素
for (var item in collection) {
print('for-in: $item');
}
复制代码
var dynamicMap = Map();
var map = Map<int, String>();
var map1 = {'name': 'dongnao', 1: 'android'};
map1.addAll({'name':'damon'});
复制代码
//经常使用属性
(map.isEmpty); //是否为空
(map.isNotEmpty); //是否不为空
(map.length); //键值对个数
(map.keys); //key 集合
(map.values); //value集合
复制代码
//Runes用于在字符串中表示Unicode字符 https://copychar.cc/emoji/
String runesStr = '👄';
Runes runes = new Runes('\u{1f605} \u6211');
var str1 = String.fromCharCodes(runes); //使用String.fromCharCodes显示字符图形
String str2 = '\u{1f605} \u6211'; //若是非4个数值,须要把编码值放到大括号中
复制代码
ymbol标识符 主要是反射用,如今mirrors已经被移除了
全部的函数都返回一个值。若是没有指定返回值,则 默认把语句 return null; 做为函数的最后一个语句执行。android
main() {
//普通函数定义
int add(int x, int y) {
return x + y;
}
testFunc() {}
//可省略参数类型(不建议)
add1(x, y) {
return x + y;
}
//箭头函数:=>表达式
int add2(int x, int y) => x + y;
//可选命名参数:使用 {param1, param2, …} 的形式来指定命名参数
int add3({int x, int y, int z}) {
x ??= 1;
y ??= 2;
z ??= 3;
return x + y + z;
}
//可选位置参数:把可选参数放到 [] 中,必填参数要放在可选参数前面
int add4(int x, [int y, int z]) {
y ??= 2;
z ??= 3;
return x + y + z;
}
//可选命名参数默认值(默认值必须是编译时常量),目前能够使用等号'='或冒号':'
int add5(int x, {int y = 2, int z = 3}) {
return x + y + z;
}
//可选位置参数默认值(默认值必须是编译时常量),只能使用等号'='
int add6(int x, [int y = 2, int z = 3]) {
return x + y + z;
}
//使用list或map做为默认值,但必须是const
void func(
{List list = const [1, 2, 3],
Map map = const {1: 1, 'name': 'dongnao'}}) {
//TODO ...
}
//无参匿名函数
var anonFunc1 = () => print('无参匿名函数');
//有参匿名函数
var anonFunc = (name) => 'I am $name';
//匿名函数传参
List test(List list, String func(str)) {
for (var i = 0; i < list.length; i++) {
list[i] = func(list[i]);
}
return list;
}
var list = ['d', 'a', 'm', 'o', 'n'];
test(list, (str) => str * 2)
//List.forEach()就用的匿名函数
List list1 = [11, 12, 13];
list1.forEach((item) => print('$item'));
//返回Function对象(闭包)
Function makeAddFunc(int x) {
x++;
return (int y) => x + y;
}
var addFunc = makeAddFunc(2);
print(addFunc(3));
// 函数别名
MyFunc myFunc;
//能够指向任何同签名的函数
myFunc = subtsract;
myFunc(4, 2);
myFunc = divide;
myFunc(4, 2);
//typedef 做为参数传递给函数
calculator(4, 2, subtsract);
}
//函数别名
typedef MyFunc(int a, int b);
//根据MyFunc相同的函数签名定义两个函数
subtsract(int a, int b) {
print('subtsract: ${a - b}');
}
divide(int a, int b) {
print('divide: ${a / b}');
}
//typedef 也能够做为参数传递给函数
calculator(int a, int b, MyFunc func) {
func(a, b);
}
复制代码
?. 判空的bash
as、is、is! 强转 , 是这个类型返回true, 是这个类型返回false闭包
A/B=D,A ~/ B = C D是带精度的数字 C是个整数 就是商ide
三目运算符 A ? A : B 或者A ?? B函数
.. 级联操做符 返回使用的当前对象ui
//抛出Exception对象
throw new FormatException('格式异常');
//抛出Error对象
throw new NullThrownError();
//抛出任意非null对象
throw '这是一个异常';
/// ---------------------------------异常的捕获try catch--------------------------------
try {
throw new OutOfMemoryError();
} on OutOfMemoryError {
//on 指定异常类型
// rethrow; //把捕获的异常给 从新抛出
} on Error {
//捕获Error类型
} on Exception catch (e) {
//捕获Exception类型
} catch (e, s) {
//catch() 能够带有一个或者两个参数, 第一个参数为抛出的异常对象, 第二个为StackTrace对象堆栈信息
}
复制代码