Dart語言與其餘語言究竟有什麼不一樣呢?在已有的編程語言經驗的基礎上,咱們該如何快速上手呢?本篇文章從編程語言中最重要的組成部分,也就是基礎語法與類型變量出發,一塊兒來學習Dart吧express
Dart能夠在編譯器(Android Studio)、命令行(前提是安裝了Dart SDK)及網頁repl.it中調試編譯,因爲本次內容比較簡單,咱們直接在網頁中調試編譯便可。編程
咱們定義一個輸出當前時間的函數,並輸出當前時間數組
//輸出當前時間 void nowTime() { int year = DateTime.now().year; int month = DateTime.now().month; int day = DateTime.now().day; int hour = DateTime.now().hour; int minute = DateTime.now().minute; int second = DateTime.now().second; String str = 'Hello World, This is $year-$month-$day $hour:$minute:$second'; print(str); }
和絕大多數其餘語言同樣,Dart要求以main函數做爲執行的入口,咱們再定義main函數,並將輸出當時時間的函數放入main函數中安全
void main() { nowTime(); }
點擊「run」按鈕,命令就會輸出微信
Hello World, This is 2019-8-11 10:45:46
咱們已經能夠簡單的運行Dart代碼了,咱們接下來再看一下Dart的基本變量類型編程語言
在Dart中,全部的變量均可以用var來申明,固然,也能夠指定具體的類型來申明一個變量。當使用var申明變量時,表示類型是交由編譯器推斷決定的。雖然Dart支持用var來申明變量,但我仍是建議使用具體的類型來申明變量,這樣編輯器和編譯器就能使用這些具體的類型,向你提供代碼補全或編譯告警的提示了。編輯器
注意:在默認狀況下,全部未初始化的變量值都是null,所以,咱們判斷變量是否初始化時只用和null比較便可。函數
Dart是類型安全的語言,而且全部類型都是對象類型,都繼承自頂層類型Object,所以一切變量的值都是累的實例(即對象),其中包括數字、布爾值、函數和null也都是繼承自Object對象。學習
Dart內置了一些基本類型,如num、bool、String、List及Map。命令行
num、bool及String基本上是編程語言中最經常使用的類型
Dart的數值類型num只有兩種子類:int(整數類型)和double(浮點類型)
void numVerb() { int x = 100; double y = 5.2; double xy=x*y; int roundY = xy.round(); print('x = $x, y = $y, xy = $xy, roundY = $roundY'); }
x = 100, y = 5.2, xy = 520.0, roundY = 520
除了常見的基本運算符(好比:+、-、*、/,以及位運算符)外,還能使用繼承自num的abs()、round()等方法來實現求絕對值、取整等功能。
Dart的布爾類型bool也只有兩種取值:true和false,他們都是編譯時常量。 Dart是類型安全的,所以咱們須要顯示的檢查值
void checkValue() { bool isTrue = true; assert(isTrue == true); //assert(isTrue);//錯誤 }
Dart的String由UTF-16de字符串組成,定義字符串時咱們既能使用單引號也能使用雙引號,而且還能在字符串中嵌入變量或表達式(可使用${express}把一個表達式的值放進字符串,而若是是一個標識符,則能夠省略{})。
/** * 將一個字符串中的字母所有轉換爲大寫 */ void upperCase() { String str = 'toUpperCase'; String str2 = "toUpperCase"; String str3 = 'str = $str, str2 = $str2, str to upperCase: ${str.toUpperCase()}'; print(str3); }
str = toUpperCase, str2 = toUpperCase, str to upperCase: TOUPPERCASE
爲了得到內嵌對象的字符串,Dart會調用對象的toString()方法,而常見字符串的拼接,Dart則經過內置運算符「+」實現。
void stringVerb() { int year = DateTime.now().year; int month = DateTime.now().month; int day = DateTime.now().day; int hour = DateTime.now().hour; int minute = DateTime.now().minute; int second = DateTime.now().second; String str = 'Hello World, This is ' + year.toString() + '-' + month.toString() + '-' + day.toString() + ' ' + hour.toString() + ':' + minute.toString() + ':' + second.toString(); print(str); }
Hello World, This is 2019-8-11 12:19:31
對於多行字符串對的構建,你能夠經過三個單引號或三個雙引號的方式申明
void stringVerb() { int year = DateTime.now().year; int month = DateTime.now().month; int day = DateTime.now().day; int hour = DateTime.now().hour; int minute = DateTime.now().minute; int second = DateTime.now().second; String str = """Hello World, This is $year-$month-$day $hour:$minute:$second"""; print(str); String str2 = '''Hello World, This is $year-$month-$day $hour:$minute:$second'''; print(str2); }
Hello World, This is 2019-8-11 12:32:5 Hello World, This is 2019-8-11 12:32:5
List和Map分別對應其餘編程語言中的數組和字典類型,統稱爲集合類型
void listTest() { List<String> arr1 = ['name', 'age', 'sex']; for (var value in arr1) { print(value); } List<int> aar2 = List.of([1, 2, 3]); aar2.add(4); for (var value2 in aar2) { print(value2); } List<num> nums = new List<num>(); nums.add(1); nums.add(1.1); nums.add(3); nums.add(5.20); for (var value3 in nums) { print(value3); } }
name age sex 1 2 3 4 1 1.1 3 5.2
如上代碼所示,咱們申明並初始化了三個List變量,並調用其各自的迭代方法依次打印出其內部元素
void mapTest() { Map<String, String> map = {'name': 'Jack', 'age': '18', 'sex': '男'}; map['name'] = 'Tom'; map['age'] = '20'; map['sex'] = '男'; map.forEach((k, v) => print('$k:$v')); Map map2=new Map<String,String>(); map2['name']='Dart'; map2['age']='2'; map2.forEach((k,v)=>print('$k:$v')); }
name:Tom age:20 sex:男 name:Dart age:2
如上代碼所示,咱們申明並初始化了兩個Map變量,一樣調用其各自的迭代方法依次打印出其內部的元素
若是你想定義不可變的變量,則須要在定義前加上final或const關鍵字
const:表示變量在編譯期間既能肯定的值
final:表示變量能夠在運行時肯定值,但一旦肯定後就不可改變
const與final區別:在定義const常量時,必須直接賦值,且只能是一個固定值,不能爲一個變量或公式;在定義final常量時,能夠賦值也能夠不賦值,賦值時能夠賦值爲一個固定值,也能夠賦值爲一個變量或公式,但一旦賦值後就不能再改變
已同步更新至微信公衆號,歡迎關注「Android小白營」