Flutter 的開發(fā)語言--Dart語言學(xué)習(xí)

前言

Flutter使用的是Dart語言输钩,我們先來了解Dart的一些基礎(chǔ)特性豺型,便于后面Flutter的開發(fā)。

變量聲明

舉例:

 var name = '小明';
 var age = 18;

 String nameStr = "小紅";
 int ageInt = 18;

 dynamic address = '北京';
   
 Object money = 100;

總共有四種:

1买乃、var

var name = '小明';
var age = 18;

使用 var 來聲明變量触创,不需要特別指定變量的數(shù)據(jù)類型。

注意:為什么 var 聲明的變量不需要指定數(shù)據(jù)類型为牍,而能定義所有的變量呢哼绑?
因?yàn)?var 存儲(chǔ)的是值的對(duì)象的引用,而不是直接存儲(chǔ)的值碉咆。

2抖韩、明確的數(shù)據(jù)類型

String nameStr = "小紅";
int ageInt = 18;

在聲明變量的時(shí)候,就使用明確的數(shù)據(jù)類型疫铜。

Dart 支持以下的數(shù)據(jù)類型:
1茂浮、int:整數(shù),范圍為 -2^63 到 2^63 - 1壳咕。比如:int x = 1席揽;
2、double:浮點(diǎn)數(shù)谓厘,64位(雙精度)浮點(diǎn)數(shù)幌羞。比如:double y = 1.1111;
3竟稳、num:是數(shù)字類型属桦,既可以表示整數(shù),也可以表示浮點(diǎn)數(shù)他爸,具體看賦的值聂宾。比如:num x = 1;//x是整數(shù),num y = 1.1111;//y是浮點(diǎn)數(shù)诊笤;
4系谐、String:字符串,Dart 字符串采用UTF-16編碼讨跟,可以使用單引號(hào)或雙引號(hào)來創(chuàng)建字符串纪他。比如:String s = 'test' 或 String = “test”;
5许赃、bool:布爾值止喷。比如:bool isBoy = true;
6混聊、List弹谁、Set、Map
7句喜、Runes:表示采用 UTF-32 的字符串预愤,用于顯示 Unicode 因?yàn)?Dart 字符串是 UTF-16,所以需要 Runes 這個(gè)特殊語法轉(zhuǎn)換一下咳胃。

3植康、dynamic

dynamic address = '北京';

dynamic 表明數(shù)據(jù)類型是動(dòng)態(tài)可變的。它和 var 一樣展懈,可以定義任何變量销睁,但是不同的是供璧,var 一旦賦值后,就不能改變數(shù)據(jù)類型了冻记,但是 dynamic 可以睡毒,比如:
如果 var 這樣使用,就會(huì)有編譯錯(cuò)誤:

var a = 'test';
a = 1;

如果 dynamic 能夠通過編譯冗栗,但是會(huì)在運(yùn)行時(shí)報(bào)錯(cuò):

dynamic a = "test";
a = 1;

4演顾、Object

Object money = 100;

Dart 里所有東西都是對(duì)象,是因?yàn)?Dart 的所有東西都繼承自 Object隅居,因此 Object 可以定義任何變量钠至,并且賦值后,也可以改變類型胎源。

object a = 1;
a = "test";

注意:一般都用Object代替dynamic棉钧,而不使用dynamic。

修飾常量用的:finalconst

在用 finalconst 修飾不想改變的值時(shí)乒融,需要注意一下幾點(diǎn):

  • 使用 finalconst 的時(shí)候可以把 var 省略
  • finalconst 變量只能賦值一次掰盘,而且只能在聲明的時(shí)候就賦值
  • const 是隱式的 final,在使用 const 的時(shí)候赞季,如果變量是類里的變量愧捕,必須加 static,是全局變量時(shí)不需要加

finalconst 區(qū)別:
const 是編譯時(shí)常量申钩,在編譯時(shí)就初始化次绘,值就確定了。
final 是當(dāng)類創(chuàng)建的時(shí)候才初始化撒遣。

List邮偎、Set 和 Map

List

//使用構(gòu)造函數(shù)創(chuàng)建對(duì)象
var list = List<int>();
list.add(1);
list.add(2);

//通過字面創(chuàng)建對(duì)象,list的泛型參數(shù)可以從變量定義推斷出來
var list2 = [1,2,3];

//沒有元素义黎,顯示指定泛型參數(shù)為int
var list3 = <int>[];
list3.add(1);
list3.add(2);

var list4 = const[1,2];
//list4 指向的是一個(gè)常量禾进,不能給它添加元素。也不能修改它
list4.add(3);//error
//list4 本身不是一個(gè)常量廉涕,所以它可以指向另一個(gè)對(duì)象
list4 = [4,5];//ok

Set
Set<E>泻云,E 表示 Set 里的數(shù)據(jù)類型,用大括號(hào)來賦值:

Set<String> set = {"aaa","bbb","cccc"};

var set = Set<String>();
      set.add('aaa');
      set.add('bbb');

Map

//第一種寫法:
Map map = new Map<String,int>();
//添加
map['a'] = 1;
map['b'] = 2;
//修改
map['a'] = 3;
      
//獲取map值
int i = map['a'];


//第二種寫法:
 Map<String,String> map2 = {
        "a":"aaa",
        "b":"bbb",
        "c":"ccc"
      };

操作符

主要分為一下幾類:

  1. 算術(shù)運(yùn)算符
  2. 比較操作符
  3. 類型判斷符
  4. 賦值操作符
  5. 邏輯運(yùn)算符
  6. 按位與移位運(yùn)算符
  7. 條件運(yùn)算符
  8. 級(jí)聯(lián)操作符
  9. 其他操作符

1. 算術(shù)操作符

  • +:
  • -:
  • *
  • %:取余
  • -var:負(fù)數(shù)
  • ++/--:加1/減1
    以上這些都和 Java 中的一樣狐蜕,不同的是
  • /:除宠纯,精確除法。比如var a = 3 / 2层释;結(jié)果 a 為 1.5
  • ~/:整除婆瓜。比如var a = 3 ~/ 2;結(jié)果 a 為 1

2. 比較操作符
==贡羔、!=廉白、>个初、<、>=蒙秒、<= 這些比較操作符和 Java 中一樣

3. 類型判斷符

  • as:類型轉(zhuǎn)換勃黍。注意:轉(zhuǎn)換的對(duì)象不能為null。
  • is:判斷是否是某個(gè)類型晕讲,如果是的話,就返回 true马澈。
  • is!:判斷是否不是某個(gè)類型瓢省,如果不是的話,就返回 true痊班。

4. 賦值操作符

  • =:賦值操作符
  • ??=:只有當(dāng)變量為空的時(shí)候才能賦值

5. 邏輯運(yùn)算符
!勤婚、||、&& 這些邏輯符和 Java 一樣

6. 按位與移位運(yùn)算符

  • &:按位與涤伐,對(duì)于每一個(gè)比特位馒胆,只有兩個(gè)操作數(shù)相應(yīng)的比特位都是1時(shí),結(jié)果才為1凝果,否則為0
  • |:按位或祝迂,對(duì)于每一個(gè)比特位,當(dāng)兩個(gè)操作數(shù)相應(yīng)的比特位至少有一個(gè)1時(shí)器净,結(jié)果為1型雳,否則為0
  • ^:按位異或,對(duì)于每一個(gè)比特位山害,當(dāng)兩個(gè)操作數(shù)相應(yīng)的比特位有且只有一個(gè)1時(shí)纠俭,結(jié)果為1,否則為0
  • ~:按位非浪慌,反轉(zhuǎn)操作數(shù)的比特位冤荆,即0變成1,1變成0
  • <<:左移
  • >>:右移

7. 條件運(yùn)算符

  • "? :": 同 Java 中 if else
  • var1 ?? var2:如果 var1 為null权纤,就返回 var2钓简,否則返回 var1

8. 級(jí)聯(lián)操作符

  • ..:允許你對(duì)同一對(duì)象進(jìn)行一系列的操作。

9. 其他操作符

  • {}:函數(shù)調(diào)用
  • []:訪問列表
  • .:訪問成員變量
  • ?. :有條件的成員變量訪問

語句

在Java中常用的 if else妖碉,switch涌庭,whiledo while 在 Dart 里面都支持。

函數(shù)

在 Dart 中函數(shù)也是對(duì)象欧宜,函數(shù)的類型是 Function坐榆。
模版格式:

返回類型 函數(shù)名(函數(shù)參數(shù)){

}

函數(shù)的參數(shù):必選參數(shù)和可選參數(shù)

  • 必選參數(shù)是必填的
  • 可選參數(shù)是選填的

必須參數(shù)
必選參數(shù)就是平時(shí)的方法定義的函數(shù)參數(shù),比如:

 bool(String name,int age){
    
  }

可選參數(shù)
分為兩類:

  • 可選命名參數(shù):使用 {} 包起來的參數(shù)是可選命名參數(shù)
  • 可選位置參數(shù):使用 [] 包起來的參數(shù)是可選位置參數(shù)
  1. 可選命名參數(shù) {}
    可選參數(shù)的賦值必須是 key : value 這種格式冗茸,比如:
bool(String name,{int age,int id}){

  }

這里參數(shù) age 就是可選命名參數(shù)席镀。
同時(shí)還可以給命名參數(shù)加 @required匹中,意思是這個(gè)也是必填參數(shù)。

bool(String name,{@required int age,int id}){

  }
  1. 可選位置參數(shù):[]
    賦值和參數(shù)是一一對(duì)應(yīng)的豪诲。
bool('小明',"123456");//不對(duì)顶捷,他是有順序的

lambda表達(dá)式

=> 語句后面只能跟一行代碼,而且這一行代碼只能是一個(gè)表達(dá)式屎篱,而不能跟語句服赎。表達(dá)式可以是函數(shù)、值交播。

void main() => runApp(MyApp());

等價(jià)于

void main(){
    return runApp(MyApp());//runApp() 返回的是 void
}

異常

拋出異常:

throw Exception('put your error message here');

捕獲異常:

try { 
   // ...
  // 捕獲特定類型的異常
} on FormatException catch (e) { 
  // ...
 // 捕獲特定類型的異常重虑,但不需要這個(gè)對(duì)象
} on Exception {  
 // ..
 // 捕獲所有異常
} catch (e) { 
 // ...
} finally { 
 // ...
}

跟 Java 不同的是,Dart 可以拋出任意類型的對(duì)象秦士。

Dart 中每個(gè)對(duì)象都是一個(gè)類的實(shí)例缺厉,所有類都繼承自 Object。

class Test{
  int x;
  int y;

  Test(int x,int y){
    this.x = x;
    this.y = y;
  }
}

默認(rèn)構(gòu)造函數(shù)的寫法就是使用類名作為函數(shù)名的構(gòu)造函數(shù)隧土,Dart 還有更簡(jiǎn)潔的寫法提针,

Test(this.x,this.y);

另外,在創(chuàng)建實(shí)例的時(shí)候曹傀,可以不使用 new辐脖。

Test test = Test(1, 2);

總結(jié)

Dart 的簡(jiǎn)單學(xué)習(xí)到此就結(jié)束了,我們主要學(xué)習(xí)了變量聲明卖毁、finalconst揖曾、List SetMap、操作符亥啦、語句炭剪、函數(shù)、lambda 表達(dá)式和異常翔脱。如果想要了解更多的 Dart 語法奴拦,可以去看官方文檔(https://dart.dev/guides/language/language-tour)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末届吁,一起剝皮案震驚了整個(gè)濱河市错妖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疚沐,老刑警劉巖暂氯,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異亮蛔,居然都是意外死亡痴施,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辣吃,“玉大人动遭,你說我怎么就攤上這事∩竦茫” “怎么了厘惦?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)哩簿。 經(jīng)常有香客問我宵蕉,道長(zhǎng),這世上最難降的妖魔是什么节榜? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任国裳,我火速辦了婚禮,結(jié)果婚禮上全跨,老公的妹妹穿的比我還像新娘。我一直安慰自己亿遂,他們只是感情好浓若,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛇数,像睡著了一般挪钓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耳舅,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天碌上,我揣著相機(jī)與錄音,去河邊找鬼浦徊。 笑死馏予,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盔性。 我是一名探鬼主播霞丧,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼冕香!你這毒婦竟也來了蛹尝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤悉尾,失蹤者是張志新(化名)和其女友劉穎突那,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體构眯,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愕难,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片务漩。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拄衰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饵骨,到底是詐尸還是另有隱情翘悉,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布居触,位于F島的核電站妖混,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏轮洋。R本人自食惡果不足惜制市,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弊予。 院中可真熱鬧祥楣,春花似錦、人聲如沸汉柒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碾褂。三九已至兽间,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間正塌,已是汗流浹背嘀略。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乓诽,地道東北人帜羊。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像问裕,于是被迫代替她去往敵國和親逮壁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容