Flutter系列 (一)Dart語法

Dart 變量、常量的聲明方式

//聲明變量
var name="你好dart";
String name="張三";
int num = 123;
//聲明常量
const name = "李四";
final name = "張三";

變量聲明可以采用 var 關(guān)鍵字進(jìn)行聲明、或者采用指定類型來聲明 var會自動推導(dǎo)類型

常量可以通過const 和 final來修飾 常量是不能修改的。 const 聲明常量要先賦值,而final修飾常量可以先不賦值。
const 修飾創(chuàng)建同一個對象時 共享同一個存儲空間

Dart 的數(shù)據(jù)類型

int  num =123;
double  sum = 12.3;
String name = "張三";
// 三個引號聲明字符串可以進(jìn)行換行顯示
String person = ""張三 
  李四
  王五"";
bool  flg = true;
//集合 數(shù)組
List l1 = ["小明",123,true];
//創(chuàng)建固定長度的集合
var l2 = List.filled(2,"");
//map類型 類似json對象
Map person = {
  "name":"小王",
  "age":20
}
//獲取數(shù)據(jù)
person ['name']

Dart 循環(huán)相關(guān)

var l1 = ["小王","小李","小劉"];

l1.isEmpty()//判斷為空
l1.isNotEmpty()//判斷不為空
li.reversed()//翻轉(zhuǎn)數(shù)組 倒敘

//把數(shù)組轉(zhuǎn)換成字符串
l1.join(",");
會輸出 "小王,小李,小劉"
//把字符串轉(zhuǎn)換成數(shù)組
String str="香蕉、蘋果、橘子";
str.split("、");

//數(shù)組循環(huán)的幾種方式
for(var i=0;i<l1.length;i++){};
for(var item in l1){};
l1.forEach((value){
});

var myList = [1,2,3,4,5];
//修改數(shù)組中的數(shù)據(jù) 生成一個新的數(shù)組
var newList = myList.map((value){
  return value+1;
});
var newList = myList.where((value){
  return value>2;
});

Dart方法的聲明

//沒有返回值 沒有參數(shù)
void myDemo(){
}
//返回值類型為Stirng 傳入字符串參數(shù)
String myDemo(String name){
    return name;
}
//可選參數(shù) 調(diào)用的時候可以不傳后面的參數(shù)  如果要穿后面的參數(shù)注意參數(shù)的順序 也可以設(shè)置參數(shù)的默認(rèn)值
void person(String name,[int age =1 ,String sex]){
}
//可以這樣調(diào)用
person("張三")
//命名參數(shù)  在調(diào)用此方法的時候需要傳入?yún)?shù)名來傳參 不用考慮順序問題
void person(String name,{int age =1 ,String sex}){
}
person("李四",sex:"男",age:20);
//匿名方法 可以不聲明方法名和返回值
var fn = (){
}
調(diào)用 fn();
//箭頭函數(shù) 一般只用于方法體內(nèi)一行執(zhí)行
list.forEach((value)=>value+2);

//閉包  局部變量常駐內(nèi)存 
fn(){
  var num = 123;
  return (){
    num++;
  }
}
var b = fn();
b();
b();
打印的結(jié)果就是 124,125 
閉包就是把返回的匿名方法賦給一個變量 調(diào)用這個變量方法會執(zhí)行返回的匿名方法,保留局部變量的值,不會重新賦值。

Dart中的類

//類的構(gòu)造跟java中很類似  
class Person{
  String name;
  int age;
  String _sex;//私有屬性 前面加個_
  //構(gòu)造函數(shù)
  Person(String name,int age){
    this.name = name;
    this.age = age;
  }
  //在類實例化之前給變量參數(shù)賦值
  Person():name="王五",age =22;
  //構(gòu)造方法簡寫
  Person(this.name,this.age);
  //命名構(gòu)造函數(shù)
  Person.set(String name,int age){
      this.name = name;
      this.age = age;
  }
  //私有方法
  _fun(){

  }
  //get方法 不用傳參
  get myName{
    return this.name;
  }
  //set方法 
  set myName(String name){
     this.name = name;
  }
}
調(diào)用命名構(gòu)造函數(shù) 構(gòu)造函數(shù)可以聲明一個 命名構(gòu)造函數(shù)可以聲明多個
Person person = new Person.set("張三",20);
//調(diào)用get 直接通過類似調(diào)用屬性的方式來調(diào)用get獲取類中的變量
person.myName;
//調(diào)用set
person.myName = "李四";

Dart中的靜態(tài)成員變量和類的繼承、接口

static String name="張三"
static String getName(){
    return name;
}
采用static來修飾屬性和方法 調(diào)用的時候直接調(diào)用方法名
//操作符
? 條件運算符 不為空的時候引用后面的變量
as 類型轉(zhuǎn)換
is  類型判斷
..  聯(lián)級操作符  類似構(gòu)建者模式鏈?zhǔn)秸{(diào)用
person.. name
      .. age
      .. sex;
extends 實現(xiàn)集成類 跟java一樣
abstract 實現(xiàn)抽象類 也可以用做接口 抽象類不能被實現(xiàn)只能被繼承 跟java類似

abstract class Person{
    //抽象方法
    void name();
}
//抽象方法也可以當(dāng)做接口來實現(xiàn)  接口可以進(jìn)行多實現(xiàn)
class Man implements Person{
}

mixins 可以實現(xiàn)類似多繼承的效果 混入 采用with關(guān)鍵字
class A{
  printA(){
    print("A");
  }
}
class B{
  printB(){
    print("B");
  }
}
class C with A,B{
}

C c = new C();
c.printA();
c.printB();
類似多繼承的形式實現(xiàn)繼承多個類 可以調(diào)用不同類中的方法
注意點:mixins 只能繼承object 不能繼承其它類  不然不能夠被當(dāng)成mixins類 而且不能有構(gòu)造函數(shù)  
有相同的方法 后面的會把前面的方法給替換掉

Dart 中的泛型

//T代表泛型 一般使用泛型都是希望類型不固定 返回一個統(tǒng)一的值
T getData<T>(T value){
    return value;
}
//調(diào)用指定傳入類型
getData<String>('你好');
//定義泛型類
class MyList<T>{
}
var list = new MyList<String>();
//定義泛型接口
abstract class Person<T>{
    //抽象方法
    void getName();
}

Dart 中的null聲明 和 late required identical 關(guān)鍵字

//不能直接這樣聲明 會報錯  
String name = null 
//需要在類型后面加?
String? name = null 
跟kotlin中的聲明空對象類似
//初始化屬性時如果不加?號 需要后面給這個屬性賦值再調(diào)用
int name;
//需要在前面加上  late關(guān)鍵字 延遲初始化  跟kotlin中的lateinit概念一樣
late int name;
//required 關(guān)鍵字是聲明方法內(nèi)的命名參數(shù)為必傳參數(shù)  {}內(nèi)的參數(shù)表示為命名參數(shù)  傳入數(shù)據(jù)需要根據(jù)參數(shù)名區(qū)分
viod printInfo(String name, {required int age,required String sex}){
}

identical 關(guān)鍵字用來判斷對象是否為同一個 是否指向同一個構(gòu)造空間
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容