Dart簡(jiǎn)介
- Dart 是面向?qū)ο蟮?、類定義的、單繼承的語(yǔ)言,它的語(yǔ)法類似 C 語(yǔ)言,可以轉(zhuǎn)譯為 JavaScript,支持接口 (interfaces)、混入 (mixins)、抽象類 (abstract classes)、具體化泛型 (reified generics)、可選類型 (optional typing) 和 sound type system;
VSCode環(huán)境搭建
- 在學(xué)習(xí)Dart語(yǔ)法時(shí),本人使用的是VSCode編輯器,下載官方網(wǎng)址為:https://code.visualstudio.com/
- 其次安裝Flutter,Dart,Code Runner三個(gè)插件,如下所示:

image.png
- 然后在桌面上創(chuàng)建一個(gè)文件夾
01_Dart基本語(yǔ)法,用VSCode打開(kāi),再創(chuàng)建dart文件,就可以進(jìn)行Dart語(yǔ)法演練了;
main函數(shù)
- Dart語(yǔ)言的入口是
main函數(shù),并且必須顯示的進(jìn)行定義; - Dart的入口函數(shù)main是沒(méi)有返回值的;
- 傳遞給main函數(shù)的命令行參數(shù),是通過(guò)List<String>完成的;
- 代碼展示如下:

image.png
變量
- 在Dart語(yǔ)言中,
所有的變量都可視為一個(gè)對(duì)象,所有的對(duì)象都看作一個(gè)類的實(shí)例,數(shù)字、函數(shù)、null也是對(duì)象,所有的對(duì)象都派生自Object類;
變量的定義與初始化
- 關(guān)鍵字
var和dynamic都可以定義變量,兩者最大的區(qū)別在于var定義的變量,在初始化后類型確定不可更改,dynamic定義的變量,類型隨值類型的變化而變化; - 通過(guò)
var關(guān)鍵字定義變量,表明變量的值是可以發(fā)生改變的; - 定義變量之后,未進(jìn)行初始化,系統(tǒng)默認(rèn)賦值為
null;
void main(List<String> args) {
var num;
if (num == null) {
print("num is null"); //執(zhí)行 num = null
} else {
print("num = ${num}");
}
int a;
if (a == null) {
print("a is null"); //執(zhí)行 a = null
} else {
print("num = ${num}");
}
}
- 整型變量a,定義之后未進(jìn)行初始化,默認(rèn)賦值為null,表明a也是一個(gè)對(duì)象;
- 使用var關(guān)鍵字定義變量,變量在進(jìn)行初始化之后,變量的類型也就確定了,表明Dart語(yǔ)言支持
類型推斷;
void main(List<String> args) {
var a = 100;
a = "yanzi";
}
- 上述代碼出現(xiàn)報(bào)錯(cuò),
Error: A value of type 'String' can't be assigned to a variable of type 'int',原因在于變量a,在進(jìn)行初始化時(shí),系統(tǒng)經(jīng)類型推斷確認(rèn)為int類型,是不能賦值字符串?dāng)?shù)據(jù)的; - 通過(guò)
dynamic關(guān)鍵字定義變量,dynamic類型的變量,在使用中可以隨時(shí)改變其類型,系統(tǒng)會(huì)根據(jù)該變量的當(dāng)前值類型確定其當(dāng)前時(shí)刻的類型;
void main(List<String> args) {
dynamic a = 100;
a = "yanzi";
}
- 上述代碼不會(huì)報(bào)錯(cuò),也就是說(shuō)
dynamic修飾的變量,可以隨時(shí)更改變量的數(shù)據(jù)類型;
常量
- 關(guān)鍵字
const和final,都可定義常量,其值不可發(fā)生更改,且定義與初始化同時(shí)進(jìn)行,否則會(huì)報(bào)錯(cuò); -
const定義的常量,在編譯時(shí)就已經(jīng)初始化,且不可改變; -
final定義的常量,在運(yùn)行時(shí)進(jìn)行初始化,且不可改變;
void main(List<String> args) {
const a1 = "yanzi";
const int a2 = 100;
print(a1);
print(a2);
final name1 = "yanzi";
final String name2 = "sss";
print(name1);
print(name2);
}
數(shù)據(jù)類型
- 在Dart語(yǔ)言中,支持的數(shù)據(jù)類型有8種,依次是
num數(shù)值類型,String字符串類型,bool布爾型,List數(shù)組類型,Map字典類型,Set集合類型,Runes類型,Symbols類型;
num數(shù)值類型
- num數(shù)值類型有兩種分別為
int和double,均繼承自num類;
void main(List<String> args) {
int a = 100;
double b = 120.2;
print("a = ${a}");
print("b = $");
double c = 200; //自動(dòng)將int轉(zhuǎn)成double
print("c = ${c}");
}
-
double c = 200,會(huì)自動(dòng)將int轉(zhuǎn)成double類型;
String字符串類型
- 在Dart中,可使用
雙引號(hào),也可以使用單引號(hào)創(chuàng)建字符串; - 可以用
${字符串變量名},引用字符串;
void main(List<String> args) {
String name1 = "yanzi";
String name2 = 'SF';
var name3 = "ssss";
print("name1 = ${name1}");
print("name2 = ${name1}");
print("name3 = ${name1}"); //name3 = yanzi
}
字符串的常用方法
- 獲取字符串長(zhǎng)度
void main(List<String> args) {
String name1 = "yanzi";
print(name1.length); //5
}
- 判斷字符串是否為空
void main(List<String> args) {
String name1 = "yanzi";
print(name1.isEmpty); //false
}
- 判斷字符串是否不為空
void main(List<String> args) {
String name1 = "yanzi";
print(name1.isNotEmpty); //true
}
- 字符串拼接
- 使用
加號(hào)+,進(jìn)行字符串拼接; - 使用
${字符串變量名},進(jìn)行字符串內(nèi)嵌,實(shí)現(xiàn)字符串拼接效果;
- 使用
void main(List<String> args) {
String name1 = "yanzi";
String name2 = " ssss";
String name3 = name1 + name2;
String name4 = "asd" + "123";
print("name3 = " + name3); //name3 = yanzi ssss
print("name3 = ${name3}"); //name3 = yanzi ssss
print("name4 = " + name4); //name4 = asd123
}
- 字符串截取
void main(List<String> args) {
String name1 = "aaabbb";
//截取指定區(qū)間的字符串
print(name1.substring(0, 2)); //aa
//截取指定index至末尾
print(name1.substring(3)); //bbb
//利用 指定字符 切割 獲取數(shù)組
String str = "a,b,c,d,e";
List<String> strs = str.split(",");
print(strs); //[a, b, c, d, e]
}
- 字符串轉(zhuǎn)化大小寫(xiě)
void main(List<String> args) {
String name1 = "aaabbb";
String name2 = "AddSSS";
//轉(zhuǎn)成大寫(xiě)
print(name1.toUpperCase()); //AAABBB
//轉(zhuǎn)成小寫(xiě)
print(name2.toLowerCase()); //addsss
}
- 字符串去除空格
void main(List<String> args) {
String name1 = " aaabbb ";
//去除左右兩邊空格
print(name1.trim()); //
//去除左邊空格
print(name1.trimLeft());
//去除右邊空格
print(name1.trimRight());
}
bool布爾型
- 使用關(guān)鍵字
bool定義布爾型變量,屬于bool類型;
void main(List<String> args) {
bool isTop = false;
bool isRich = true;
if (isTop) {
print("高");
}
if (isRich == true) {
print("帥");
}
}
List數(shù)組類型
- 使用
List類,表示數(shù)組,存儲(chǔ)數(shù)據(jù)元素;
void main(List<String> args) {
//int整型數(shù)組
var arr1 = List<int>();
arr1.add(10);
arr1.add(20);
arr1.add(30);
arr1.add(100);
arr1.add(200);
print(arr1); //[]
}
Map字典類型
- 使用
Map類,表示字典,存儲(chǔ)鍵值對(duì)數(shù)據(jù);
void main(List<String> args) {
var dic1 = {"name": "yanzi", "age": 16};
var dic2 = new Map();
dic2["name"] = "yanzi";
dic2["age"] = 30;
Map<String, String> dic3 = new Map();
dic3["name"] = "yanzi";
dic3["age"] = "15";
Map dic4 = new Map<String, String>();
dic4["name"] = "liyanyan";
dic4["age"] = "33";
Map dic5 = <String, String>{"name": "yanzi", "age": "23"};
}
Set集合類型
- Set是一系列無(wú)序項(xiàng)的集合;
void main(List<String> args) {
//定義初始化
Set<String> names1 = {};
var name2 = <String>{};
//添加元素
name2.add("yanzi");
name2.add("sss");
name2.add("aaa");
print(name2); //{yanzi, sss, aaa}
}
Runes類型
- Dart的rune類型主要是unicode編碼之類的;
Symbols類型
- Dart的Symbol表示程序中出現(xiàn)的操作符或標(biāo)識(shí)符;
類型轉(zhuǎn)換
- 字符串轉(zhuǎn)int,double 數(shù)值,調(diào)用num類型的
parse方法;
void main(List<String> args) {
String str1 = "12345";
print(int.parse(str1)); //12345
String str2 = "123.56";
print(double.parse(str2)); //123.56
}
- int,double數(shù)值轉(zhuǎn)字符串,調(diào)用num類型的
toString方法;
void main(List<String> args) {
int num1 = 100;
print(num1.toString()); //100
double num2 = 123.56;
print(num2.toString()); //123.56
}