前言
本文的所有內容均是官方文檔的簡單翻譯和理解,需要查看原文,請登錄 https://www.dartlang.org/guides/language/language-tour 閱讀, 讓我們愉快地開始編程吧。
再加一句:dart的關鍵字匯總及詳細介紹我就不翻譯搬運了,大家直接去上邊的網址查看官方文檔即可。
第一部分:基礎概念
以下9條是直接翻譯的,官方說希望你在學習dart時記住這些重要的概念
1.dart將所有的變量都視為一個對象,所有的對象都看作一個類的實例,數字、函數、null也是對象,所有的對象都派生自Object類;
2.dart是強類型的語言,類型注解仍然是可選的,因為dart能夠推斷類型。當你希望變量類型不被指定時,請使用dynamic類型;
3.dart支持通用類型,如list<int>(整數列表)或list<dynamic>(任何類型的對象列表);
4.dart支持頂級函數(如main())以及綁定到類或對象的函數(分別是靜態方法和實例方法)。還可以在函數(嵌套函數或局部函數)中創建函數;
5.dart支持頂級變量,以及綁定到類或對象的變量(靜態變量和實例變量)。實例變量有時稱為字段或屬性
6.dart沒有public、private、protect關鍵字,如果一個變量以下划線(_)開頭,通常表示其是庫私有的;
7.dart的標識符以字母或下划線開頭,后跟任意的字符、數字組合;
8.dart同時具有表達式(具有運行時值)和語句(不具有運行時值),語句通常包含一個或多個表達式,但表達式不能直接包含語句;
9.dart編譯工具通常會報告兩種問題:警告和錯誤。
第二部分:變量
(1) var類型
什么叫變量我們就不說了啊,能看到這文章的應該都了解這個。dart認為變量存儲的是某個對象的reference(引用,標記),我們舉個栗子(非完整代碼):
var name = 'Jack';
上邊那一行代碼,var是一個類型關鍵字,name是變量名字,'Jack'是變量的值。
var類型的變量,編譯器會根據變量值的類型自動為該變量指定類型,例如上邊的代碼,系統會判定name變量為字符串類型,如果你這樣寫: var name = 36; 那么編譯器就判斷name是數字類型。
使用var類型聲明一個變量並賦值后,該變量的類型就確定了,不能再更改了,例如這樣寫代碼(非完整代碼):
var name = 36; name = 'Jack'; print(name);
(2) dynamic類型
顧名思義,dynamic類型是允許程序員在使用過程中動態地改變變量類型的類型,我們看例子(非完整代碼):
dynamic name = 36; print(name); name = 'Jack Ma'; print(name);
這個例子很眼熟吧,就是上邊那個。因為name被聲明為了dynamic類型,因此我們可以對它先賦值int值,再賦值String值,這都沒問題的,我們運行一下看看結果:
Amazing! 沒有報錯,而且准確地打印出了我們的預期值。
(3) 未初始化賦值的變量
以上兩個例子中,我們在變量聲明的地方都給它初始化了,那么又有同學會問了“如果我聲明一個變量,沒有對它初始化,那么默認值是什么呢?” 這位同學很愛思考啊,接下來我們一起了解了解未初始化的情況。
dart認為任何類型的變量,如果未初始化,其默認值都為null。 我們看例子(完整代碼、可直接編譯運行):
main() { int a; if(null == a) { print("a is null\n"); } else { print("Test \n"); } }
我們的運行結果是 a is null
總結
本文主要分享了dart的一些基本概念、思想和兩種變量類型,其中:
var類型的變量,系統會根據其初始化值為其確定類型,且確定之后不能再更改;
dynamic類型的變量,在使用中可以隨時改變其類型,系統會根據該變量的當前值類型確定其當前時刻的類型;
若聲明了某個類型的變量但未對其初始化,則系統認為該變量當前值為null。