main(){
// 可能用戶調(diào)用的時候 只穿了name,而沒有傳age,而我又需要有一個默認的age,這種情況用到初始化列表
var p= Person("張三");
}
class Person{
final String name;
final int age;// 注意這里我用了final修飾age,意味著后面不能修改
//為了滿足需要又默認的參數(shù)的話
// Person(this.name,{this.age=10}); //這種寫法可以,只是賦值的那里是不能用表達式
Person(this.name,{int age}):this.age=age??10{
}
}
external :其作用是,將方法的聲明和方法的實現(xiàn)分離
在某個地方只有方法的聲明,而方法的實現(xiàn)由另外的關(guān)鍵字來實現(xiàn):@patch
方法的聲明和分離的好處是:可以針對不同的平臺,進行不同的實現(xiàn),例如IOS 是一套方案,android是一套方案
typedef :其作用是,修飾函數(shù)
main(List<String> args) {
var demo1 = demo();
print(demo1(20, 30));
}
// 封裝test函數(shù), 要求: 傳入一個函數(shù)
// 普通封裝一:這樣不嚴謹,因為函數(shù)返回值不確定,傳入值的類型也不確定
// void test(Function foo) {
// foo("why");
// }
// 普通封裝二:這樣是可以的,只是閱讀性差
// void test(int foo(int num1, int num2)) {
// foo(20, 30);
// }
// 調(diào)用的話就得按照這個形式 ,相當于函數(shù)簽名
// test((num1,num2)){
// return num1*num2
// }
//最佳封裝,其返回值是int,傳入值也是int
typedef Calculate = int Function(int num1, int num2);
void test(Calculate calc) {
calc(20, 30);
}
//補充
//把函數(shù)作為返回值, 這里是返回了一個匿名函數(shù)
Calculate demo() {
return (num1, num2) {
return num1 * num2;
};
}