Dart4Flutter -拾遺01 - flutter-dart環境搭建
Hello World
dart 版的hello world
main(List<String> args) {
print('Hello World');
}
複製程式碼
和Java語言類似,每個dart程式都有一個main,是整個程式的入口。
將程式儲存到hello_world.dart
檔案中,執行如下命令,就可以執行程式。
dart hello_world.dart
變數定義
類似在JavaScript中一樣,你可以使用var關鍵字定義變數
main(List<String> args) {
var number = 42;
var name = 'Gurleen Sethi';
var salary = 150300.56;
var isDoorOpen = true;
}
複製程式碼
但是,和JavaScript不同的是,在Dart2中,一旦你給變數賦值一種型別的值,就不能再賦值另一種型別的值。Dart 可以自動從右邊資料推斷資料型別。
你也可以明確指定資料型別定義變數。
main(List<String> args) {
int number = 42;
String name = 'Gurleen Sethi';
double salary = 150300.56;
bool isDoorOpen = true;
}
複製程式碼
如果你不想改變變數所持有的值,可以用關鍵字final
或者const
宣告。
main(List<String> args) {
final int number = 42;
const String name = 'Gurleen Sethi';
//Omit explicitly defining data types
final salary = 150300.56;
const isDoorOpen = true;
}
複製程式碼
final 和 const的不同在於,const是編譯時常量。例如,const變數在編譯時必須要有一個值。例如,const PI = 3.14
,然而final變數只能被賦值一次,他不需要在編譯時就賦值,可以在執行時賦值。
內建的資料型別
dart語言提供所有現代語言提供的所有基本資料型別。
- Numbers
- Strings
- Booleans
- Lists
- Maps
main(List<String> args) {
//Numbers
int x = 100;
double y = 1.1;
int z = int.parse('10');
double d = double.parse('44.4');
//Strings
String s = 'This is a string';
String backslash = 'I can\'t speak';
//String interpolation
String interpolated = 'Value of x is $x'; //Prints: Value of x is 100
String interpolated2 = 'Value of s is ${s.toLowerCase()}'; //Prints: Value of s is this is a string
//Booleans
bool isDoorOpen = false;
}
複製程式碼
Lists
宣告一個list非常的簡單,可以簡單使用方括號[]定義list。下面是list的常用操作。
main(List<String> args) {
var list = [1,2,3,4];
print(list); //Output: [1, 2, 3, 4]
//Length 長度
print(list.length);
//Selecting single value 獲取單個值
print(list[1]); //Outout: 2
//Adding a value 新增值到list
list.add(10);
//Removing a single isntance of value 刪除單個值
list.remove(3);
//Remove at a particular position 刪除指定位置的值
list.removeAt(0);
}
複製程式碼
如果你想定義一個編譯時常量list,例如,list的內容是不可改變的,可以使用關鍵字const
.
main(List<String> args) {
var list = const [1,2,3,4];
}
複製程式碼
Maps
定義map也很簡單。可以使用花括號{}定義map。
main(List<String> args) {
var map = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3'
};
//Fetching the values 獲取值
print(map['key1']); //Output: value1
print(map['test']); //Output: null
//Add a new value 新增值
map['key4'] = 'value4';
//Length 獲取長度
print(map.length);
//Check if a key is present 檢查是否存在
map.containsKey('value1');
//Get entries and values
var entries = map.entries;
var values = map.values;
}
複製程式碼
你也可以使用map建構函式定義map。
main(List<String> args) {
var squares = new Map();
squares[4] = 16;
}
複製程式碼
如果你想定義編譯時常量的map,可以使用const
關鍵字。
main(List<String> args) {
var squares = const { //不能改變當前map的值
2: 4,
3: 9,
4: 16,
5: 25
};
}
複製程式碼
函式
dart中的函式和JavaScript中有點類似。你需要定義就是函式的名字、返回值、引數。
main(List<String> args) {
var name = fullName('John', 'Doe');
print(name);
}
String fullName(String firstName, String lastName) {
return "$firstName $lastName";
}
複製程式碼
你也可以省略返回值型別,程式同樣可以執行。
main(List<String> args) {
var name = fullName('John', 'Doe');
print(name);
}
fullName(String firstName, String lastName) {
return "$firstName $lastName";
}
複製程式碼
下面是定義一行函式的方法。
main(List<String> args) {
var name = fullName('John', 'Doe');
print(name);
}
fullName(String firstName, String lastName) => "$firstName $lastName";
複製程式碼
命名引數
dart有個叫命名引數的東西。當你呼叫函式的時候,你必須指定引數的名字。要使用命名引數,可以將函式的引數包括在花括號{}內。
main(List<String> args) {
var name = fullName(firstName: 'John', lastName: 'Doe');
print(name);
}
fullName({String firstName, String lastName}) {
return "$firstName $lastName";
}
複製程式碼
如果你在呼叫命名引數的函式時,沒有指定引數的名字,程式將崩潰。
引數預設值
你可以給函式的命名引數一個預設值。下面的例子給lastName一個預設值。
main(List<String> args) {
var name = fullName(firstName: 'John');
print(name);
}
fullName({String firstName, String lastName = "Lazy"}) {
return "$firstName $lastName";
}
複製程式碼
函式是一等公民
在dart中函式比較靈活,例如,你可以將函式當引數傳遞給另一個函式。
main(List<String> args) {
out(printOutLoud);
}
out(void inner(String message)) {
inner('Message from inner function');
}
printOutLoud(String message) {
print(message.toUpperCase());
}
複製程式碼
這裡定義一個函式名字為out
,需要一個函式引數。然後我定義一個名為printOutLoud
的函式,他所做的就是將字串以大寫的形式列印。
dart 也有匿名函式,所以上面的例子中不用預定一個函式,而是傳遞一個匿名函式。
main(List<String> args) {
out((message) {
print(message.toUpperCase());
});
}
out(void inner(String message)) {
inner('Message from inner function');
}
複製程式碼
另一個匿名函式的例子。
main(List<String> args) {
var list = [1,2,3,4];
list.forEach((item) {
print(item);
});
}
複製程式碼
本教程結束。
下一講 dart4flutter – 02 –控制流 和異常
參考