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