Flutter 的開發語言--Dart語言學習

前言

Flutter使用的是Dart語言,我們先來了解Dart的一些基礎特性,便于后面Flutter的開發。

變量聲明

舉例:

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

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

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

總共有四種:

1、var

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

使用 var 來聲明變量,不需要特別指定變量的數據類型。

注意:為什么 var 聲明的變量不需要指定數據類型,而能定義所有的變量呢?
因為 var 存儲的是值的對象的引用,而不是直接存儲的值。

2、明確的數據類型

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

在聲明變量的時候,就使用明確的數據類型。

Dart 支持以下的數據類型:
1、int:整數,范圍為 -2^63 到 2^63 - 1。比如:int x = 1;
2、double:浮點數,64位(雙精度)浮點數。比如:double y = 1.1111;
3、num:是數字類型,既可以表示整數,也可以表示浮點數,具體看賦的值。比如:num x = 1;//x是整數,num y = 1.1111;//y是浮點數;
4、String:字符串,Dart 字符串采用UTF-16編碼,可以使用單引號或雙引號來創建字符串。比如:String s = 'test' 或 String = “test”;
5、bool:布爾值。比如:bool isBoy = true;
6、List、Set、Map
7、Runes:表示采用 UTF-32 的字符串,用于顯示 Unicode 因為 Dart 字符串是 UTF-16,所以需要 Runes 這個特殊語法轉換一下。

3、dynamic

dynamic address = '北京';

dynamic 表明數據類型是動態可變的。它和 var 一樣,可以定義任何變量,但是不同的是,var 一旦賦值后,就不能改變數據類型了,但是 dynamic 可以,比如:
如果 var 這樣使用,就會有編譯錯誤:

var a = 'test';
a = 1;

如果 dynamic 能夠通過編譯,但是會在運行時報錯:

dynamic a = "test";
a = 1;

4、Object

Object money = 100;

Dart 里所有東西都是對象,是因為 Dart 的所有東西都繼承自 Object,因此 Object 可以定義任何變量,并且賦值后,也可以改變類型。

object a = 1;
a = "test";

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

修飾常量用的:finalconst

在用 finalconst 修飾不想改變的值時,需要注意一下幾點:

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

finalconst 區別:
const 是編譯時常量,在編譯時就初始化,值就確定了。
final 是當類創建的時候才初始化。

List、Set 和 Map

List

//使用構造函數創建對象
var list = List<int>();
list.add(1);
list.add(2);

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

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

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

Set
Set<E>,E 表示 Set 里的數據類型,用大括號來賦值:

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. 算術運算符
  2. 比較操作符
  3. 類型判斷符
  4. 賦值操作符
  5. 邏輯運算符
  6. 按位與移位運算符
  7. 條件運算符
  8. 級聯操作符
  9. 其他操作符

1. 算術操作符

  • +:
  • -:
  • *
  • %:取余
  • -var:負數
  • ++/--:加1/減1
    以上這些都和 Java 中的一樣,不同的是
  • /:除,精確除法。比如var a = 3 / 2;結果 a 為 1.5
  • ~/:整除。比如var a = 3 ~/ 2;結果 a 為 1

2. 比較操作符
==、!=、>、<、>=、<= 這些比較操作符和 Java 中一樣

3. 類型判斷符

  • as:類型轉換。注意:轉換的對象不能為null。
  • is:判斷是否是某個類型,如果是的話,就返回 true。
  • is!:判斷是否不是某個類型,如果不是的話,就返回 true。

4. 賦值操作符

  • =:賦值操作符
  • ??=:只有當變量為空的時候才能賦值

5. 邏輯運算符
!、||、&& 這些邏輯符和 Java 一樣

6. 按位與移位運算符

  • &:按位與,對于每一個比特位,只有兩個操作數相應的比特位都是1時,結果才為1,否則為0
  • |:按位或,對于每一個比特位,當兩個操作數相應的比特位至少有一個1時,結果為1,否則為0
  • ^:按位異或,對于每一個比特位,當兩個操作數相應的比特位有且只有一個1時,結果為1,否則為0
  • ~:按位非,反轉操作數的比特位,即0變成1,1變成0
  • <<:左移
  • >>:右移

7. 條件運算符

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

8. 級聯操作符

  • ..:允許你對同一對象進行一系列的操作。

9. 其他操作符

  • {}:函數調用
  • []:訪問列表
  • .:訪問成員變量
  • ?. :有條件的成員變量訪問

語句

在Java中常用的 if else,switchwhiledo while 在 Dart 里面都支持。

函數

在 Dart 中函數也是對象,函數的類型是 Function。
模版格式:

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

}

函數的參數:必選參數和可選參數

  • 必選參數是必填的
  • 可選參數是選填的

必須參數
必選參數就是平時的方法定義的函數參數,比如:

 bool(String name,int age){
    
  }

可選參數
分為兩類:

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

  }

這里參數 age 就是可選命名參數。
同時還可以給命名參數加 @required,意思是這個也是必填參數。

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

  }
  1. 可選位置參數:[]
    賦值和參數是一一對應的。
bool('小明',"123456");//不對,他是有順序的

lambda表達式

=> 語句后面只能跟一行代碼,而且這一行代碼只能是一個表達式,而不能跟語句。表達式可以是函數、值。

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

等價于

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

異常

拋出異常:

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

捕獲異常:

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

跟 Java 不同的是,Dart 可以拋出任意類型的對象。

Dart 中每個對象都是一個類的實例,所有類都繼承自 Object。

class Test{
  int x;
  int y;

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

默認構造函數的寫法就是使用類名作為函數名的構造函數,Dart 還有更簡潔的寫法,

Test(this.x,this.y);

另外,在創建實例的時候,可以不使用 new。

Test test = Test(1, 2);

總結

Dart 的簡單學習到此就結束了,我們主要學習了變量聲明、finalconst、List SetMap、操作符、語句、函數、lambda 表達式和異常。如果想要了解更多的 Dart 語法,可以去看官方文檔(https://dart.dev/guides/language/language-tour)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容