main(){
// 可能用户调用的时候 只穿了name,而没有传age,而我又需要有一个默认的age,这种情况用到初始化列表
var p= Person("张三");
}
class Person{
final String name;
final int age;// 注意这里我用了final修饰age,意味着后面不能修改
//为了满足需要又默认的参数的话
// Person(this.name,{this.age=10}); //这种写法可以,只是赋值的那里是不能用表达式
Person(this.name,{int age}):this.age=age??10{
}
}
external :其作用是,将方法的声明和方法的实现分离
在某个地方只有方法的声明,而方法的实现由另外的关键字来实现:@patch
方法的声明和分离的好处是:可以针对不同的平台,进行不同的实现,例如IOS 是一套方案,android是一套方案
typedef :其作用是,修饰函数
main(List<String> args) {
var demo1 = demo();
print(demo1(20, 30));
}
// 封装test函数, 要求: 传入一个函数
// 普通封装一:这样不严谨,因为函数返回值不确定,传入值的类型也不确定
// void test(Function foo) {
// foo("why");
// }
// 普通封装二:这样是可以的,只是阅读性差
// void test(int foo(int num1, int num2)) {
// foo(20, 30);
// }
// 调用的话就得按照这个形式 ,相当于函数签名
// test((num1,num2)){
// return num1*num2
// }
//最佳封装,其返回值是int,传入值也是int
typedef Calculate = int Function(int num1, int num2);
void test(Calculate calc) {
calc(20, 30);
}
//补充
//把函数作为返回值, 这里是返回了一个匿名函数
Calculate demo() {
return (num1, num2) {
return num1 * num2;
};
}
网友评论