這篇文章假定讀者對於程式語言有基本的了解,若您本身已經對 Java 及 Javascript 有一定的程度,那麼恭喜您,Dart 對您來說會相當容易上手!
程式碼:https://github.com/ksw2000/ironman-2024
在 Dart 中,可以像 Javascript 一樣直接以 var
宣告變數,Dart 會自動推論該變數之型別。當然也可以像 Java 在變數名稱前加入型別名稱。Dart 屬於強型別的語言,因此在宣告後不可以像 Javascript 一樣對變數更改型別。
以下是 dart 提供的內建型別,本文僅會先介紹前 3 個基礎型別!
// 使用 var 自動判定型別
var name = 'Voyager I';
var year = 1977;
var antennaDiameter = 3.7;
// 手動賦予型別
String name2 = '坂倉';
int year2 = 2004;
double pi = 3.14;
bool yes = true; // 在 dart 中布林值為全小寫,跟 Python 不一樣
bool no = false;
這裡有詳細的官方教學: https://dart.dev.org.tw/language/variables
在 Dart 中 int 代表整數,由於 Dart 可以直接在作業系統編譯,也可能被轉譯成 Javascript,因此根據使用場景不同,值的範圍也不可,比如在 Javascript 中,int 會被儲存在沒有小數部分的 64 位元浮點數中,因此此時的值會在 -2⁵³ 到 2⁵³-1 之間。另外,如同 Javascript 中的 Number
,我們也可以將數字都以 num
型態表示。num
型態變數可以同時具有 int 和 double 值。
num a = 10;
與 Java 類似,在 Dart 中,由於沒有 unsigned
無符號做修飾,因此在進行右移時 >>
當作有符號右移 (會根據最左邊的位元填補),而 >>>
則視為無符號右移(一律以 0 填補)。
對於除法運算,這點類似 Javascript, Python,在一般的情況下會自動改以浮點數進行運算,因此,若想要使用單純的整數除法時,可以使用 ~/
來進行。(在 Python 中以 //
來表示整數除法,導致在 Python 中無法用 //
來當作註解,必需改用另一個 syntax #
;另外,在 Javascript 中沒有直接語法原生支援整數除法)
int x = 10;
print(x / 3); // 3.3333333333333335
print(x ~/ 3); // 3
Dart 的字串是 UTF-16 碼單位的序列,與 Javascript 類似,可以使用單引號或雙引號表示字串。另外也有類似 ES6 的特性,可以在字串中直接加入變數或表達式。
int a = 10;
print("int a = $a"); // int a = 10
可以加上花括號,包入三元表達式。(三元表達式晚點會再介紹)
int a = 10;
print("Is a larger than 5 ... ${a > 5 ? "yes" : "no"}");
// is a larger than 5 ... yes
當然,如果只是想要錢字號的話,可以利用反斜線跳脫
int a = 10;
print("\$a $a");
與 Javascript, Java, Python 類似,連接字串時可以利用 +
處理。另外,在 Dart 中,也可以利用相鄰的引號自動連接字串。
var s1 = 'String '
'concatenation'
" works even over line breaks.";
// String concatenation works even over line breaks.
與 Python, Go 類似,在 Dart 中可以利用三個引號建立多行字串
var s1 = '''
You can create
multi-line strings like this one.
''';
var s2 = """This is also a
multi-line string.""";
在幾乎所有的程式語言中,變數的名稱都會有限制,在 Dart 也不例外,這些保留字有其特殊用途因此無法作為變數名稱。參考:https://dart.dev.org.tw/language/keywords
其實滿多的,畢竟 Dart 有支援物件導向!
參考官方文件:
這個部分跟大部分程式語言一樣,在 if 子句中,必需放入布林值(bool)或條件式進行判斷
var n = 15;
if (n % 2 == 1) {
print("$n is odd");
} else {
print("$n is even");
}
// 15 is odd
若判斷條件為多個則可以在 else 後再加入 if,這個寫法與 C, Java, Javascript 相同。
if (isRaining()) {
you.bringRainCoat();
} else if (isSnowing()) {
you.wearJacket();
} else {
car.putTopDown();
}
if-else 也可以利用三元判斷式來簡化,這個語法糖在 C, Java, Javascript, PHP 等語言中都有支援。?
前放入判斷式,?
與 :
之間代表條件為真時會執行的語句,:
之後的語句則在條件不為真時執行。
int num = 5;
String isEven = num & 1 == 1 ? "odd" : "even";
print("$num is $isEven");
// 5 is odd
在 Dart 中,switch-case 是會自動 break 的,因此 break 可寫可不寫。
int x = 5;
switch (x) {
case 1:
print(1);
case 2:
print(2);
default:
print("other");
}
// other
在這種會自動 break
的語言中,如果一次要配多多個 case
該怎麼辦呢?比如在 Go 中,我們可以使用 ,
來匹配。有點反直覺,在 Dart 中,我們仍然可以使用如同 C, Java, Javascript 的方式匹配,對於那些 case 中無任何程式者,Dart 並不會直接 break
,而是會自動跳到下一個語句判斷。
int y = 5;
switch (y) {
case 1:
case 2:
case 3:
case 4:
print("1~4");
// break; (這裡才會 break)
case 5:
case 6:
case 7:
case 8:
print("5~8");
// break; (這裡才會 break)
default:
print("other");
}
// 5~8
我們以 javascript 做比較,在 javascript 中必需加入 break
var num = 5;
switch (num) {
case 1:
case 2:
case 3:
case 4:
console.log("1~4");
break;
case 5:
case 6:
case 7:
case 8:
console.log("5~8");
break;
default:
console.log("other");
}
// 5~8
在 Go 語言中,與 Dart 類似也會自動 break,但是 Go 語言對於那些 case 內無任何動作者,會直接 break,所以 Go 是使用 ,
來配對 case。若在 Go 語言中使用 dart 那種寫法會導致沒有任何字串被印出!
num := 5
switch num {
case 1, 2, 3, 4:
fmt.Println("1~4")
case 5, 6, 7, 8:
fmt.Println("5~8")
default:
fmt.Println("other")
}
// 5~8
在 dart 中 for-loop 的用法,與 Javascript, Java 雷同,以下是一個最簡單的範例
for(int i = 0; i < 5; i++){
print(i);
}
// 0
// 1
// 2
// 3
// 4
另外,Dart 中的 for-loop 也支援 break
和 continue
。當迴圈有嵌套時,為了一次跳脫多個迴圈,Dart 也有與 Java, Go 類似的 break [label]
的方式跳脫迴圈。在 for 迴圈前利用冒號 :
去設定標籤。
outloop:
for (var i = 0; i < 10; i++) {
inloop:
for (var j = 0; j < 9; j++) {
if (j == 2) {
break inloop;
}
if (i == 5) {
break outloop;
}
print("i:$i j:$j");
}
}
// i:0 j:0
// i:0 j:1
// i:1 j:0
// i:1 j:1
// i:2 j:0
// i:2 j:1
// i:3 j:0
// i:3 j:1
// i:4 j:0
// i:4 j:1
在 Dart 中除了 while
loop 外,也支援常見的 do while
while (!isDone()) {
doSomething();
}
do {
printLine();
} while (!atEndOfPage());
後記:為了寫這篇教學我去看了 dart 官網的教學才發現 dart3 多了一些新東西。其實有在思考哪些要寫哪些不寫,因為真的滿多能講的。