(二)flutter入門之dart基礎(chǔ)數(shù)據(jù)類型介紹

時代背景

Dart是谷歌開發(fā)的計算機(jī)編程語言羹应,后來被Ecma (ECMA-408)認(rèn)定為標(biāo)準(zhǔn)橙数。它被用于web瘪吏、服務(wù)器蔑祟、移動應(yīng)用和物聯(lián)網(wǎng)等領(lǐng)域的開發(fā)晌区。它是寬松開源許可證(修改的BSD證書)下的開源軟件寞埠。
Dart是面向?qū)ο蟮钠ㄖ谩㈩惗x的、單繼承的語言仁连。它的語法類似C語言蓝角,可以轉(zhuǎn)譯為JavaScript,支持接口(interfaces)、混入(mixins)使鹅、抽象類(abstract classes)颇象、
具體化泛型(reified generics)、可選類型(optional typing)和sound type system.dart語言最早出現(xiàn)在2011年10月10至12日在丹麥奧爾胡斯舉行的GOTO大會上并徘,
剛發(fā)布時遣钳,并無多大波瀾,直到2015年5月Dart開發(fā)者峰會上麦乞,亮相了基于Dart語言的移動應(yīng)用程序開發(fā)框架Sky蕴茴,后更名為Flutter,那時正基于移動端開發(fā)由
應(yīng)用開發(fā)朝混合開發(fā)方向轉(zhuǎn)變時期,flutter開始慢慢發(fā)展姐直,在2018年2月27日在2018世界移動大會公布了flutter的Beta1版本以后倦淀,不到一年的時間,裂變到了1.0版本声畏,
并且github幾個月時間內(nèi)裂變到了50kstar+的成績撞叽,國內(nèi)大廠紛紛跟進(jìn)dart和flutter開發(fā),阿里的閑魚App在谷歌大會后不久插龄,率先大量使用flutter改造客戶端愿棋,
甚至在不久之前還開源了基于flutter的開源框架Fish Redux,而flutter的社區(qū)以及論壇均牢,以及github每天的活躍度快速增高糠雨,sdk更新的速度也相當(dāng)可觀,所以可以說現(xiàn)在已經(jīng)到了全民學(xué)習(xí)flutter的時代

Dart入坑前必須要知道的點(diǎn):

  • 在Dart中所有的類都繼承于Object類徘跪,所有可以使用的變量引用的都是對象類型(即都為類的實(shí)例對象)甘邀,并且數(shù)值類型、方法以及null都是對象垮庐,真正意義上的完全面向?qū)ο蟮恼Z言

  • 在開發(fā)過程中松邪,可以忽略對象的類型,默認(rèn)未指定類型的變量為dynamic(動態(tài)類型),并且可以使用靜態(tài)類型修飾更明確表達(dá)開發(fā)的意圖

  • Dart 在運(yùn)行之前會先解析你的代碼哨查,你可以通過使用 類型或者編譯時常量來幫助 Dart 去捕獲異常以及 讓代碼運(yùn)行的更高效

  • Dart 支持頂級方法 (例如 main())逗抑,同時還支持在類中定義函數(shù),(靜態(tài)函數(shù)和實(shí)例函數(shù))解恰。 你還可以在方法中定義方法 (嵌套方法或者局部方法)

  • Dart 還支持頂級變量锋八,以及 在類中定義變量(靜態(tài)變量和實(shí)例變量)浙于。 實(shí)例變量有時候被稱之為域(Fields)或者屬性(Properties)

  • 和 Java 不同的是护盈,Dart 沒有 publicprotected羞酗、 和 private 關(guān)鍵字腐宋。如果一個標(biāo)識符以 _ 開頭,則表示當(dāng)前對象(庫或者類)是私有的,無法被外部直接引用

  • 標(biāo)識符可以以字母或者 _ 下劃線開頭胸竞,后面可以是 其他字符和數(shù)字的組合

  • Dart 工具可以指出兩種問題:警告和錯誤欺嗤。 警告只是說你的代碼可能有問題, 但是并不會阻止你的代碼執(zhí)行卫枝。 錯誤可以是編譯時錯誤也可以是運(yùn)行時錯誤煎饼。遇到編譯時錯誤時,代碼將 無法執(zhí)行校赤;運(yùn)行時錯誤將會在運(yùn)行代碼的時候?qū)е乱粋€異常

  • 表達(dá)式 expression語句 statement 是有區(qū)別的,不是任何時候都是一樣的情況,應(yīng)當(dāng)注意區(qū)分情況對待

注:Dart語言在某種意義上是完全站在巨人的肩膀為時代背景冲簿,并且早期被谷歌寄予厚望拦焚,希望能借此挑戰(zhàn)js在web端的地位,所以Dart可以說是集百家之長浑测,
C++翅阵,Java,Kotlin迁央,Python以及Java Sripct五大語言的優(yōu)良特性于一身掷匠,但也因此失去了屬于Dart這門語言的個性和風(fēng)格,雖然僅僅是單線程運(yùn)行的語言岖圈,
限制了Dart崛起的勢頭槐雾,但是因為有了這些優(yōu)秀的特性支持,使得Dart依然是個值得推薦學(xué)習(xí)的面向?qū)ο笳Z言(接下來可能會從Dart關(guān)鍵字幅狮,類型募强,異常處理,
異步支持等常見特性和java或者js進(jìn)行比較學(xué)習(xí)Dart語言)

Dart中的關(guān)鍵字(截止至Dart 2.x版本)

Dart中的關(guān)鍵字非常多崇摄,可以說java擎值,js等常見的關(guān)鍵字都在其中,加起來足足有56個

abstract continue false new this
as default final null throw
assert deferred finally operator true
async do for part try
async* dynamic get rethrow typedef
await else if return var
break enum implements set void
case export import static while
catch external in super with
class extends is switch yield
const factory library sync yield

Dart的變量類型

dart中的變量與java的變量類型有些相似但是又不完全相同逐抑,java中的變量類型大概可以歸納為四種類型(常見通用類型):

數(shù)值類型:byte鸠儿、short、int厕氨、long
浮點(diǎn)類型:float进每、double
布爾類型:boolean
字符型:char、String

java中對類型劃分很細(xì)節(jié)化命斧, 區(qū)分的很明顯田晚,但是在dart中,依然可以大概分為這幾類国葬,但是dart中的容錯性提高了贤徒,細(xì)節(jié)化減少芹壕,dart的基本類型大概如下:

數(shù)值類型:int、double接奈、num
布爾類型:bool
字符型:String

可見dart中的數(shù)值類型基本就是根據(jù)是否浮點(diǎn)類型劃分出了兩個基本類型以及這兩個基本類型的父類型踢涌,但是有意思的點(diǎn)是,int和double類型的字節(jié)大小數(shù)居然和操作系統(tǒng)以及當(dāng)前輸入的位數(shù)有關(guān)系

int
在dart中序宦,int類型的取值范圍取決于當(dāng)前運(yùn)行的系統(tǒng)環(huán)境睁壁,比如dart初衷用來運(yùn)行在瀏覽器端,所以dart使用了javaScipct的取值范圍互捌,也就是- 2^(53) ~ 2^(53) - 1堡僻,
但是由于發(fā)展到現(xiàn)在dart不僅僅是用來瀏覽器方向開發(fā),還兼容跨平臺的app開發(fā)疫剃,所以dart又要兼容客戶端的取值范圍:- 2^(63) ~ 2^(63) - 1
舉例:
int a = 1钉疫;
double
dart的雙精度類型,取值范圍完全遵循的IEEE 754標(biāo)準(zhǔn)
舉例:
double a = 1巢价;
num
在dart中除了兩個通用的數(shù)值類型以外牲阁,還存在一個數(shù)值類型,即int和double的父類--num壤躲,這個類提供了轉(zhuǎn)換為int和double的api方法城菊,并且還有像abs()、
ceil()和floor()這些常見的操作方法碉克,需要注意的是在numbers中默認(rèn)的計算規(guī)則是按照取值范圍比較大的double類型來計算的凌唬,即初始化的值是int但是賦值
為numbers類型的話,依然是默認(rèn)按照double類型計算漏麦,所以最終需要取到int類型的值的話切記要num.toInt()方法轉(zhuǎn)換為int類型的值
舉例:
num a = 1.0客税;
print(a.toInt());
bool
在dart中有類似java/javaScripct的boolean類型的值,類型為bool撕贞,但是需要注意的是在dart中更耻,bool的值屬于編譯時常量,只有true或者false兩個取值
舉例:
bool flag = false;
String
在dart中不再有單個字符和多個字符的區(qū)別捏膨,只有一個統(tǒng)一的標(biāo)準(zhǔn)--字符串類型String秧均,這個類型與java中的String很相似,但是在dart中針對java的String新增了很多人性化的操作(尤其是字符串拼接方面),
在java中字符串拼接可能需要如下方式之一:
StringBuffer buffer = new StringBuffer();
buffer.append("aaa").append("aaa").toString();//或者使用StringBuilder創(chuàng)建字符串
//或者選擇字符串拼接号涯,例如:
String a = "aaa";
String b = a + "bbb";
但是可以看到j(luò)ava中的字符串拼接的方式很不方便目胡,必須要+連接,在dart中選擇很多链快,例如誉己,兩個都是String類型的字符串拼接的話,可以選擇直接+連接符連接久又,但是遇到拼接的變量中是數(shù)值類型或者其他類型的時候巫延,可以使用${name}的方式快速在字符串中拼接當(dāng)前的變量效五,例如:
num abc = 1.0;
print("哈哈哈${abc}");
java中字符串拼接還可以選擇StringBuffer或者StringBuilder的方式創(chuàng)建字符串地消,這兩種方式在java中的區(qū)別無非就是多線程環(huán)境下是否是安全的炉峰,在dart中,也保留了這個優(yōu)秀的設(shè)定脉执,但是dart是單線程語言疼阔,所以dart中只有一個StringBuffer,可以用來寫入字符串或者拼接字符串半夷,使用如下:
 StringBuffer buffer = new StringBuffer();
 buffer.write("aaa");
 buffer.write("bvb");
 print(buffer.toString());
除此之外婆廊,我們應(yīng)該知道在js中字符串可以是單引號或者雙引號,但是在java中字符串必須是""包裹巫橄,只有單個字符才可以''包裹淘邻,dart由于兩者的優(yōu)秀特性都有,并且js和dart都只有字符串一個類型湘换,所以在dart中單引號和雙引號都可以包裹字符串類型宾舅,并且單引號包裹下的字符串還可以用特殊的方式進(jìn)行數(shù)據(jù)拼接,例如:
var s1 = '字符串' '可以這樣' '來連接';
可以看出來我們可以直接將需要拼接的字符串用單引號包裹彩倚,并且并排排放筹我,就會自動進(jìn)行拼接操作,除了這點(diǎn)以外帆离,dart還吸收了新晉的熱門語言python和kothil的特點(diǎn)蔬蕊,加入了'''特性,在java或者js開發(fā)的過程中如果我們的字符串特別長哥谷,一行放不下的話我們只能選擇字符串拼接岸夯,不僅不美觀,并且對于開發(fā)的便捷性也很有影響们妥,但是dart的'''特性可以很輕松解決字符串太多換行的問題囱修,例如:
var s = '''
這是
多行
字符串
''';
只要用'''將輸入的文本包裹,中間的文本可以隨便換行王悍,是不是很方便呢?
另外在java開發(fā)中我們往往遇到了需要進(jìn)行文字轉(zhuǎn)義的方式破镰,我們一般的處理方案是將\改為\\或者/來處理,但是在dart中我們可以在字符串前加入一個r標(biāo)示压储,這樣的話我們的文本就是不會被強(qiáng)制轉(zhuǎn)義的了鲜漩,例如:
var s = r'這是原始字符串,\n不會被顯示為換行符集惋。';

如上就是dart的基本類型和常用開發(fā)語言的比較孕似,接下來的博客我們會對dart的集合,構(gòu)造刮刑,異常喉祭,繼承养渴,合并繼承以及可選參數(shù)的說明

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市泛烙,隨后出現(xiàn)的幾起案子理卑,更是在濱河造成了極大的恐慌,老刑警劉巖蔽氨,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藐唠,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹉究,警方通過查閱死者的電腦和手機(jī)宇立,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來自赔,“玉大人妈嘹,你說我怎么就攤上這事∩芊粒” “怎么了润脸?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長痘绎。 經(jīng)常有香客問我津函,道長,這世上最難降的妖魔是什么孤页? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任尔苦,我火速辦了婚禮,結(jié)果婚禮上行施,老公的妹妹穿的比我還像新娘允坚。我一直安慰自己,他們只是感情好蛾号,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布稠项。 她就那樣靜靜地躺著,像睡著了一般鲜结。 火紅的嫁衣襯著肌膚如雪展运。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天精刷,我揣著相機(jī)與錄音拗胜,去河邊找鬼。 笑死怒允,一個胖子當(dāng)著我的面吹牛埂软,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纫事,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勘畔,長吁一口氣:“原來是場噩夢啊……” “哼所灸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起炫七,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤爬立,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诉字,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懦尝,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡知纷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年壤圃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琅轧。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡伍绳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乍桂,到底是詐尸還是另有隱情冲杀,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布睹酌,位于F島的核電站权谁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏憋沿。R本人自食惡果不足惜旺芽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辐啄。 院中可真熱鬧采章,春花似錦、人聲如沸壶辜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砸民。三九已至抵怎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岭参,已是汗流浹背反惕。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冗荸,地道東北人承璃。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蚌本,于是被迫代替她去往敵國和親盔粹。 傳聞我的和親對象是個殘疾皇子隘梨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容