首頁 > 軟體

Flutter入門學習Dart語言變數及基本使用概念

2022-09-26 14:05:23

正文

Dart是Google釋出的開源程式語言,是一種物件導向的語言。其主要應用是Flutter框架開發(Android、IOS),此外,也可以用在伺服器、指令碼、Web開發中。隨著Flutter3.0開始支援全平臺開發,Dart也可以實現桌面應用。

關於Dart的介紹不再細說。下面開始Dart的使用介紹

首先記住一點:在Dart中一切皆物件。

Dart中,所有變數參照的都是 物件,每個物件都是一個 的範例。

字串、數位、函數以及 null 都是物件。除去 null 以外(如果開啟了空安全), 所有的類都繼承於 Object 類。

Dart官方站點:dart.dev/

變數

語句:

語句是程式碼中可以被執行的最小表達形式,類似於一句話。程式碼的執行是以語句為單位進行的。

比如宣告語句宣告一個變數或函數、賦值語句進行賦值、呼叫語句執行一個方法等。

變數的宣告賦值

宣告語句用來表示一個變數名或方法名。賦值語句則通常是給一個變數賦值。

通常變數的宣告和賦值是一起的,其語法是 型別 變數名 = 物件;,相當於為物件取了個名字(變數名)。

String name = "張三"; // 宣告賦值語句

在宣告時進行賦值也就是變數的初始化。

變數是一個參照。由於Dart中“萬物皆物件”的原則,變數儲存的都是物件的參照,變數指向的是物件。

Dart中不可空物件在宣告時必須賦值(即必須初始化)。只有函數內部的本地變數才可以在宣告時不需要初始化。 這是Dart的空安全機制的限制。

如下,如果之生命String變數。

比如,函數內部的本地變數可以先宣告後賦值使用。

變數的劃分

變數或數值,在程式設計中通常分為:可變數、不可變數(常數)、靜態變數(static)

預設宣告的變數都是可變數。

int a=10;
a=a*2;

不可變數與可變數相對應,也叫常數,是初始化賦值(或第一次賦值)後不允許修改的變數。通過finalconst修飾符進行限定。

通常推薦使用final定義沒有修改需求的量。宣告後,final量允許在執行期間根據需要賦值一次,之後不能修改。

const通常用於修飾那些在程式執行前就已經確定的量。比如永恆不變的數位:圓周率、加速度等。需要在宣告時初始化賦值,之後不能修改。相對final更為嚴格。

static關鍵字用於修改一個類的靜態變數,只能用在類中。表示一個類上的變數。

預設值

在 Dart 中,未初始化以及可空型別的變數擁有一個預設的初始值 null。

即便數位也是如此,因為在 Dart 中一切皆為物件。

int? count;
assert(count == null);

assert() 的呼叫將會在生產環境的程式碼中被忽略掉。

在開發過程中,assert(condition) 將會在 條件判斷 為 false 時丟擲一個異常。詳情請查閱 Assert

變數的型別推斷修飾符

在變數宣告時,也可以不同指定變數型別,而是使用Dart的型別推斷(Dart分析器analyzer的型別推斷),自動推斷出一個變數的型別。【如果無法推斷出型別,將會作為dynamic型別使用】

var關鍵字用於普通變數的型別推斷。

比如下面,會自動推斷出變數a為String,b為int:

var a="a";
var b=1;

finalconst用於修飾一個常數,但同時也可以起到var關鍵字的型別推斷的作用。

finalconst變數只可以被賦值一次,之後不允許修改。

一個 const 變數是一個編譯時常數(const 變數同時也是 final 的),必須在宣告時賦值。final也可以稱作執行時常數。

void foo(){
  final k;
  k=10;
  // k=20; // 只能賦值一次
  const m="m";
  // m="k"; // 不允許修改。
}

const可以用來建立常數值(值是常數,並不是前面的變數是常數。) 

var foo = const [];
foo=[1,2];

範例變數可以是final的但不可以是const。const要修飾類中的變數,必須在前面加上static關鍵字。

class MyClass{
  var a="a";
  static const c=10;
  final f="final";
}

通常,不是很推薦使用型別推斷,因為對於編寫者和閱讀者,明確變數型別非常重要。

Late變數

Dart 2.12引入了late修飾符,作用是:

  • 宣告一個可以在宣告之後初始化的非空變數
  • 懶初始化一個變數。

第一個作用主要針對頂層變數或範例變數,即上面所說的不可空變數必須在宣告時初始化的情況。

如果只是想宣告一個變數,僅僅在用到時再賦值,並且Dart不允許這樣做時,可以在該變數宣告前新增late修飾符:

late String name_late;
void foo(){
  name_late='late變數';
  print(name_late);
}

即使宣告late變數時初始化賦值,也只會在該變數第一次使用時進行初始化。一般在以下兩種情況時使用懶初始化(lazy initialization)非常方便:

  • 變數可能不是必須的,並且初始化非常耗時。
  • 初始化的範例變數的初始化器需要存取this。

比如下面的temperature變數,如果從不使用,對應的開銷很大的readThermometer()函數也將從不會被呼叫。

late String temperature = readThermometer(); // Lazily initialized.

型別判斷is和型別轉換as

is用於判斷變數的型別。如果物件是指定型別則返回 true

if (p is Person) {
  p.Name = 'xxx';
}

as型別轉換:

(p as Person).Name = 'Bob';

一些重要概念

Dart中一切皆物件

空安全和可空型別?

如果開啟了空安全,變數在未宣告為可空型別時不能為 null。

在型別後新增問號(?)可將型別宣告為可空。如int?表示整型或null。

可以通過Object?Objectdynamic顯式宣告一個任意型別。

dynamic會推遲到執行時執行型別檢查,通常應避免使用 dynamic 型別。

Dart支援頂層函數(如main())、類或物件的函數(靜態方法和實體方法),也可以在函數內建立函數(函數巢狀或本地函數)

top-level functions

Dart支援頂層變數、類或物件的變數(靜態變數和範例變數)。範例變數也稱為欄位或屬性。

Instance variables are sometimes known as fields or properties

表示式和語句

Dart語法中分為

  • 表示式(expressions)—— 有執行時值,即有返回值的是表示式
  • 語句(statements)—— 沒有執行時值,即語句沒有返回值

一條語句通常包含一個或多個表示式,相反表示式不能直接包含語句。

例如,條件表示式 condition ? expr1 : expr2 的值可能是 expr1expr2。將其與 if-else 語句相比較,if-else 語句沒有值。

比如 a==nulla!=null 就是一個條件表示式,其返回false或true值。

if(a==null){ } 就是一個if語句,或者條件語句

Dart沒有public、protected和private類似的成員存取限定符

如果一個識別符號以下劃線 (_) 開頭,則表示該識別符號在庫內是私有的。

underscore (_)

註釋

註釋是程式設計中的說明性文字,對程式碼起到解釋說明的作用。不參與實際的程式碼執行。

  • 單行註釋://
  • 多行註釋:/* 開始,*/ 結尾,中間的內容為註釋

DartPad

DartPad頁面是一個可以在瀏覽器中執行Dart語言的線上工具。

對於一些測試程式碼、臨時執行的程式碼,可以直接在DartPad執行檢視。

也可以根據需要將DartPad進入到自己的站點網頁內,方便檢視執行程式碼。

參考

Dart 開發語言概覽

以上就是Flutter入門學習Dart語言變數及基本使用概念的詳細內容,更多關於Flutter入門Dart語言變數的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com