Dart基础学习02--变量及内置类型
Dart基礎學習02--變量及內置類型
Dart中的變量
首先看一個變量的定義和賦值
var name = 'Bob';在Dart中變量名都是引用,這里的name就是一個指向值為Bob的字符串的引用。
默認值
在Dart中沒有初始化的變量都有一個默認值null,哪怕是int型的變量它的初始值也是null,因為在Dart中int也是一個對象。
int lineCount; assert(lineCount == null); 注意:這里引入一個Dart的重點知識,在Dart中任何可以放入變量中的都屬于`對象`,而對象又都是`類`的一個實例。即使是數字,方法,null也都是對象,并且所有的對象都繼承自`Object`這個類。可選類型
在Dart中,可以選擇使用靜態類型來定義變量,如下:
String name = 'Bob';這樣做的好處有以下幾點:
1.變量可以更好的表達你的意圖。
2.編輯器或編譯器可以通過變量的靜態類型來檢測代碼中未知餓的錯誤。
final 和 const
如果一個變量不允許改變的話可以使用final和const關鍵字來代替var或者其他靜態類型。其中final類型的變量只能被賦值一次,而const類型的為編譯時常量自然也無法改變其值。
一個用final定義的頂級變量或類成員變量只有在它第一次被使用的時候才會初始化。
final name = 'Bob'; // 也可以寫作: final String name = 'Bob'; // name = 'Alice'; // 這一步會報錯 注意:final的這種懶惰型初始化方法可以有效的提升程序運行速度。如果你想要讓你的變量是編譯時常量的話就可以使用const關鍵字,但需要注意的是如果這個變量是一個類的成員變量的話就必須要使用static const。原因是如果沒有聲明一個類的對象事例的話,類的成員變量是不存在的,既然不存在自然就無法將其作為編譯時常量了。更近一步說,只有在程序運行且聲明了類的對象實例的情況下,其成員變量才是存在的。使用static修飾成員變量的話此變量就與對象實例無關了而可以直接通過類來獲得。
const bar = 1000000; // 壓力單位 (dynes/cm2) const atm = 1.01325 * bar; // 標準大氣壓Dart的內置類型
Dart支持的內置數據類型有:數字,字符串,布爾,數組,集合等。
數字類型
Dart提供兩種數字類型:
int
整型,范圍在 -2^53 to 2^53.
double
64位雙精度浮點類型,采用 IEEE 754標準。
int和double都是num的子類,num類型之間的基本操作有+,-,*,/和位操作<<,>>。另外num對象有abs(),ceil(),floor和一些其他的運算方法。如果以上這些方法還滿足不了你的話,你可以使用Math庫。
下面是一些整形變量的定義:
var x = 1; var hex = 0xDEADBEEF; var bigInt = 34653465834652437659238476592374958739845729;下面是一下雙精度型變量的定義:
var y = 1.1; var exponents = 1.42e5;你也可以使用下面這些方法將字符串轉換為數字類型:
// String -> int var one = int.parse('1'); assert(one == 1);// String -> double var onePointOne = double.parse('1.1'); assert(onePointOne == 1.1);// int -> String String oneAsString = 1.toString(); assert(oneAsString == '1');// double -> String String piAsString = 3.14159.toStringAsFixed(2); assert(piAsString == '3.14');int類型支持按位操作如<<,>>,&,|,看一下下面幾個例子:
assert((3 << 1) == 6); // 0011 << 1 == 0110 assert((3 >> 1) == 1); // 0011 >> 1 == 0001 assert((3 | 4) == 7); // 0011 | 0100 == 0111字符串類型
在Dart中字符串采用utf-16的編碼格式。可以使用單引號'或雙引號"來創建變量。
var s1 = 'Single quotes work well for string literals.'; var s2 = "Double quotes work just as well."; var s3 = 'It\'s easy to escape the string delimiter.'; var s4 = "It's even easier to use the other delimiter.";在Dart中可以使用${expression}作為作為字符串的插值,若expression 只是一個變量標識符的話可以省略{}。
var s = 'string interpolation';assert('Dart has $s, which is very handy.' =='Dart has string interpolation, ' +'which is very handy.'); assert('That deserves all caps. ' +'${s.toUpperCase()} is very handy!' =='That deserves all caps. ' +'STRING INTERPOLATION is very handy!'); 注意:在Dart中用`==`來判斷兩個對象是都等效。兩個字符串等效的條件是他們包含相同的字符串。在Dart中可以將幾個字符串靠在一起或使用+來連接它們:
var s1 = 'String ' 'concatenation'" works even over line breaks."; assert(s1 == 'String concatenation works even over ''line breaks.');var s2 = 'The + operator '+ 'works, as well.'; assert(s2 == 'The + operator works, as well.');另外還可以使用三個"來定義多行的字符串:
var s1 = ''' You can create multi-line strings like this one. ''';var s2 = """This is also a multi-line string.""";可以使用r來定義一些原生字符串(轉義字符無效):
var s = r"In a raw string, even \n isn't special.";布爾類型
在Dart中使用bool標識布爾類型。bool類型的只只有true或false。值得注意的是在Dart中只有true會被當作是正確,而false或者其他數字,null等都會被當作false。
下面這段代碼,在Dart中if條件是不成立的。應為name是一個對象。
下面這段代碼中的Dart會進入else段,而JavaScript則會進入if段:
if (1) {print('JS prints this line.'); } else {print('Dart in production mode prints this line.'); }數組
在Dart中使用List來表示數組,這個是比較讓我們不能接受的一個設計。不多說看具體怎么用吧:
var list = [1, 2, 3]; //List list = [1, 2, 3]; assert(list.length == 3); assert(list[1] == 2);在List中的單位也是從0開始的。
鍵值集合
在Dart中使用Map來表示鍵值類集合。其中的鍵值可以是任何對象且鍵不能重復。
下面看一下Map的具體用法:
同樣可以使用構造方法來定義Map:
var gifts = new Map(); gifts['first'] = 'partridge'; gifts['second'] = 'turtledoves'; gifts['fifth'] = 'golden rings';var nobleGases = new Map(); nobleGases[2] = 'helium'; nobleGases[10] = 'neon'; nobleGases[18] = 'argon';往Map中添加新鍵值:
var gifts = {'first': 'partridge'}; gifts['fourth'] = 'calling birds'; // Add a key-value pairMap中檢索鍵所對應的值:
var gifts = {'first': 'partridge'}; assert(gifts['first'] == 'partridge'); assert(gifts['second'] == null);獲得Map中鍵值對的個數:
var gifts = {'first': 'partridge'}; gifts['fourth'] = 'calling birds'; assert(gifts.length == 2);從Map中移除鍵值對:
var nobleGases = {54: 'xenon'};assert(nobleGases[54] == 'xenon');// containsKey方法可以用于判斷是否包含某個Key assert(nobleGases.containsKey(54));nobleGases.remove(54); assert(!nobleGases.containsKey(54));Map的更多用法可以參考Maps。
所有Dart學習內容和相關源碼都會在github上的DartNovel開源項目進行同步,歡迎關注。
轉載于:https://www.cnblogs.com/zqlxtt/p/4825410.html
總結
以上是生活随笔為你收集整理的Dart基础学习02--变量及内置类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS9适配(包括APNs)的改变
- 下一篇: poj Going from u to