dart語言基礎

FFFomalhaut發表於2021-07-30

大標題

近日開始學習Flutter,自然也就免不了學習dart語言,作為一名C#轉前端,時隔多年又用上了強型別語言,配合vscode使用,頗為親切,彷彿又回到了快樂的winform開發時代。dart學習的話,本人是官網入門教程配合《Flutter 從0到1構建大前端應用》,dart官網的中文文件已經很完善,本文站在前端的角度上會對dart和javascript兩種語言做一些對比,使前端同學可以更快的學習dart語言,話不多說,下邊直奔主題。

概述

dart是一門單繼承強型別語言,所有類都是Object類的子類,dart程式必須有一個主入口函式main(),這和C#是一致的。

關鍵字

這裡沒啥可說的,直接截張圖,需要具體瞭解的請移至官方文件, 傳送門

dart語言基礎

變數宣告

dart宣告變數有以下幾種方式:

  • 通過具體型別定義:宣告型別在關鍵字前,變數型別宣告後不可更改
String str = '我是字串';
print(str); // 我是字串
str = 1; // Error: A value of type 'int' can't be assigned to a variable of type 'String'.
複製程式碼
  • Object基類定義:可以賦值任何型別,這種做法是不推薦的,開發過程中我們需要儘量為變數確定一個型別
Object obj = '我是物件';
print(obj); // 我是物件
obj = 1;
print(obj); // 1
複製程式碼
  • var定義:var定義如果不賦值的話,預設值為null,js中預設為undefined。Dart使用var定義時,變數如果宣告時被賦值,就會根據值的型別進行型別推斷,此變數再次賦值時也必須是第一次值的型別,否則會丟擲型別錯誤,js則可以任意型別賦值
var v;
print(v); // null
v = "v是字串";
print(v); // v是字串
v = 1;
print(v); // 1
var v1 = "型別推斷";
v1 = 1; // Error A value of type 'int' can't be assigned to a variable of type 'String'
複製程式碼
  • dynamic型別定義:dynamic表示特殊型別,編譯器對其不會做任何型別檢查。類似於ts中的any,慎用
dynamic dy;
dy = 1;
print(dy);  // 1
dy = "string";
print(dy);  // string
複製程式碼
  • const和final定義:使用過程中不會被修改的變數.const的使用方式與js類似,稍有區別在於dart中的const只能賦值常量值,如果將其他定義好的變數賦值給const常量會丟擲型別錯誤,js中因沒有型別檢查,是可以這樣做的。final變數值只能被設定一次,使用過程中與const的區別在於,例項變數可以是final型別,但不能是const型別,話有點多,看?
var vc = 1;
const co = vc + 1;  // Not a constant expression. js可以這樣做,co會是2
const cL = List(); // Error: Cannot invoke a non-'const' factory where a const expression is expected
final fL = List();
print(fL); // []  
複製程式碼
  • 最後給一下官方文件變數部分傳送門

參考

相關文章