四:Flutter之Dart第一節(jié)?
1: Dart介紹和安裝?
1.1: 認(rèn)識(shí)Dart
Google為Flutter選擇了Dart就已經(jīng)是既定的事實(shí)、無論你多么想用你熟悉的語言、比如JavaScript、Java卿吐、Swift、C++等來開發(fā)Flutter至少目前是不可能的。
其實(shí)如果你對(duì)編程語言有足夠的自信预柒、Dart的學(xué)習(xí)過程甚至可以直接忽略舒裤。
- 因?yàn)槟銓W(xué)習(xí)N中編程語言后姆涩、你會(huì)發(fā)現(xiàn)它們的差異并不大
- 無非就是語法上的差異 + 某些語言有某些特性
- 在我初次接觸Flutter的時(shí)候、并沒有專門去看Dart語法惭每、而是對(duì)于某些語法不太熟悉的時(shí)候回頭去了解而已骨饿。
1.2: 安裝Dart
為什么還需要安裝Dart呢亏栈?
事實(shí)上在安裝Flutter SDK的時(shí)候、它已經(jīng)內(nèi)置了Dart了宏赘、我們完全可以直接使用Flutter去進(jìn)行Dart的編寫并且運(yùn)行.但是绒北、如果你想要單獨(dú)學(xué)習(xí)Dart、并且運(yùn)行自己的Dart代碼察署、最好去安裝一個(gè)Dart SDK闷游。
下載Dart SDK
到Dart官網(wǎng)去下載對(duì)應(yīng)操作系統(tǒng)的Dart:https://dart.dev/get-dart
無論是什么操作系統(tǒng)、安裝方式都是兩種:通過工具安裝或者直接下載SDK贴汪、配置環(huán)境變量1.2.1: 通過工具安裝
- windows可以通過Chocolatey
- macOS可以通過Homebrew
- 具體安裝操作官網(wǎng)網(wǎng)站有詳細(xì)的介紹
1.2.2: 直接下載Dart SDK脐往、配置環(huán)境變量來安裝
- 下載地址:https://dart.dev/tools/sdk/archive
- 我采用了這種安裝方式
- 下載完成后、根據(jù)路徑配置環(huán)境變量即可
[# [Dart 編程入門之安裝SDK扳埂,選擇編輯器以及編寫Hello World业簿!](# Dart 編程入門之安裝SDK,選擇編輯器以及編寫Hello World阳懂!1.3:VSCode 配置Dart
學(xué)習(xí)Dart過程中梅尤、使用VSCode作為編輯器
- 一方面編寫代碼非常方便、而且界面風(fēng)格我也很喜歡
- 另一方面我可以快速在終端看到我編寫代碼的效果
使用VSCode編寫Dart需要安裝Dart插件:我目前給這個(gè)VSCode安裝了四個(gè)插件
- Dart 和 Flutter插件是為了Flutter開發(fā)準(zhǔn)備的
- Atom One Dark Theme是我個(gè)人比較喜喜歡的一個(gè)主題
- Code Runner可以點(diǎn)擊右上角的按鈕讓我快速運(yùn)行代碼
2. Hello Dart
2.1: Hello World
接下來岩调、就可以步入主題了巷燥、學(xué)習(xí)編程語言、從祖?zhèn)鞯腍ello World開始
在VSCode中新建一個(gè)helloWorld.dart文件号枕、添加下面的內(nèi)容
新建一個(gè)文件夾缰揪、從VSCode選擇文件夾
圖片.png- 編寫代碼如下:
main(List<String> args) { print('hello world dart'); }
- 執(zhí)行右上角的按鈕(當(dāng)你安裝了Code Runner插件以后)、會(huì)發(fā)生報(bào)錯(cuò):
[Running] dart "/Users/qxu7859/Desktop/Dart練習(xí)/helloWorld.dart"
Dart_LoadScriptFromKernel: The binary program does not contain 'main'.
- 先保存代碼葱淳、 再運(yùn)行就OK??了
2.2: 程序的分析
接下來就是程序的分析
- 一:Dart 語言的入口也是main函數(shù)钝腺、并且必須顯示的進(jìn)行定義;
- 二:Dart的入口函數(shù)main是沒有返回值的蛙紫;
- 三:傳遞給main的命令行參數(shù)拍屑、是通過List<String>完成的;
1: 從字面值就可以理解List是Dart中的集合類型坑傅;
2: 其中的每一個(gè)String都表示傳遞給main的一個(gè)參數(shù)僵驰;- 四:定義字符串的時(shí)候、可以使用單引號(hào)''或者雙引號(hào)"";
- 五:每行語句必須使用分號(hào)結(jié)尾唁毒、很多語言并不需要分號(hào)蒜茴、比如Swift、javaScript浆西;
3: 定義變量
3.1: 變量聲明
明確聲明變量的方式粉私、格式如下:
- 變量類型 變量名稱 = 賦值;
示例代碼: String name = 'lishengbing'; int age = 18; double height = 1.88; print('name=${name}, age=${age}, height=${height}');
注意事項(xiàng)??:定義的變量可以修改值近零、但是不能賦值其他類型
name = 'new value'; 正確?
name = 18; 錯(cuò)誤?3.2: 類型推導(dǎo)(Type Inference)
類型推導(dǎo)聲明變量的方式诺核、格式如下:
- var/dynamic/const/final 變量名稱 = 賦值抄肖;
3.2.1: Var的使用
var 正確使用示例:
- runtimeType用于獲取變量當(dāng)前的類型 var name = 'lishengbing'; name = 'make'; print('runtimeType=${name.runtimeType}') // String
--
var 錯(cuò)誤用法:var age = 18; age = 'lishengbing'; // 不可以將String類型賦值給一個(gè)int類型
3.2.2: dynamic的使用
如果確實(shí)希望這樣做、可以使用dynamic來聲明變量:
- 但是在開發(fā)中窖杀、通常情況下不使用dynamic漓摩、因?yàn)轭愋偷淖兞繒?huì)帶來潛在的危險(xiǎn)
dynamic name = 'lishengbing'; print(name.runtimeType); // String name = 18; print(name.runtimeType); // int
3.2.3: final & const的使用
final 和 const 都是用于定義常量的、也就是說定義之后值都不可以修改 final name = 'lishengbing'; name = 'final'; // 不可以修改? const age = 18; age = 28; // 不可以修改 ?
final 和 const 有什么區(qū)別呢?
- const在賦值時(shí)入客、賦值的內(nèi)容必須是在編譯期間就確定下來的管毙。
- final在賦值時(shí)、可以動(dòng)態(tài)獲取桌硫、比如賦值一個(gè)函數(shù)夭咬。
String getName() { return 'lishengbing'; } main(List<String> args) { const name = getName(); // 錯(cuò)誤的做法,因?yàn)樾枰獔?zhí)行函數(shù)才可以獲取到值 final name = getName(); //正確的錯(cuò)誤 }
final 和 const的小案例:
- 首先铆隘、const是不可以賦值為DateTime.now()
- 其次卓舵、final一旦被賦值后就有確定的結(jié)果、不會(huì)再次賦值
const time = DateTime.now(); // 錯(cuò)誤的賦值方式 final time = DateTime.now(); print(time); // 2019-09-18 16:04:20.768250 >``` const 放在賦值語句的右邊咖驮、可以共享對(duì)象边器、提高性能训枢; - 這里可以暫時(shí)先做了解托修、后面講解類的常量構(gòu)造函數(shù)時(shí)、在提到這個(gè)概念恒界。
class Person { ------const Person(); } main(List<String> args) { final a = const Person(); final b = const Person(); // const賦值在右邊=true print('const賦值在右邊=${identical(a,b)}'); final m = Person(); final n = Person(); // 不用const賦值在右邊=false print('不用const賦值在右邊=${identical(m,n)}'); } >```