1. Dart中常见数据类型一览:
数据类型.pngDart的常见的数据类型有以下8种:
1.1 数字类型
num、int和double都是Dart中的类,也就是说它是对象级别的,所以他们的默认值为null。这不同于Java的基本数据类型。
main(){
num age = 18;//num数据类型
int height =180;//int整型
double weight=62.5;//double 浮点型
print(height/weight is double);//true
print(height*age is double);//false
print(age/height is double);//true
}
1.2 布尔类型
布尔类型作为判断的标识,活跃在各大语言中的逻辑判断中,它只有
true
和false
两种选择。这里注意关键字是bool
,而非Java中的boolean
。
bool isMan = true;
bool isMarried = false;
1.3 字符串类型
字符串是一种语言不可或缺的部分,Dart也不例外。它支持单引号、双引号、以及三引号。需要注意的是单引号中的单引号需要转义,三引号中的字符内容会原样输出。
String name = '张哈哈先生';//支持单引号
String proverbs ="'海的彼岸有我未曾见证的风采'";//支持双引号
String poem=""" //支持三引号
石榴酒,葡萄浆。
兰桂芳,茱萸香。
愿君驻金鞍,暂此共年芳。
愿君解罗襦,一醉同匡床。
文君正新寡,结念在歌倡。
昨宵绮帐迎韩寿,今朝罗袖引潘郎。
莫吹羌笛惊邻里,不用琵琶喧洞房。
且歌新夜曲,莫弄楚明光。
此曲怨且艳,哀音断人肠。
""";
print('${name}\n$proverbs\n$poem');//支持字符串中使用变量
1.4 列表类型
List作为一个同类多元素的容器,也是每种语言必备。Dart中的List作为一个类存在,可以当做可操作的数组来对待,起始索引为0。其他语言中对于数组的操作,Dart中基本都有相关的API。
main() {
List<int> list = new List();
List<int> list1 = List();
List<int> list2=[1,2,3,4,5];//提示:Dart推断list的类型为List<int> 。如果尝试将非整数对象添加到此List中,则分析器或运行时会引发错误。有关更多信息,可以学习 类型推断。
print(list2[1]);//获取下标为1的值
//遍历数组
//iter for-in 模板
for (var o in list) {
}
//itar for-i模板
for (var i = 0; i < list1.length; ++i) {
var o = list1[i];
}
1.5 集合类型
Set作为一个盛放不含重复元素的无序多元素容器,如果添加一个已经存在的元素,是无法添加成功的。所以它没有索引。但有很多方法可以对集合进行操作。
Set<String> languages = {'Java', 'Dart', 'Python', 'C++', 'Kotlin',"Java"};
print(languages);//{Java, Dart, Python, C++, Kotlin}
print(languages.add('Java'));//false
print(languages.add('JavaScript'));//true
1.6 Map类型
Map为若干个键值对的容器,想用映射之名。其中一个Map对象中的键不能重复,值是可以重复的。
Map<int, String> map = {1: 'one', 2: 'two', 3: 'three'};
print(map[3]);//three
map[4] = 'four';
print(map.length);//4
2. Dart中的变量与常量
Dart
作为一名新时代的后起之秀,var
自然不能少。Dart
语言中对象的类型是可以自动推导的。也就是说,上面的代码在声明变量类型时,都可以用一个var
关键字解决。
2.1 var关键字的使用
//1.不指定类型
var age = 18;
var isMan = true;
var name = '张哈哈先生';
var languages1 = ['Java', 'Dart', 'Python', 'C++', 'Kotlin'];
//2.明确指定类型
String name = '张哈哈先生';
因为有类型推导,所以两种实现效果一样,官方推荐在函数内的本地变量尽量使用
var
声明。在变量类型并不明确的情况下,可以使用dynamic
关键字
2.2 var的注意事项
如果只是用
var
声明变量,该变量之后是可以修改数据类型的。
var who;
who="what";
print(who is String);//true
who=10;
print(who is int);//true
如果声明的同时去赋值,那么该对象的类型就是固定的,不可修改的。
var who="what";
print(who is String);//true
who=10;//此处报错
print(who is int);//true
下面一幅图可以很好地说明原因:
2.3 常量的定义
如果一个变量你以后不打算修改,可以使用
final
或者const
进行修饰,当你试图修改它的值,就会报错。
final PI = 3.14159265;
PI=4;// ERROR: 'PI', a final variable, can only be set once.
const Pi = 3.14159265;
Pi=4;// ERROR: Constant variables can't be assigned a value.
2.4 const和final的区别
1、一个 final 变量只能赋值一次: 它的值可以在运行时获取
2、一个 const 变量是编译时常量:代码还没有运行时我们就知道它声明变量的值
3、举例,同样是当前时间,final修饰的f对象是正确的,但const修饰的c是错误的,原因是final可以在运行时对变量初始化,但const不行。
final f = DateTime.now(); // OK
const c = DateTime.now(); // ERROR Const variables must be initialized with a constant value.
3. Dart中的运算符
常见运算符.png3.1 算术运算符
四则运算
print(1 + 2);//3 加
print(1 - 2);//-1 减
print(1 * 2);//2 乘
print(1 / 2);//0.5 除
print(10 % 3);//1 余
print(10 ~/ 3);//3 商
自加自减
---->[情况1:i++]----
int i=3;
var a=i++;//执行赋值后i才自加,故a=3
print('a=$a,i=$i');//a=3,i=4
---->[情况2:++i]----
int i=3;
var a=++i;//执行赋值前i已经自加,故a=4
print('a=$a,i=$i');//a=4,i=4
---->[情况3:i--]----
int i=3;
var a=i--;//执行赋值后i才自减,故a=3
print('a=$a,i=$i');//a=3,i=2
---->[情况4:--i]----
int i=3;
var a=--i;//执行赋值前i已经自减,故a=2
print('a=$a,i=$i');//a=2,i=2
3.2 关系运算符
print(1 > 2); //false 大于
print(1 < 2); //true 小于
print(1 == 2); //false 等于
print(1 != 2); //true 不等
print(10 >= 3); //true 大于等于
print(10 <= 3); //false 小于等于
3.3 逻辑运算符
bool enter(int age, int height, bool isMan) {
return (age > 18 || height > 160) && !isMan;
}
代码表示:年龄大于18或者身高大于160的女性可以进入。
3.4 条件表达式
三元运算符:
条件? 表达式1: 表达式2
条件成立执行前者,否则,执行后者
var height =130;
var pay = (height>120) ? 200:100;
print(pay);//200
??运算符:
表达式1 ?? 表达式2
前表达式值为null则取后者。否则,后表达式不会被执行
//条件表达式
var conditionBool = true;
print(conditionBool? 'true': 'false');
conditionBool = null;
print(conditionBool ?? 'This message will show when conditionBool is null')
//运行结果
true
This message will show when conditionBool is null
4. Dart中的函数
Dart中,一个函数的基本组成如下:
4.1 基本使用
两个数相加
double add(double a,double b){
return a+b;
}
调用:add(10,20);//30
4.2 可选参数+默认值
两个数相加,并且可以打个折扣
double add(double a,double b,[double discount=1.0]){
return (a+b)*discount;
}
调用:add(10,20,0.7);//21
4.3 属性型参数
将参数和一个key对应起来,非常方便和清晰的传参模式
double add(double a,double b,{double discount=1.0,double c=0,double d =0}){
return (a+b+c+d)*discount;
}
调用:add(10, 20,discount: 0.7,c: 100);//91.0
4.4 函数参数
函数本身也是一个对象,可以作为参数传入。
double add(double a,double b,deal){
return deal(a)+deal(b);
}
var fun = (double i) {
return i * i;
};
调用:
print(add(3, 4, fun));//求两数的平方和
4.5 函数简写
var fun = (double i) {
return i * i;
};
可以简写为:
var fun = (i) {
return i * i;
};
进一步可以简写为:
var fun = (i)=> i * i;
void main() => runApp(MyApp());
它相当于:
void main() {
return runApp(MyApp());
}
网友评论