Dart的安裝
- 下載Dart SDK,注意此處需要梯子
- 根據(jù)路徑配置環(huán)境變量
工具的配置
學(xué)習(xí)Dart語(yǔ)法的時(shí)候,選擇的是VSCode作為編輯器
VSCode的需要安裝的插件:
Dart、Flutter、Code Runner(方便運(yùn)行調(diào)試)
安裝完Code Runner后,可以通過右擊然后選擇run code執(zhí)行代碼;

右擊
也可以通過點(diǎn)擊右上角執(zhí)行代碼

右上角
Dart語(yǔ)法學(xué)習(xí)
- Dart的入口函數(shù)
main(List<String> args) {
//coding
}
- print - 輸出內(nèi)容
print("Hello World!");
- 定義變量
- 明確聲明
String name = 'who';
name = 'hanmmm';
//name = 12; 錯(cuò)誤,將一個(gè)int值賦值給一個(gè)String變量
- 類型推導(dǎo)
2.1 聲明常量
final height = 1.85;
const address = '廣州市';
注: final和const的區(qū)別:
final可以通過計(jì)算/函數(shù)獲取一個(gè)值(可以運(yùn)行期間來(lái)確定一個(gè)值)
const必須賦值 常量值(編譯期間需要一個(gè)確定的值)
2.2 聲明變量
var age = 20;
注意:其中identical判斷兩個(gè)對(duì)象是否為同一個(gè)對(duì)象
main(List<String> args) {
//通過final定義的p1和p2不是一個(gè)對(duì)象
final p1 = Person("lmf");
final p2 = Person("lmf");
print(identical(p1, p2));
//const放在賦值語(yǔ)句的右邊,可以共享對(duì)象,提高性能
//通過const定義的p1和p2是同一個(gè)對(duì)象
const p3 = Student('haha');
const p4 = Student('haha');
print(identical(p3, p4));
}
class Person {
String name;
Person(String name) {
this.name = name;
}
}
class Student {
final String name;
const Student(this.name);
}
- dynamic - 如果需要為變量賦值不同類型的值,可以使用dynamic,開發(fā)中不推薦使用
dynamic sex = 'man';
print(sex.runtimeType);
sex = 12;
print(sex.runtimeType);
- 布爾類型
bool flag = true;
// var flag = 'abc'; 錯(cuò)誤,Dart中不能判斷非0即真, 或者非空即真
if(flag) {
print('為真');
- 字符串類型
定義字符串 - 使用''、“”、‘’‘’‘’,其中三引號(hào)可以表示多行字符串
var str1 = 'abc';
var str2 = "def";
var str3 = '''
abc
cba
nba
''';
print(str1+'\n'+str2+'\n'+str3);
字符串的拼接 - 使用${expression},如果表達(dá)式是一個(gè)標(biāo)識(shí)符,可以省略{}
var name = "who";
var age = 18;
var height = 1.78;
//強(qiáng)調(diào): ${變量},那么{}可以省略;表達(dá)式不可以
var msg1 = "my name is ${name}, age is ${age}, height is ${height}";
var msg2 = "name is $name, type is ${name.runtimeType}";
print(msg1);
print(msg2);
- 集合類型
- List - 有序的
var names = ["abc", "cba", "nba", "abc"];
print(names);
- Set - 無(wú)序的、不可重復(fù)的
var movies = {"大話西游", "哪咋傳奇"};
print(Set<String>.from(names).toList());
- Map - 字典類型
var info = {
"name": "lilei",
"age": 18
};
- 函數(shù)
- 箭頭函數(shù) - 只有一行代碼的,可以使用箭頭函數(shù)表示
// int sum(int num1, int num2) {
// return num1+num2;
// }
int sum(int num1, int num2) => num1+num2;
- 參數(shù)
main(List<String> args) {
sayHello("lilei");
sayHello2("lilei", 18, 1.88);
sayHello3('leilei', height:2.02, age:18);
}
//1.1 必選參數(shù):必須傳
void sayHello(String name) {
print(name);
}
//1.2 可選參數(shù):位置可選參數(shù) 、命名可選參數(shù)
//注:可選參數(shù)可以有默認(rèn)值
//1.2.1 位置可選參數(shù):[int age, double height]
//實(shí)參和形參在進(jìn)行匹配是,是根據(jù)位置匹配
void sayHello2(String name, [int age = 10, double height]) {
print(name);
}
//1.2.2 命名可選參數(shù) :{int age, double height}
void sayHello3(String name, {int age = 18, double height}) {
}
- 函數(shù)可以作為返回值、參數(shù)
main(List<String> args) {
test(bar);
//匿名函數(shù)
test((){
print("匿名函數(shù)被執(zhí)行");
});
//箭頭函數(shù) 函數(shù)體只有一行代碼
test(()=> print("箭頭函數(shù)被調(diào)用"));
//指定函數(shù)類型
test2((num1, num2) {
return num1+num2;
});
//通過typedef定義函數(shù)類型
test3((num1, num2) {
return num1+num2;
});
var foo = demo();
print(foo(20, 30));
}
void test(Function foo) {
foo();
}
void bar() {
print("bar函數(shù)被調(diào)用");
}
void test2(int foo(int num1, int num2)) {
print(foo(20, 30));
}
typedef Calculate = int Function(int num1, int num2);
void test3(Calculate foo) {
print(foo(20, 40));
}
Calculate demo() {
return (int a, int b) {
return a*b;
};
}
生活如此美好,今天就點(diǎn)到為止。。。