⇒ 用一行指令表達 if-else 條件
範例:有一個函數會根據傳進來的布林值,來顯示不同的文字。
var state = true;
//If-else statement
void printState(bool state){
if(state){
print('Success');
}else{
print('Failure');
}
}
//Conditional expressions
void printState(bool state){
state ? print('Success') : print('Failure');
}
⇒ 若 expr1 為 null ,則回傳 expr2;反之,回傳 expr1。
範例:有一函數判斷文字是否為空,若否則回傳該文字,否則回傳預設值。
void user(String user){
if(user != null){
print('user is $user');
}else{
print('user is root');
}
}
void user(String user){
final result = user ?? 'root';
print('user is $result');
}
只需要一行,就能夠處理文字為空的情況。
上篇文章的指派運算子中,其中有一個 ??=
⇒ 若運算子左方的值為空 (null),則使用右邊的值
我們可以將上面範例改寫為,
void user(String user){
user ??= 'root';
print('user is $user');
}
串接符號可以用來在相同的物件中,連續執行運算。
在 Kotlin 中,跟 apply{ } 具有相同的效果。
例如,有一個 Student 類別,裡面有幾個屬性。
class Student{
var id;
var name;
var classRoomName;
var teacher;
}
我們將 Student 類實例化,並設定屬性值。
var student = Student();
student.id = 1;
student.name = 'Andy';
student.classRoomName = '1A';
student.teacher = 'Mandy';
var student = Student()
..name = 'Andy'
..classRoomName = '1A'
..id = 3
..teacher = 'Mandy';
也可以不換行,如下
var student = Student()..name = 'Andy'..classRoomName = '1A'..id = 3..teacher = 'Mandy';
串聯符號除了可以使用在屬性,還可以應用在回傳值為 void 的函數上,
假如,類別裡面有回傳值為 void 的函數 (doSomething1, doSomething2)
class Student{
var id;
var name;
var classRoomName;
var teacher;
void doSomething1(){
}
void doSomething2(){
}
}
var student = Student()
..name = 'Andy'
..classRoomName = '1A'
..id = 3
..teacher = 'Mandy'
..doSomething1()
..doSomething2();
注意:只有回傳值為 void 的函數才能被串聯。
void main(){
doSomething(); // ()
var list = [1,2,3];
assert(list[0] == 1); //[]
var student1 = Student();
student.name = 'Andy'; // .
var student2 = Student();
print(student2?.name); // ?.
}
void doSomething(){}
class Student{
var String name;
}
Dart 的運算子根據下方的優先權表進行運算,如果同一運算式裡有不同的運算子,那麼將會跟去該優先權處理。
花了兩篇介紹運算子,大部分的運算子都可以在其他語言中看到,比較要注意的是:
然後,最重要的是,如果有在一個運算式裡面有多個運算子,一定要用括弧包起來,除了可以提昇閱讀力外,還可以避免後面的運算子優先權高過前面的優先權,反而造成了誤動作。