一、入口函數
與Java相似,都需要一個main函數作爲應用入口
void main(){
}
二、常用基礎數據類型
num //數字類型
String //字符串類型
bool //布爾類型
List //列表類型
Map //鍵值對類型
dynamic //動態類型
三、變量與常量
var name; //用var聲明一個變量
print(name); //未被賦值時,默認爲null
name = "MrZhang"; //賦值爲字符串
print(name);
name = 18; //賦值爲數字
print(name);
print("-------------------------------------------------------------------");
final age = 10; //使用final聲明的變量只能被賦值一次
//age = 20;// 'age', a final variable, can only be set once
const like = "西瓜"; //使用const聲明的屬於常量只能被賦值一次
//like = "香蕉";//error: Constant variables can't be assigned a value.
print("打印數據:${like + age.toString()}"); //
輸出
null
MrZhang
18
-------------------------------------------------------------------
打印數據:西瓜10
四、運算符與表達式
大部分與java一致,在此略過。
String a = "123";
String b = "123";
print(a == b); //與Java不同,這裏==對比的不是引用
int c;
c ??= 10; //如果c爲null,則會被賦值
print(c);
int d = 0;
String e = d == 1 ? "Ros" : "Jack"; //三目運算符與java一致
print(e);
int f;
int g = 66;
int h = f ?? g; //如果??前爲null將會使用後面的值
print(h);
輸出
true
10
Jack
66
五、方法
void main() {
print(a(5, 10));
print(b(2, 3));
print(c(6, 7));
d("小李");
d("小李", sex: 1);
d("小李", age: 18, sex: 1);
var fun = (String name) => {print("姓名:$name")}; //方法對象
var fun2 = a; //方法對象
fun("小陳");
fun2(6, 4);
e("小李", 11);
e("小李", 11, 0);
}
/**
* 普通方法
*/
int a(int a, int b) {
return a + b;
}
/**
* 省略返回值類型以及參數類型
*/
b(a, b) {
return a + b;
}
/**
* 使用箭頭語法替代表達式
*/
int c(a, b) => a + b;
/**
* 可選參數
*/
d(String name, {int age = 6, int sex}) {
print("姓名:$name,年齡:$age,性別:$sex");
}
/**
* 基於位置的可選參數
*/
e(String name, [int age = 6, int sex]) {
print("姓名:$name,年齡:$age,性別:$sex");
}
輸出
15
5
13
姓名:小李,年齡:6,性別:null
姓名:小李,年齡:6,性別:1
姓名:小李,年齡:18,性別:1
姓名:小陳
姓名:小李,年齡:11,性別:null
姓名:小李,年齡:11,性別:0
六、類
main() {
var person = Person(); //Dart中new關鍵字可以省略
print(person.name);
person.age = 18; //Dart類默認會生成get以及set方法
print(person.age);
print(person.sex); //final屬性沒有set,只有get
person.toPrint();
person(); //調用call方法
var person2 = Person.instance("老謝");
person2.toPrint(); //條件運算符,不爲空才執行
person2
..name = "老李"
..age = 48
..toPrint(); //級聯操作
Animal life = APerson.instance("命名構造。。。");
life.eat();
}
class Person {
String name;
int age;
final int sex = 0;
/**
* 默認構造
*/
Person() {}
/**
* 命名構造方法
*/
Person.instance(String name) {
this.name = name;
}
/**
* 命名構造方法
*/
Person._instances(this.name) : age = 16 {}
/**
* Dart中方法是不能重載的
*/
toPrint() {
print("$name-$age-$sex");
}
call() {
print("Call:$name-$age-$sex");
}
}
abstract class Animal {
void eat() {
print("eat");
}
}
abstract class Life {
Life(String alias) {
print(alias);
}
void eat() {
print("eat");
}
}
class APerson extends Person with Animal {
APerson() {}
APerson.instance(String alias) : super.instance(alias) {
print("APerson" + alias);
}
@override
void eat() {
super.eat();
}
@override
toPrint() {
return super.toPrint();
}
}
/**
* implements需要實現方法及變量
*/
class BPerson implements Person, Life {
@override
int age;
@override
String name;
@override
call() {
return null;
}
@override
void eat() {}
@override
int get sex => null;
@override
toPrint() {
return null;
}
}
輸出
null
18
0
null-18-0
Call:null-18-0
老謝-null-0
老李-48-0
APerson命名構造。。。
eat