Flutter開發Dart極速入門 (函數)

函數

函數的定義

  • 可在函數內定義
  • 可省略類型
  • 支持縮寫語法 =>
main() {
    //普通函數定義
    add(x, y) => x + y;
    print(add(1, 2));	// print: 3
}

可選參數

  • 可選位置參數
  • 可選命名參數
  • 默認參數值
// 可選命名參數
add1(x, {y, z}) {
    y ??= 10; // 賦值操作符, 相當於 y == null ? 10 : y
    z ??= 20;
    return x + y + z;
}

// 可選位置參數 z賦默認值3
add2(x, [y, z = 10]) => (y ??= x) + z;

print(add1(1, z: 2)); // 可選命名參數使用時候, 指定參數的值, print: 13
print(add2(1)); // print: 11
print(add2(1, 2, 3)); // 可選位置參數使用的時候, 按照位置賦值, 比如這裏2只會賦值給y print:5

匿名函數

  • 可賦值給變量, 通過變量調用
  • 可在其他函數中直接調用或傳遞給其他函數
// 無參匿名函數
var anonyFun1 = () => print("我是一個匿名函數");
anonyFun1(); // 調用  print: 我是一個匿名函數
// 無參匿名函數
var anonyFun2 = (name) => print("我是$name匿名函數");
anonyFun2('有參'); // 調用  print: 我是有參匿名函數

// 傳參匿名函數
List listFun(List list, int innerOperate(x)) {
for(var i = 0; i < list.length; i++) {
list[i] = innerOperate(list[i]);
}
return list;
}

var list = [1,2,3,4,5];
print(listFun(list, (x) => x*2)); // print: [2, 4, 6, 8, 10]

函數的閉包

main() {
    // 函數的閉包
    var closeFunc = funClosure(2); // clos相當於(y) => 3+y
    print(closeFunc(3)); // print: 6
}

Function funClosure(int x) {
    x++;
    return (y) => x + y;
}

函數別名

  • 使用函數別名
main() {
  // 使用函數別名
  FunA funA;
  funA = subtraction;
  funA(3, 2); // print: 1
  funA = multi;
  funA(3, 2); // print: 6
}

// 定義函數別名
typedef FunA(int a, int b);
// 根據FunA 的函數簽名來定義兩個函數
subtraction(a, b) {
  print('subtract: ${a - b}');
}
multi(a, b) {
  print('subtract: ${a * b}');
}
  • 作爲參數傳遞
main() {
  // 作爲參數傳遞
  FunA funA = subtraction;
  calculator(3, 4, funA); // print: -1
}
// typedef也可作爲參數傳遞
calculator(a, b, FunA funA){
  funA(a, b);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章