Dart語法基礎
Dart語言簡介
Dart是Google推出的一門編程語言,最初是希望取代Javascript運行在瀏覽器端,后臺慢慢發展成可以開發Android、iOS和web端APP的一門高質量的編程語言,目前Dart的版本是Dart2。
Dart語言特性
Productive Dart’s syntax is clear and concise, its tooling simple yet powerful. Sound typing helps you to identify subtle errors early. Dart has battle-hardened core libraries and an ecosystem of thousands of packages.Fast Dart provides optimizing ahead-of-time compilation to get predictably high performance and fast startup across mobile devices and the web.Portable Dart compiles to ARM and x86 code, so that Dart mobile apps can run natively on iOS, Android, and beyond. For web apps, Dart transpiles to JavaScript.Approachable Dart is familiar to many existing developers, thanks to its unsurprising object orientation and syntax. If you already know C++, C#, or Java, you can be productive with Dart in just a few days. Reactive Dart is well-suited to reactive programming, with support for managing short-lived objects—such as UI widgets—through Dart’s fast object allocation and generational garbage collector. Dart supports asynchronous programming through language features and APIs that use Future and Stream objects. |
Dart語法簡介
官網上對于Dart的語法也有詳細介紹,不過是全英文的,如果對英文沒有什么閱讀障礙,可以直接移步官方文檔。
下面我們通過Android Studio作為開發工具來一起了解Dart的語法基礎。
新創建的Flutter項目,Dart代碼主要在lib/main.dart文件中,由于本篇主要講的是Dart的語法,故暫時不看main.dart文件,在lib目錄下我們創建一個新的.dart文件grammar.dart,如圖:
然后我們在grammar.dart中鍵入以下代碼
// Define a function. printInteger(int aNumber) { print('The number is $aNumber.'); // Print to console. } // This is where the app starts executing. main() { var number = 42; // Declare and initialize a variable. printInteger(number); // Call a function. } |
這段代碼一些基本的用法,基本所有的語言都通用的語法:
// This is a comment. 單行代碼注釋,不用多說int int是Dart中的一種數據類型,同時還有其他的數據類型如:String List bool等。
42 一個數字字面量,數字字面量是編譯時常量的一種。print()顯示輸出的一種便捷方法'xxx' 或者 “xxx”兩種方式都可以表示字符串
$variableName 或者 ${expression}字符串插值:包含一個變量或表達式的字符串等效于字符串字面量sample: var name = 'zgy'; print("hi,I am $name"); int a = 1,b = 2; print("$a + $b = ${a + b}");
main()主函數,程序從這里開始。。。
var 一種聲明變量而不指定其類型的方法示例代碼中 var number = 42; //這里42被推斷為int類型
Dart重要概念
一切皆對象,無論數字、函數、和null都是對象。所有對象都繼承自[Object]類。
Dart是強類型語言,但是類型聲明可選,因為Dart可以推斷類型。(類似Swift)
Dart支持通用類型,如List(整數列表)或List(任何類型的對象列表)。
Dart支持頂級函數(如main()),以及綁定到類或對象(分別是靜態方法(static)和實例(instance)方法)的函數。您還可以在函數(嵌套或局部函數)中創建函數。
類似地,Dart支持頂級變量,以及綁定到類或對象(靜態和實例變量)的變量。實例變量有時被稱為字段或屬性。
與Java不同,Dart沒有公開、保護和私有的關鍵字。如果標識符以下劃線(_)開頭,則該標識符對其庫是私有的。有關詳細信息,請參見[庫和可見性]。
標識符可以以字母或下劃線(_)開頭,然后是這些字符加上數字的任何組合。
有時候,某事物是一個表達(expression )還是一個語句(statement)是很重要的,所以這兩個詞要準確。
Dart工具可以報告兩種問題:警告和錯誤。警告只是表明您的代碼可能不工作,但它們不會阻止您的程序執行。錯誤可以是編譯時錯誤,也可以是運行時錯誤。編譯時錯誤阻止了代碼的執行;運行時錯誤導致代碼執行時引發異常。
Dart變量
聲明變量有多種方式:
main(){ int a = 10;
//指明變量類型為int
bool = true;
//指明變量類型為bool
String name = 'zgy';
//指明變量類型為String
var name = 'zgy';
//自動推斷變量類型String
dynamic name = 'zgy';
//自動推斷變量類型String
}
默認值
未初始化的變量的初始值為null。
Final 和 const修飾符
如果您從未打算更改一個變量,請使用final或const修飾他,而不是使用var或其他變量類型。最終變量只能設置一次;const變量是一個編譯時常數。(Const變量是隱式最終變量。)最終的頂級或類變量在第一次使用時被初始化。
注意:實例變量可以是final,但不能是const。[實例變量定義在對象一級,它可以被類中的任何方法或者其他類中的方法訪問,但是不能被靜態方法訪問。]
Sample: final name = 'zgy'; // Without a type annotation final String nickname = 'zgy'; |
你無法更改final變量的值:
name = 'zgy'; //Error:a final variable can only be set once. //這是個錯誤的示例,使用final聲明的變量是不可以更改的。 |
對于想要在編譯時確定并且不再變的變量,使用const。如果const變量位于類級別,則將其標記為靜態const。
在聲明該變量時,將該值設置為編譯時常量,例如數字或字符串字面量、const變量或常量數字算術運算的結果:
const bar = 1000000; // Unit of pressure (dynes/cm2) const double atm = 1.01325 * bar; // Standard atmosphere |
const關鍵字不只是聲明常量變量。您還可以使用它來創建常量值,以及聲明創建常量值的構造函數。任何變量都可以賦一個常量值。
var foo = const []; final bar = const []; const baz = []; // Equivalent to `const []` |
您可以從const聲明的初始化表達式中省略const,如上面的baz。
您可以更改一個非final的非const變量的值,即使它曾經有一個const值:
foo = [1, 2, 3]; // Was const []
你不能改變const變量的值:
baz = [42]; // Error: Constant variables can't be assigned a value.
Final和Const的區別:
- 區別一:final要求變量只能初始化一次,并不要求賦的值一定是編譯時常量,可以是常量也可以不是。而const要求在聲明時初始化,并且賦值必需為編譯時常量。
- 區別二:final是惰性初始化,即在運行時第一次使用前才初始化。而const是在編譯時就確定值了。
內建類型
Dart有以下幾種內建的數據類型:
- numbers
- strings
- booleans
- lists (also known as arrays)
- maps
- runes (for expressing Unicode characters in a string)
- symbols
下面用一段代碼來演示以上各類數據類型:
main() { // numbers 有兩種形式 int和double var a = 0; int b = 1; double c = 0.1; // strings var s1 = 'zgy'; String s2 = "zgy"; // booleans var real = true; bool isReal = false; // lists var arr = [1, 2, 3, 4, 5]; Listarr2 = ['hello', 'world', "123", "456"]; Listarr3 = [1, true, 'zgy', 1.0]; // maps 在Dart2中new關鍵字是可選的 var map = new Map(); map['name'] = 'zhangsan'; map['age'] = 10; Map m = new Map(); m['a'] = 'a'; //runes,Dart 中 使用runes 來獲取UTF-32字符集的字符。String的 codeUnitAt and codeUnit屬性可以獲取UTF-16字符集的字符 var clapping = '\u{1f44f}'; print(clapping); // 打印的是拍手emoji的表情 // symbols 符號對象表示在Dart程序中聲明的操作符或標識符。您可能永遠不需要使用符號,但是對于按名稱引用標識符的api來說,它們是非常重要的,因為縮小改變了標識符名稱而不是標識符符號 print(#s == new Symbol("s")); // true } |
手機瀏覽
全國
19974831731





