Dart 基本語法

Dart在1.0的時候是弱類型
Dart在2.0的時候是強類型

閉包有什么用?

變量類型

  • var 是一個可選類型,dart會自動推斷它的數(shù)據(jù)類型,并不存儲值,它存值的對象的引用丽蝎;
  • dynamic 實際運行的是一個Object,他是運行期的膀藐,編譯器不會對對象檢查
  • Object 在編譯器會對對象檢查
變量默認值
  • 沒有初始化的變量自動獲取一個默認值為null
  • 一切皆對象屠阻,對象的默認值為null
變量-final和const
  • 聲明的類型可省略
  • 初始化后不能再賦值
  • 不能和var同時使用
 // const和final變量 對象聲明時候,類型可以省略
  // 值聲明過了额各,值不可以修改
  const String str = "";
  const str1 = "1";
  final str2 = "2";

const與final區(qū)別

  • static const:表示靜態(tài)常量
  • const與final區(qū)別:const在編譯期間要確定值国觉,final在運行時確定值
  • const定義的構(gòu)造函數(shù)的類的成員變量需要用final修飾
// 因為const的構(gòu)造函數(shù)需要傳遞value const是在編譯器的值,final在運行時確定值
class Man{
  final value;
  const Man(this.value);
}

const a = 1;
  const b = a;
  final c = 10;
  const d = c; // 不可以這么做虾啦,因為final是運行時賦值麻诀,const編譯時賦值

String

  • Dart 字符串是 UTF-16 編碼的字符序列,可以使用單引號或者雙引號來創(chuàng)建字符串
  • 可以使用三個單引號或者雙引號創(chuàng)建多行字符串對象
  • 可以使用 r 前綴創(chuàng)建”原始raw”字符串 這樣轉(zhuǎn)義符號就無法使用
  • 可以在字符串中使用表達式: ${expression},如果表達式是一個標識符傲醉,可以省略 {}蝇闭,如果表達式的結(jié)果為一個對象,則 Dart 會調(diào)用對象的 toString() 函數(shù)來獲取一個字符串硬毕。
String s1 = 'hello' 'word';
  String s2 = "hello" "word" + "000";
  String s3 = '''
      hello
      word
      000
  ''';
  String s4 = r'''
      hello
      word\n
      000
  ''';
  print(s1);
  print(s2);
  print(s3);
  print(s4);


--------------------------------------------------------
helloword
helloword000
      hello
      word
      000
  
      hello
      word\n
      000

函數(shù)

匿名函數(shù)

// 匿名無參函數(shù)
  var fun1 = () {
    print(111);
  };
  var fun2 = () => print(222);

  // 匿名有參
  var fun3 = (val) => print(val);
  fun1();
  fun2();
  fun3("hello");

可選位置參數(shù)函數(shù)
可選命名參數(shù)

// 普通函數(shù)
fun1(1, 1, 1);
  fun2(1);
  fun3(1,b: 5,c: 2);

fun1(a, b, c) => print("a=$a b=$b c=$c");
// 可選位置參數(shù)呻引,用[] 表示,參數(shù)要按著位置寫先寫b再寫c
fun2(a, [b = 1, c]) => print("a=$a b=$b c=$c");
// 可選命名參數(shù)昭殉,可以直接寫b =
fun3(a, {b = 5, c}) => print("a=$a b=$b c=$c");
--------------------------------------------------------
a=1 b=1 c=1
a=1 b=1 c=null
a=1 b=5 c=2

閉包

定義 一個函數(shù)內(nèi)部的函數(shù)苞七,不嚴格的說相當于java的內(nèi)部類或者匿名內(nèi)部類藐守。再簡單點說-
就是函數(shù)套函數(shù)挪丢。

函數(shù)簽名

是方法名稱和參數(shù)類型蹂风,叫做函數(shù)簽名。

?. 相當于不為空則顯示點后方法乾蓬,為空顯示null

String str = "xxx";
str !=null?str.length:null;
如果str不是null 則顯示長度惠啄,是null 就顯示null
等同于  str?.length     相當于不為空則顯示長度,為空顯示null

?? 相當于為空則賦值=號后的不為空則是本身

String str;
str == null?"xxx":str;
str ??="xxx";

~/ 除法取整

print(1~/2);
    print(2~/2);
    print(3~/2);
    print(4~/2);

--------------------------------------------------------
0
1
1
2

循環(huán)

List list = [1,"a",2,"t",true];
    list.forEach((val)=>print("這里是循環(huán)$val"));

    for(var val in list){
        print(val);
    }

異常

  • Error異常:大部分是DartVM的異常例如OutOfmemory
  • Exception異常 :大部分是需要程序員自己解決的異常
  • 自定義異常

構(gòu)造函數(shù)

  • 只能有一個非命名構(gòu)造函數(shù)任内,也就是類名() 就是非命名構(gòu)造函數(shù)
// 只能有一個非命名構(gòu)造函數(shù) , 下面3個只能存在一個
    Man();// 非命名構(gòu)造函數(shù)
    Man(this.name,this.age); // 非命名構(gòu)造函數(shù)  
    Man(String name,int age){
        this.name = name;
        this.age = age;
    }

常量構(gòu)造函數(shù)

常量構(gòu)造函數(shù)是放在常量池中撵渡,相同的構(gòu)造函數(shù)即使是new也是同一個構(gòu)造函數(shù)

重定向構(gòu)造函數(shù)

直接重定向函數(shù),是命名構(gòu)造函數(shù)重定向到非命名構(gòu)造函數(shù)死嗦,或者子類構(gòu)造函數(shù)繼承父類趋距,然后進行重定向父類的某個構(gòu)造函數(shù),使用:來表示重定向

class Man {
  String name;
  int age;

  // 只能有一個非命名構(gòu)造函數(shù)
//    Man();// 非命名構(gòu)造函數(shù)
  Man(this.name, this.age); // 非命名構(gòu)造函數(shù)
//    Man(String name,int age){
//        this.name = name;
//        this.age = age;
//    }


  // 重定向構(gòu)造函數(shù)

  Man.setZSInfo(name, age) : this("張三", 16);

  Man.setZSInfo1() : this("張三", 16);
}

class Person {
  int age;
  String name;

  Person.setData(this.name, this.age);

  @override
  String toString() {
    return 'Person{age: $age, name: $name}';
  }
}

class SubPerson extends Person {
  int age;
  // 重定向構(gòu)造函數(shù)越除,子類重定向父類的setData函數(shù)节腐,使用:來重定向
  SubPerson.setData(String name, int age) : super.setData(name, age);
}

單例

main() {
  var singleTong = SingleTong();
  var singleTong2 = SingleTong();
  print(singleTong == singleTong2);  // true
}

// 餓漢式
class SingleTong {
  // 定義私有命名構(gòu)造函數(shù),_表示私有摘盆,命名給省略了
  // 因為是_私有翼雀,在其他類中無法調(diào)用這個命名構(gòu)造
  SingleTong._();

  // 靜態(tài)的對象 私有的 ,對象是上面的構(gòu)造函數(shù)獲得
  static final SingleTong _singleTong = SingleTong._();

  // 工廠函數(shù)的關(guān)鍵字孩擂,通過代碼決定返回實例狼渊,從緩存中獲取實例,也是調(diào)用返回實例的方法
  factory SingleTong() => _singleTong;
}

工廠方法 通過實現(xiàn) 繼承 abstract抽象類


// 構(gòu)建工廠 抽象類   俱樂部
abstract class Club {
  Club.extendsClub();

  factory Club(type) {
    switch (type) {
      case "sky":
        return SkyClub();
      case "water":
        return WaterClub();
      case "normal":
        return NormalClub();
    }
  }

  getMsg();
}

class SkyClub extends Club {
  // 如果是繼承类垦,因為factory Club 這個非命名構(gòu)造函數(shù)占用狈邑,
  // 所以重定向到命名構(gòu)造函數(shù)
  SkyClub() : super.extendsClub();

  @override
  getMsg() {
    return "天上人間msg";
  }
}

class WaterClub implements Club {
  @override
  getMsg() {
    return "水世界msg";
  }
}

class NormalClub implements Club {
  @override
  getMsg() {
    return "Normalmsg";
  }
}

Mixin多繼承 多個類功能的合并

如下圖,交通工具是個父類蚤认,動力米苹、安全系數(shù)、動力來源烙懦,是抽象父類驱入,自行車,摩托車氯析,汽車亏较,可以繼承交通,也可以繼承動力安全掩缓,來進行多繼承雪情,把所有的功能進行合并。

父類有個call方法你辣,子類可以直接使用


image.png

使用mixin 關(guān)鍵字后巡通,后面繼承多個類尘执,如果使用方法在繼承的多個類中都存在,則會使用with最后一個類的方法

  car("子類直接使用父類的方法宴凉,只有call");
}

// 抽象 交通類
abstract class Transportation {
  call(str)=>{print(str)};
  getInfo();
}
class A {
  showMsg() {
    print("a");
  }
}

class B {
  showMsg() {
    print("b");
  }
}

class C {
  showMsg() {
    print("c");
  }
}

class AB extends A with B,C{
  @override
  showMsg() {
    return super.showMsg();
  }
}

AB().showMsg();
----------------------------------------
打印的是c  with 后的最后一個類

導包

如果有多個類誊锭,可以只導入一個類,然后讓這個類把剩下的類都引入弥锄,之后導入的這個類丧靡,就能訪問所有的方法

part of 'libs.dart';

class A {
  a() {}
}
----------------------------------
part of 'libs.dart';

class B {
  b() {}
}
----------------------------------
part 'a.dart';
part 'b.dart';

class Libs{
    showLib(){
        print('libs');
    }
}
// 引入libs類,可以直接方法a籽暇,b類的方法和libs的方法
import 'package:flutter_nd_study/utils/libs.dart';

main(){
    Libs().showLib();
    A().a();
    B().b();
}

as 關(guān)鍵字温治,可以重命名導入的類名,然后使用

import 'utils/c.dart' as newC;
newC.C().c();

show 關(guān)鍵字,只有導入的類中 show的子類能顯示別的不能

part of 'libs.dart';

class D {
  d() {}
}

class DD {
  dd() {}
}

class DDD {
  ddd() {}
}

import 'utils/d.dart' show DD;
只能調(diào)用DD類
import 'utils/d.dart' hide DD;
隱藏DD類

import 'utils/d.dart' deferred as DD; 
延遲加載dd

異步

  • 并發(fā):系統(tǒng)管理多個IO的切換教給CPU來處理
  • 并行:多核CPU在同一時間執(zhí)行多個任務

協(xié)程

執(zhí)行到async表示進入了一個協(xié)程戒悠,會同步執(zhí)行async代碼快熬荆。async本質(zhì)也是函數(shù),并有自己的上下文環(huán)境绸狐。當執(zhí)行到await表示有任務需要等待卤恳。CPU就去調(diào)度其他IO。過段時間就會輪詢六孵,看是否有協(xié)程完成了纬黎,完成后就繼續(xù)執(zhí)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末劫窒,一起剝皮案震驚了整個濱河市本今,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌主巍,老刑警劉巖冠息,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異孕索,居然都是意外死亡逛艰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門搞旭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來散怖,“玉大人,你說我怎么就攤上這事肄渗≌蚓欤” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵翎嫡,是天一觀的道長欠动。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么具伍? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任翅雏,我火速辦了婚禮,結(jié)果婚禮上人芽,老公的妹妹穿的比我還像新娘望几。我一直安慰自己,他們只是感情好啼肩,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布橄妆。 她就那樣靜靜地躺著衙伶,像睡著了一般祈坠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上矢劲,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天赦拘,我揣著相機與錄音,去河邊找鬼芬沉。 笑死躺同,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的丸逸。 我是一名探鬼主播蹋艺,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼黄刚!你這毒婦竟也來了捎谨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤憔维,失蹤者是張志新(化名)和其女友劉穎涛救,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體业扒,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡检吆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了程储。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹭沛。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖章鲤,靈堂內(nèi)的尸體忽然破棺而出摊灭,到底是詐尸還是另有隱情,我是刑警寧澤咏窿,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布斟或,位于F島的核電站,受9級特大地震影響集嵌,放射性物質(zhì)發(fā)生泄漏萝挤。R本人自食惡果不足惜御毅,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怜珍。 院中可真熱鬧端蛆,春花似錦、人聲如沸酥泛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柔袁。三九已至呆躲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捶索,已是汗流浹背插掂。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腥例,地道東北人辅甥。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像燎竖,于是被迫代替她去往敵國和親璃弄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354