Dart的数据类型
这个我学习Flutter的第二天,因为学习Flutter的肯定得学习Dart语言,Dart是Flutter的主要开发语言。我的第一个感觉是Dart的语法好像是python和java的结合体,虽然他也有属于他自己的一些语法,但是整体来说,主要学了一门语言,大部分都是相通的,只是可能表达形式不一样。
我学习视频的那个老师博客地址,老师说的很不错,清晰易懂。
Flutter学习第一天:小伙花饭钱去买Flutter教学视频,只为了知道Flutter是否支持双系统开发?
Flutter学习的第三天:面向对象编程Dart语言的学习还能让我回忆java基础,“诚不欺我”真的能够快速上手。
Flutter学习第四天:StatelessWidget常用组件总结,撑起Flutter的半边天?
Dart的常用数据类型
关于打印到控制台的小知识:
单个数据的话
:
num a=1;
print(a);
多个数据的话
:
$符号后面跟你需要打印的数据
,和我们java,Python的%的功能挺像的。
num a=1,b=3;
print("a:$a b:$b");
如果数据是下面这种形式的话
:
输出的是两个方法的数据的话,需要用{}括起来。
List list=[1,2,3];
print("数据1:${list.indexOf(1)} 数据2:${list.indexof(2)}"}
1.num
num:数值型变量
,可以存储(整数,浮点数)。
num num1=-1.0;
num num2=2;
num num3=3.18;
print("num:$num1 num:$num2 num:$num3");
输出:
2.int、double类型
int int1=3;
double d1=1.68;
print("int:$int1 double:$d1");
输出:
num的方法:
num num1=-1.0;
print(num1.abs()); //求绝对值
print(num1.toInt()); //转换成int
print(num1.toDouble()); //转换成Double
3.String类型
1.可以用双引号或者单引号
来赋值。
2.有两种字符串拼接
方式,如下方代码。
String str1='字符串',str2="双引号"; //可以用双引号,或者单引号
String str3='str1:$str1 str2:$str2'; //字符串拼接
String str4='str1:'+str1+' str2:'+str2; //字符串拼接
print(str3)
print(str4)
输出:
字符串的常用方法:
String str5='常用数据类型,请空控制台输出输出';
print(str5.split('类型')); //字符串在类型处进行分割存入集合
print(str5.substring(1,5)); //字符串截取
print(str5.indexOf('类型')); //获取指定字符串位置
String str6 = 'https://www.baidu.com/';
print(str6.startsWith("https")); //检测字符串是否以指定的子字符串开始
print(str6.endsWith("/")); //检测字符串是否以/结尾
print(str6.toUpperCase()); //所有小写字母转化为大写
print(str6.toLowerCase()); //所有大写字母转化为小写
print(str6.length); //长度
print(str6.replaceFirst('t', 'p')); //只替换字符串里面的第一个出现的t
print(str6.replaceAll('t','p')); //替换数据,把字符串里面所有的t替换成p
输出:
4.bool类型
bool success=true,fail=false;
print(success);
print(fail);
print(success||fail); //true 或
print(success&&fail); //false 与
输出:
5.List类型
1.List类型添加数据的两种方式
List list=[1,2,3,4,'集合']; //初始化时添加元素
print(list);
List list3=[];
list3.add('list3'); //通过add方法添加元素
list3.addAll(list); //把list中数据添加到list3中
输出:
2.其他方法:
集合之间赋值:把list中的值传递给list2
,关于dynamic,我下面会说明。
List list=[1,2,3,4,'集合']; //初始化时添加元素
print(list);
List<dynamic> list2=[];
list2=list;
print(list2);
generate方法和Pythonrange方法类似。
List list4=List.generate(3, (index) => index*2);
print(list4);
输出:
3.List类型遍历的三种方法:
List list=[1,2,3,4,'集合'];
for(int i=0;i<list.length;i++){
print(list[i]);
}
for(var o in list){
print(o);
}
list.forEach((val) {
print(val);
});
4.常用方法
List list=[1,2,3,4,'集合']; //初始化时添加元素
print(list.remove('集合')); // 删除第一个匹配的数据
print(list.removeAt(3)); //删除第三个数据
list.removeRange(2, 3); //删除下标为2的数据
print(list);
print(list.indexOf(3)); //找到第一个满足条件的下标
list.insert(2, 'json'); //插入数据
print(list);
list.insertAll(2, ['bad','good']); //插入一个数组
print(list);
List list1=[1,2,3,4,6];
list1.retainWhere((value) => value % 2 == 0);
print(list); //删除不满足的条件
6.Map类型
1.Map类型的添加数据的两种方式
Map names={'xiaoming':'小明','xiaohong':'小红'};
print(names);
Map ages={};
ages['xiaoming']=16;
ages['xiaohong']=18;
print(ages);
输出:
2.Map类型的遍历
ages.forEach((key, value) {
print('$key,$value');
});
for (var key in ages.keys) {
print('$key ${ages[key]}');
}
输出:
3.Map类型之间传值
Map ages2=ages.map((key, value){
return MapEntry(key, value);
});
print(ages2);
7.dynamic、var、Object三者的区别
我学习视频老师是这样说的:
dynamic:是所有Dart对象的基础类型, 在大多数情况下,通常不直接使用它,
通过它定义的变量会关闭类型检查,这意味着 dynamic x = 'hal';x.foo();
这段代码静态类型检查不会报错,但是运行时会crash,因为x并没有foo()方法,所以建议大家在编程时不要直接使用dynamic;
var:是一个关键字,意思是“我不关心这里的类型是什么。”,系统会自动推断类型runtimeType;
Object:是Dart对象的基类,当你定义:Object o=xxx;时这时候系统会认为o是个对象,你可以调用o的toString()和hashCode()方法
因为Object提供了这些方法,但是如果你尝试调用o.foo()时,静态类型检查会进行报错;
综上不难看出dynamic与Object的最大的区别是在静态类型检查上;
1.个人认为dynamic,object两个和var的还是很容易区别的,如下图:
(其中runtimeType方法是来查看类型的)
dynamic和object:开始x和o1都是字符串类型,把他们赋值为int类型不会报错
。因为dynamic是所有Dart对象的基础类型,Object是Dart对象的基类(父类)。
var:如果开始为字符串类型,赋值为int类型会爆红
。因为var第一次赋值会确定它的类型。
2.dynamic,object的区别,dynamic与Object的最大的区别是在静态类型检查上
dynamic:可以看到x可以进行++操作
。因为dynamic不需要类型转换的原因是dynamic跳过编译类型检查。
Object:进行o1++操作的话会爆红
。object没有做类型转换,不能进行直接的计算操作
持续学习中。。。。。