安卓開發學Flutter——Dart語法的一些注意點(第二篇)

語言: CN / TW / HK

theme: fancy

本文正在參加「金石計劃 . 瓜分6萬現金大獎」

前言

經過大概兩個星期的空閒時間學習,我簡單的過了一遍Flutter的語言Dart,其實這門語言與Java和Kotlin有很多相似的地方,需要重新學習的地方很少,但有些不同的地方我們就需要單獨來記憶下,所以本篇將一些需要注意的不同點在Dart語法體系中拎出來,防止後面學習的時候出現遺忘可以快速回顧。

正篇

首先寫Dart需要我們先搭好Flutter環境(詳見上篇安卓開發學Flutter——安裝與構建環境的一些注意點(第一篇) - 掘金 (juejin.cn)),然後新建一個Dart檔案即可開始學習編寫:

image.png

第一點 關鍵字注意點

首先,Dart語言上規定預設情況下,宣告的量都是 可變數,不過它也有Kotlin中的var,可以用於表明變數為可變數,而且不用指定變數型別,但這種方式在Dart中不推薦,最好還是明確變數型別,此外每句程式碼末尾也要帶上“;”,這和Java又類似,Kotlin是句末不需要帶此符號的。

image.png 此外還有資料型別裡多了一個num

image.png

num 既可以表示整數,也可以表示小數,根據你賦予的數字型別自己判斷。

第二點 函式注意點

image.png

函式方面,首先不需要和Kotlin一樣要fun關鍵字來標識為函式方法,和Java差不多的定義方式,但如果返回的為一行程式碼可以用“=>”去省寫

image.png 除此以外,Dart又多了很多其他引數使用方法,如下:

1.命名引數

用“{}”和關鍵字required來命名引數 image.png

image.png Dart //命名引數 void demo4({ required int x, required int y }) { x = x * y; } Dart //呼叫採用命名引數的函式不用按引數順序 demo4(y: 5, x: 3); 這種方式的好處就是呼叫的時候不用按引數順序寫入引數。

2.預設引數

與命名引數類似,不過不用使用required關鍵字且要在申明引數時候就給賦值了

image.png

image.png Dart //預設引數 int demo5({ int x = 5, int y = 6, }) { return x + y; } Dart //預設引數不用指定引數值,當然也可以使用引數值讓預設值失效 demo5(); demo5(x: 1, y: 2); 這種也是一個很方便的方式。

3.位置引數

這種是和命名引數有著相反的規定,"[]"裡的必須按順序傳參,如下: Dart //位置引數,需要嚴格按位置傳參,在和如日期相關的時候會用到 String demo6(int year, [int month = 1, int day = 1, int hour = 0, int minute = 0, int second = 0]) { return '$year年$month月$day日$minute$second'; } 還有我們Dart封裝好提供的日期方法也是使用位置引數: image.png 這其中year引數為必須傳參,後面"[]"中引數要按順序填但是選填,原因是我們申明引數時已經賦予了預設值。

此外,可以自定義函式方法,還能將函式方法視為物件,並且可以作為引數放入函式:

image.png

image.png ```Dart typedef Demo = int Function(int);

Demo demo7 = demo;

//函式可以當成物件,並且可以入參方法 int demo8(int a, {Demo? demo}) { if (demo == null) return a; return demo(a); } ``` 這算是和我平時安卓原生開發最大的一點不同了。

第三點 類的注意點

類中限制私有訪問的 成員變數/方法或類 ,通過名稱字首 _ 進行限定,而且Dart不支援過載

image.png

image.png 在Dart的類這塊知識中,最大的不同就是沒有了interface這個關鍵字了,Dart這塊採用抽象類abstract class 宣告,實現還是用關鍵字implements,為解決二義性,這就要求派生類必須覆寫 介面 中的 所有方法。\ 而繼承關鍵字還是extends,此外,Dart還加了新的方式——混入類,混入類需要通過 mixin 關鍵字進行宣告(不能有構造方法),通過 with 關鍵字進行使用,特點是萬金油,繼承抽象類和介面的優勢都有。\ 不過抽象類 、介面 、混入類 都是不能直接例項化的。

總結

這是我過一遍Dart語法的收穫,有些不全面,但暫時也夠用了,總體而言,如果你熟悉Java或Kotlin,應該還是很好學這門語言的,而更多注意的地方需要我在實戰中感悟再更新。\ 不過,如有不對的地方,還希望各位指正,謝謝觀看!