最近这几天看了下Dart的数据类型和运算符, 总的来说和其他语言差别不大,先简单的记录一下, 以后我会抽时间着重的介绍
变量
Dart 是脚本语言 可以不预先定义变量类型, 可以类型推断
var str = 'string' // var修饰的变量总动识别变量类型
String str = 'string'// 直接指定变量类型
// 1: 注意 写了var 和类型不要同时写 同时写就会报错
// 2: 用var 定义变量的时候 会自动推断类型(用 String 和int 定义变量的时候 会进行类型校验)
// 3: 使用var定义变量;可以不指定初始值,默认为null;可以给var定义的变量赋不同类型的值;
// 4: 个人建议在编码的时候如果可以确定变量类型,还是不要用var
注意:var在赋值之后 变量类型就确定了,不可更改。如果不确定变量类型是不是唯一,那么需要用dynamic或Object来修饰
Object name1 = 1;// 也可以用dynamic来修饰
name1 = 'ss'; //如果用var修饰 这里会报错
print(name1);
这里凸显了Dart的动态性, 用dynamic或Object修饰的变量可以更改类型
常量
定义后不可被更改,用const和final初始化
final age = 20;
// 或
const age = 170;
// 两者区别:
// 1: const是编译时常量,在编译时值就要确定下来
// final运行时常量
// 2: 只初始化一次(懒加载) 这个值可以在运行时确定
var num = 10;
final num1 = num;// 这样修饰是可以的, 这时num是变量 而num1是常量
// const num1 = num; 这样是不行的
num = 20 // 不会报错
num1 = 30 // 会报错
// 如果把num1 = 30 注释掉 程序可以正常运行
// 然后
print(num);
print(num1);
可以得到
num = 20
num1 = 10
// 可见 final的意思是: 将变量的num的值赋常量num1, 而且这一步是在运行时进行的
数组(List)
初始化
var li1 = ['111', '111', '111']
// 或者
var l2 = new List();
l2.add('张三');
l2.add('李四');
l2.add('王五');
print(l2);
print(l2[2]);
maps 类型 (类似json)
var preson = {
'name' : '张三',
'age' : 20,
'work' : ['iOS', 'Java']
};
print(preson);
print(preson['name']);
类型转换
//类型转换 (num 为 int或double)
// string -> num
var price = "123";
var myNum = double.parse(price);
// num -> string
var num = 123;
var str = num.toString();
is 可以判断变量是那种类型
var str = "123";
if(str is String) {
}
if(str is int) {
}
各种运算符
运算符在各种语言里都大同小异,还是简单的记录下吧
算术运算符
int a = 1;
int b = 2;
//加
print(a + b);
//减
print(a - b);
//乘
print(a * b);
//除
print(a / b);
//取整
int result = a ~/ b;
print(result);
//取余
print(a % b);
//自增
//前++,先给函数打印,后自增
print(a++);
//后++,先自增,再给函数打印
print(++a);
//先给函数打印,再自减
print(a--);
//先自减,再给函数打印
print(--a);
复合运算符
a += 2;
print(a);
a -= b;
print(a);
a *= b;
print(a);
print(a /= b);
print(a %= b);
关系运算符
//判断是否相等
print(a == b);
//判断是否不相等
print(a != b);
//是否大于
print(a > b);
//是否小于
print(a < b);
//是否大于等于
print(a >= b);
//是否小于等于
print(a <= b);
//双等号判断内容相等
String strA = '123';
//String strB = '321';
String strB = '123';
print(strA == strB);
逻辑运算符
bool isTrue = true;
//取反
print(!isTrue);
//并且
bool isFalse = false;
print(isTrue && isFalse);
//或者
print(isTrue || isFalse);
//日常取反用途
String str = "";
print(!str.isEmpty);
三目运算符
//int gender = 0;
int gender = 1;
//String str = gender == 0 ? 'Male' : 'Female';
//还可以加上插值表达式
String str = gender == 0 ? 'Male=$gender' : 'Female=$gender';
print(str);
最后介绍下Dart当中比较有特色的?? 和 ??=
// ??表达式,如果??前面的表达式为null,则使用??后面的值
String a;
//String a = 'Dart';
String b = "Java";
//a为null,所以会使用b的值返回
String c = a ?? b;
print(c);
// ??= 和?? 差不多
int b
b ??= 23;
// 如果b没被赋值 则把23赋给b
网友评论