Flutter的敲門磚Dart基礎語法學習筆記

一、入口函數

與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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章