
1. Dart中常見(jiàn)數(shù)據(jù)類(lèi)型一覽:
Dart的常見(jiàn)的數(shù)據(jù)類(lèi)型有以下8種:

1.1 數(shù)字類(lèi)型
num、int和double都是Dart中的類(lèi),也就是說(shuō)它是對(duì)象級(jí)別的,所以他們的默認(rèn)值為null。這不同于Java的基本數(shù)據(jù)類(lèi)型。
main(){
num age = 18;//num數(shù)據(jù)類(lèi)型
int height =180;//int整型
double weight=62.5;//double 浮點(diǎn)型
print(height/weight is double);//true
print(height*age is double);//false
print(age/height is double);//true
}
1.2 布爾類(lèi)型
布爾類(lèi)型作為判斷的標(biāo)識(shí),活躍在各大語(yǔ)言中的邏輯判斷中,它只有
true和false兩種選擇。這里注意關(guān)鍵字是bool,而非Java中的boolean。
bool isMan = true;
bool isMarried = false;
1.3 字符串類(lèi)型
字符串是一種語(yǔ)言不可或缺的部分,Dart也不例外。它支持單引號(hào)、雙引號(hào)、以及三引號(hào)。需要注意的是單引號(hào)中的單引號(hào)需要轉(zhuǎn)義,三引號(hào)中的字符內(nèi)容會(huì)原樣輸出。
String name = '張哈哈先生';//支持單引號(hào)
String proverbs ="'海的彼岸有我未曾見(jiàn)證的風(fēng)采'";//支持雙引號(hào)
String poem=""" //支持三引號(hào)
石榴酒,葡萄漿。
蘭桂芳,茱萸香。
愿君駐金鞍,暫此共年芳。
愿君解羅襦,一醉同匡床。
文君正新寡,結(jié)念在歌倡。
昨宵綺帳迎韓壽,今朝羅袖引潘郎。
莫吹羌笛驚鄰里,不用琵琶喧洞房。
且歌新夜曲,莫弄楚明光。
此曲怨且艷,哀音斷人腸。
""";
print('${name}\n$proverbs\n$poem');//支持字符串中使用變量
1.4 列表類(lèi)型
List作為一個(gè)同類(lèi)多元素的容器,也是每種語(yǔ)言必備。Dart中的List作為一個(gè)類(lèi)存在,可以當(dāng)做可操作的數(shù)組來(lái)對(duì)待,起始索引為0。其他語(yǔ)言中對(duì)于數(shù)組的操作,Dart中基本都有相關(guān)的API。
main() {
List<int> list = new List();
List<int> list1 = List();
List<int> list2=[1,2,3,4,5];//提示:Dart推斷l(xiāng)ist的類(lèi)型為L(zhǎng)ist<int> 。如果嘗試將非整數(shù)對(duì)象添加到此List中,則分析器或運(yùn)行時(shí)會(huì)引發(fā)錯(cuò)誤。有關(guān)更多信息,可以學(xué)習(xí) 類(lèi)型推斷。
print(list2[1]);//獲取下標(biāo)為1的值
//遍歷數(shù)組
//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 集合類(lèi)型
Set作為一個(gè)盛放不含重復(fù)元素的無(wú)序多元素容器,如果添加一個(gè)已經(jīng)存在的元素,是無(wú)法添加成功的。所以它沒(méi)有索引。但有很多方法可以對(duì)集合進(jìn)行操作。
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類(lèi)型
Map為若干個(gè)鍵值對(duì)的容器,想用映射之名。其中一個(gè)Map對(duì)象中的鍵不能重復(fù),值是可以重復(fù)的。
Map<int, String> map = {1: 'one', 2: 'two', 3: 'three'};
print(map[3]);//three
map[4] = 'four';
print(map.length);//4
2. Dart中的變量與常量
Dart作為一名新時(shí)代的后起之秀,var自然不能少。Dart語(yǔ)言中對(duì)象的類(lèi)型是可以自動(dòng)推導(dǎo)的。也就是說(shuō),上面的代碼在聲明變量類(lèi)型時(shí),都可以用一個(gè)var關(guān)鍵字解決。
2.1 var關(guān)鍵字的使用
//1.不指定類(lèi)型
var age = 18;
var isMan = true;
var name = '張哈哈先生';
var languages1 = ['Java', 'Dart', 'Python', 'C++', 'Kotlin'];
//2.明確指定類(lèi)型
String name = '張哈哈先生';
因?yàn)橛蓄?lèi)型推導(dǎo),所以?xún)煞N實(shí)現(xiàn)效果一樣,官方推薦在函數(shù)內(nèi)的本地變量盡量使用
var聲明。在變量類(lèi)型并不明確的情況下,可以使用dynamic關(guān)鍵字
2.2 var的注意事項(xiàng)
如果只是用
var聲明變量,該變量之后是可以修改數(shù)據(jù)類(lèi)型的。
var who;
who="what";
print(who is String);//true
who=10;
print(who is int);//true
如果聲明的同時(shí)去賦值,那么該對(duì)象的類(lèi)型就是固定的,不可修改的。
var who="what";
print(who is String);//true
who=10;//此處報(bào)錯(cuò)
print(who is int);//true
下面一幅圖可以很好地說(shuō)明原因:
2.3 常量的定義
如果一個(gè)變量你以后不打算修改,可以使用
final或者const進(jìn)行修飾,當(dāng)你試圖修改它的值,就會(huì)報(bào)錯(cuò)。
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的區(qū)別
1、一個(gè) final 變量只能賦值一次: 它的值可以在運(yùn)行時(shí)獲取
2、一個(gè) const 變量是編譯時(shí)常量:代碼還沒(méi)有運(yùn)行時(shí)我們就知道它聲明變量的值
3、舉例,同樣是當(dāng)前時(shí)間,final修飾的f對(duì)象是正確的,但const修飾的c是錯(cuò)誤的,原因是final可以在運(yùn)行時(shí)對(duì)變量初始化,但const不行。
final f = DateTime.now(); // OK
const c = DateTime.now(); // ERROR Const variables must be initialized with a constant value.
3. Dart中的運(yùn)算符

3.1 算術(shù)運(yùn)算符
四則運(yùn)算

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++;//執(zhí)行賦值后i才自加,故a=3
print('a=$a,i=$i');//a=3,i=4
---->[情況2:++i]----
int i=3;
var a=++i;//執(zhí)行賦值前i已經(jīng)自加,故a=4
print('a=$a,i=$i');//a=4,i=4
---->[情況3:i--]----
int i=3;
var a=i--;//執(zhí)行賦值后i才自減,故a=3
print('a=$a,i=$i');//a=3,i=2
---->[情況4:--i]----
int i=3;
var a=--i;//執(zhí)行賦值前i已經(jīng)自減,故a=2
print('a=$a,i=$i');//a=2,i=2
3.2 關(guān)系運(yùn)算符

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 邏輯運(yùn)算符

bool enter(int age, int height, bool isMan) {
return (age > 18 || height > 160) && !isMan;
}
代碼表示:年齡大于18或者身高大于160的女性可以進(jìn)入。
3.4 條件表達(dá)式
三元運(yùn)算符:
條件? 表達(dá)式1: 表達(dá)式2
條件成立執(zhí)行前者,否則,執(zhí)行后者
var height =130;
var pay = (height>120) ? 200:100;
print(pay);//200
??運(yùn)算符:
表達(dá)式1 ?? 表達(dá)式2前表達(dá)式值為null則取后者。否則,后表達(dá)式不會(huì)被執(zhí)行
//條件表達(dá)式
var conditionBool = true;
print(conditionBool? 'true': 'false');
conditionBool = null;
print(conditionBool ?? 'This message will show when conditionBool is null')
//運(yùn)行結(jié)果
true
This message will show when conditionBool is null
4. Dart中的函數(shù)
Dart中,一個(gè)函數(shù)的基本組成如下:

4.1 基本使用
兩個(gè)數(shù)相加
double add(double a,double b){
return a+b;
}
調(diào)用:add(10,20);//30
4.2 可選參數(shù)+默認(rèn)值
兩個(gè)數(shù)相加,并且可以打個(gè)折扣
double add(double a,double b,[double discount=1.0]){
return (a+b)*discount;
}
調(diào)用:add(10,20,0.7);//21
4.3 屬性型參數(shù)
將參數(shù)和一個(gè)key對(duì)應(yīng)起來(lái),非常方便和清晰的傳參模式
double add(double a,double b,{double discount=1.0,double c=0,double d =0}){
return (a+b+c+d)*discount;
}
調(diào)用:add(10, 20,discount: 0.7,c: 100);//91.0
4.4 函數(shù)參數(shù)
函數(shù)本身也是一個(gè)對(duì)象,可以作為參數(shù)傳入。
double add(double a,double b,deal){
return deal(a)+deal(b);
}
var fun = (double i) {
return i * i;
};
調(diào)用:
print(add(3, 4, fun));//求兩數(shù)的平方和
4.5 函數(shù)簡(jiǎn)寫(xiě)
var fun = (double i) {
return i * i;
};
可以簡(jiǎn)寫(xiě)為:
var fun = (i) {
return i * i;
};
進(jìn)一步可以簡(jiǎn)寫(xiě)為:
var fun = (i)=> i * i;
void main() => runApp(MyApp());
它相當(dāng)于:
void main() {
return runApp(MyApp());
}
