Flutter二:Dart基礎(chǔ)語法

前言:Google為什么選擇

  1. 基于JIT的快速開發(fā)周期
    Flutter在開發(fā)階段采用JIT模式彪腔,這樣就避免了每次改動都要進行編譯碉输,極大的節(jié)省了開發(fā)時間债鸡;
  2. 基于AOT的發(fā)布包
    Flutter在發(fā)布時可以通過AOT生成高效的ARM代碼以保證應(yīng)用性能箩兽。
    為了快速流暢的用戶體驗需要能夠在每個動畫幀運行大量的代碼沃疮,不能有周期性的停頓薇溃,否則會造成掉幀菌赖。
  3. 單線程:
    不需要鎖,不存在數(shù)據(jù)競爭和變量狀態(tài)同步沐序,也沒有線程上下文切換的性能損耗和鎖導(dǎo)致的卡頓琉用。
  4. 垃圾回收
    多生代無鎖垃圾回收器,專門為UI框架中常見的大量Widgets對象創(chuàng)建和銷毀優(yōu)化策幼。

一. 變量和數(shù)據(jù)類型Dart語言

  1. 常量:
    從未打算更改的一個變量邑时,那么使用 final 或 const,不是var特姐,也不是一個類型晶丘。 一個 final 變量只能被設(shè)置一次,兩者區(qū)別在于:const 變量是一個編譯時常量唐含,final變量在第一次使用時被初始化浅浮。被final或者const修飾的變量,變量類型可以省略
//可以省略String這個類型聲明
final str = "hi world";
//final String str = "hi world"; 
const str1 = "hi world";
//const String str1 = "hi world";
  1. 變量:Dart使用var聲明變量捷枯,他并不是一個類型滚秩,類型會自動識別的,var變量一旦賦值淮捆,類型便會確定郁油,則不能再改變其類型
var t;
t = "hi world";
// 下面代碼在dart中會報錯,因為變量t的類型已經(jīng)確定為String攀痊,
// 類型一旦確定后則不能再更改其類型桐腌。
t = 1000;
  1. 基本數(shù)據(jù)類型: Number、String苟径、Boolean哩掺、List、Map
 //Number:int和double
    int score = 100;
    double per = 3.14;

    //string
    String name = "anfly";

    //boolean
    bool isValid = true;

    //string轉(zhuǎn)義
    String s = 'I\'m anfly';
    String s1 = "I'm anfly";

    //string拼接
    //注意:不同類型的數(shù)據(jù)不能拼接涩笤,跟Java有所區(qū)別嚼吞,Java可以強轉(zhuǎn)為string
//    print("我的成績是" + score);
    print("我的成績是:${score}");

    //StringBuffer實現(xiàn)字符串拼接,但用的不是append
    StringBuffer sb= StringBuffer();
    sb.write("");

    //$變量
    int a = 20;
    int b = 40;
    print("the sum of $a and $b is ${a + b}");

    //List類型:具有相同類型的數(shù)據(jù)蹬碧,使用方式和數(shù)組一樣
    var list = [1,2,3];//自動識別類型
    
    //Map 類型
    //方式一:
    var weeks ={'Monday':'星期一','Tuesday':'星期二'};
    //方式二:使用map的構(gòu)造函數(shù) 
    var weeks = new Map();
    weeks["Monday"] = "星期一";
    weeks["Tuesday"] = "星期二";
    //第二種方式可以增加一個值
    weeks["Wednesday"] = "星期三";
    //檢查key是否在map中
    assert(week["Monday"]==null)

     //list轉(zhuǎn)map舱禽,map轉(zhuǎn)list
      list.map()
      map.tolist() 
  1. dart分支:if switch
    //if操作符
    double salery = 2000;
    if (salery < 2000) {
      print("$salery 小于2000");
    } else if (salery > 2000) {
      print("$salery 大于2000");
    } else {
      print("$salery 等于2000");
    }

    if (a > b) {
      print("$a is salery");
    } else {
      print("$b is salery");
    }

    //三元操作符 ?: 表達式
    a > b ? print("$a is salery") : print("$b is salery");

    //??表達式恩沽,判空誊稚,如果為空可默認(rèn)??后邊的內(nèi)容
    //區(qū)分null和""
    String myName = null;
    String newName = myName ?? "anfly";
    print(newName);

    //switch,用法和Java中一樣的
    String grade = "A";
    switch (grade) {
      case "A":
        print("very good");
        break;
      case "B":
        print("good");
        break;
      case "C":
        print("enough good");
        break;
    }

  1. 循環(huán)
 //for罗心,知道循環(huán)次數(shù)
    for (int i = 0; i < 4; i++) {
      print(i);
    }

    List people = ["a", "b", "c"];

    for (int i = 0; i < people.length; i++) {
      print(people[i]);
    }

    //for in
    for (String person in people) {
      print(person);
    }

    //while,不知道循環(huán)次數(shù)
    int i = 0;
    while (i < people.length) {
      print(people[i]);
      i++;
    }

    //do while
    do {
      print(people[i]);
      i++;
    } while (i < people.length);

    //break 停止當(dāng)前循環(huán)
    for (int i = 0; i < 10; i++) {
      if (i == 5) break;
    }

    //指定停止的循環(huán)
    outterLoop:
    for (int i = 0; i < 10; i++) {
      innerLoop:
      for (int j = 0; j < 10; j++) {
        if (j == 4) {
          break outterLoop;
        }
      }
    }

    //continue退出本次循環(huán)
    for (int i = 0; i < 10; i++) {
      if (i == 5) continue;
    }

  1. 函數(shù)的9個知識點:
//1.函數(shù)定義
void sumValue() {
  int a = 1;
  int b = 2;
  int sum = a + b;
  print("a+b=${sum}");
}

//2.函數(shù)傳參
void sumValue(int a, int b) {
  int sum = a + b;
  print("a+b=${sum}");
}

//3.函數(shù)返回值
int sumValue(int a, int b) {
  int sum = a + b;
  return sum;
}
//4.箭頭函數(shù)(無返回值)
void sumValue(int a, int b) => print("a+b=${a + b}");

//5.箭頭函數(shù)(有返回值),不需要加return
int sumValue(int a, int b) => a + b;

//6.函數(shù)參數(shù)(可選參數(shù))
//帶有可選參數(shù)的函數(shù):
void printCites(String c1, [String c2, String c3]) =>
    print("城市一:${c1}\n城市二:${c2}\n城市三:${c3}");
//調(diào)用:調(diào)用的地方可以不后前兩個參數(shù)
printCites("北京");

//7.函數(shù)參數(shù) 命名里伯,如果形參被花括號包含,調(diào)用的時候就要指明形參名稱
//函數(shù)
void printCites(String c1, String c2, {String c3}) =>
    print("城市一:${c1}\n城市二:${c2}\n城市三:${c3}");
//調(diào)用
printCites("北京", "上海", c3: "天津");

//8.函數(shù)默認(rèn)返回值
//函數(shù)
int sumValue(int a, int b) {
  int sum = a + b;
}
//調(diào)用
print(sumValue(2, 2));
結(jié)果:null

//9.函數(shù)參數(shù) 賦默認(rèn)值
void printCites(String c1, String c2, [String c3 = "深圳"]) =>
    print("城市一:${c1}\n城市二:${c2}\n城市三:${c3}");

//調(diào)用的時候可以不賦值渤闷,直接用默認(rèn)的參數(shù)值
printCites("北京", "上海", );    

5.類

//1.類的基礎(chǔ)知識
//2.構(gòu)造函數(shù)
//3.自定義構(gòu)造函數(shù)
class Student {
  String name = "大飛";
  int age = 18;

  //構(gòu)造與
  //空參構(gòu)造
//  Student() {
//    print("構(gòu)造函數(shù)");
//  }

  //實參構(gòu)造
//  Student(String name, int age) {
//    this.name = name;
//    this.age = age;
//  }

  Student(this.name, this.age); //簡寫實參構(gòu)造

  //自定義構(gòu)造函數(shù)
  Student.CustomConstructor(this.name, this.age) {
    print("自定義構(gòu)造函數(shù)");
  }

  void study() {
    print("${this.name} 正在學(xué)習(xí)呢");
  }
}

//調(diào)用
var student = Student("awf", 10);
//    student.name = "anfly";
//    student.age = 28;
//    print("姓名是${student.name} and 年齡是${student.age}");
//    student.study();

    var student2 = Student.CustomConstructor("anfly",12);
    print("姓名是${student.name} and 年齡是${student.age}");

  1. 繼承和重寫父類的方法
//1.自定義setter和getter方法
//2.類的繼承:跟Java一樣單繼承
//3.重寫父類的方法和屬性
var student = Student();
student.name = "大飛";//調(diào)用默認(rèn)setter方法
print(student.name);//調(diào)用默認(rèn)getter方法

 student.setName("大飛");//調(diào)用自定義的setter方法
  print(student.getName());//調(diào)用自定getter方法

class Student {
  String name;

  int age;

  void setName(String name) => this.name = name

  String getName() => return this.name;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疾瓮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子飒箭,更是在濱河造成了極大的恐慌狼电,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弦蹂,死亡現(xiàn)場離奇詭異肩碟,居然都是意外死亡,警方通過查閱死者的電腦和手機凸椿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門削祈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脑漫,你說我怎么就攤上這事髓抑。” “怎么了窿撬?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵启昧,是天一觀的道長。 經(jīng)常有香客問我劈伴,道長密末,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任跛璧,我火速辦了婚禮严里,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘追城。我一直安慰自己刹碾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布座柱。 她就那樣靜靜地躺著迷帜,像睡著了一般物舒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戏锹,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天冠胯,我揣著相機與錄音,去河邊找鬼锦针。 笑死荠察,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奈搜。 我是一名探鬼主播悉盆,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼馋吗!你這毒婦竟也來了焕盟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耗美,失蹤者是張志新(化名)和其女友劉穎京髓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體商架,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡堰怨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛇摸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片备图。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赶袄,靈堂內(nèi)的尸體忽然破棺而出揽涮,到底是詐尸還是另有隱情,我是刑警寧澤饿肺,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布蒋困,位于F島的核電站,受9級特大地震影響敬辣,放射性物質(zhì)發(fā)生泄漏雪标。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一溉跃、第九天 我趴在偏房一處隱蔽的房頂上張望村刨。 院中可真熱鬧,春花似錦撰茎、人聲如沸嵌牺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逆粹。三九已至募疮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間僻弹,已是汗流浹背酝锅。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奢方,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓爸舒,卻偏偏與公主長得像蟋字,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扭勉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359