Dart 支持AOT(Ahead Of Time)編譯方式,能夠將源代碼編譯成快速執行的本地代碼。它容許幾乎全部的Flutter都用Dart編寫。這不只使得Flutter運行速度更快,並且全部東西(包括全部的組件)均可以定製。javascript
Dart一樣支持JIT(Just in time)編譯方式,開發週期很是快,並且能夠作到亞秒級熱重載。java
Dart能夠更容易的建立60fps的流程動畫與轉場。。Dart能夠在沒有鎖的狀況下分配對象和垃圾回收。而且,與JavaScript相似,Dart沒有使用搶佔式調度和共享內存(因此並不須要鎖)。因爲Flutter 應用能夠被編譯成本地代碼,因此編譯後的程序不須要在執行過程當中創建一個緩慢的橋樑(例如,JavaScript到本地代碼)。Flutter應用啓動速度也會更快。typescript
Dart並不須要單獨的聲明式佈局語言(如JSX或XML),或單獨的可視化界面構建器,由於Dart的聲明式佈局代碼易於閱讀和可視化。全部的佈局使用一種語言,彙集在一處。Flutter很容易提供高級工具,使佈局更簡單。編程
Dart語言很是容易學習,由於Dart有靜態語言用戶和動態語言用戶所熟悉的特徵。swift
在Dart語言中,全部的東西都是對象,不管是變量、數字、函數等都是對象。全部的對象都是類的實例,全部的類都繼承自Object類。這一點與Java語言相似:一切皆爲對象。windows
Dart語言容許指定數據類型,也能夠不指定數據類型,若是在定義一個變量時未指定數據類型,Dart編譯器會根據右側初始化變量的值自動推斷變量的數據類型。若是在定義變量時未初始化變量,而是在後面初始化的變量,那麼變量的數據類型就是dynamic。Dart語言不會對dynamic進行數據類型檢查,也就是說,dynamic類型的變量能夠保存任何類型的值,也能夠訪問任何屬性和方法(若是不存在,Dart語言會提供特殊的處理方式,詳細內容請看後面的章節)。哪怕dynamic類型變量中的某個成員不存在,在編譯時也不會出錯,但在運行時可能會拋出異常,這一點相似於JavaScript。不過建議指定數據類型,這樣Dart編譯器會盡量將潛在的錯誤檢測出來。瀏覽器
Dart是一種單線程的編程語言,與JavaScript相似,也支持async/await,用法也與JavaScript相似。服務器
強類型(靜態類型語言):變量和函數的返回值須要在編譯時肯定一個惟一的數據類型。若是數據類型不一致,在編譯時會拋出異常,也就是類型檢查未經過。微信
弱類型(動態類型語言):變量的數據類型在運行時肯定,並且變量的數據類型在運行時能夠變化。例如,一個變量在初始化時是字符串類型,在運行時,能夠將一個整數賦給該變量,那麼這時這個變量的數據類型就是int類型了。這種強類型編程語言中是絕對不容許的。app
int number1 = 20; // 指定number1變量的數據類型爲intvar number2 = 20; // 自動識別number2變量的數據類型爲int
var number = 20;number = "hello world"; // 會拋出異常,不能將字符串類型的值賦給int類型的變量
void main() { var s1 = "hello world"; // 自動識別s1爲字符串類型 String s2 = "I love you."; print(s1); print(s2); // 輸出s1的數據類型 print( s1.runtimeType.toString()); var s4; // 默認值是null, s4是dynamic數據類型,由於在定義變量時未初始化 s1 = 20; // 拋出異常,由於不能將整數賦給一個字符串變量}
var s1 = "hello world" // 自動識別s1爲字符串類型var s2:String = "I love you."print(s1)print(s2)// 輸出s1的數據類型print(type(of: s1))s1 = 20 //拋出異常,不能將整數賦給一個字符串變量
var s1 = "hello world" //自動識別s1爲字符串類型var s2:String = "I love you."println(s1)println(s2)// 輸出s1的數據類型println(s1::class.simpleName)s1 = 20 //拋出異常,不能將整數賦給一個字符串變量
s1 := "hello world" // 定義s1變量,並自動識別s1爲字符串類型var s2 string = "I love you."fmt.Println(s1)fmt.Println(s2)fmt.Println(reflect.TypeOf(s1));s1 = 20; //拋出異常,不能將整數賦給一個字符串變量
var s1 = "hello world" // 儘管目前s1是字符串類型,但能夠改變s1的數據類型var s2 = "I love you."console.log(s1)console.log(s2)console.log(typeof(s1))s1 = 20 // 將s1的數據類型變爲int console.log(typeof(s1))s1 = true // 將s1的數據類型變爲boolconsole.log(typeof(s1))
s1 = "hello world" // 儘管目前s1是字符串類型,但能夠改變s1的數據類型s2 = "I love you."print(s1)print(s2)print(type(s1))s1 = 20 // 將s1的數據類型變爲intprint(type(s1))s1 = True // 將s1的數據類型變爲boolprint(type(s1))
greet(String name) { return 'Hello $name';}main() { var name = "李寧"; print(greet(name));}
本文分享自微信公衆號 - 極客起源(geekculture)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。