可選參數(shù)

2020-02-03 18:33 更新

可選參數(shù)可以是命名參數(shù)或者位置參數(shù),但一個參數(shù)只能選擇其中一種方式修飾。


命名可選參數(shù)

調(diào)用函數(shù)時,可以使用指定命名參數(shù) paramName: value。 例如:

enableFlags(bold: true, hidden: false);

定義函數(shù)是,使用 {param1, param2, …} 來指定命名參數(shù):

/// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold, bool hidden}) {...}

Flutter 創(chuàng)建實例的表達式可能很復雜, 因此窗口小部件構(gòu)造函數(shù)僅使用命名參數(shù)。 這樣創(chuàng)建實例的表達式更易于閱讀。

使用 @required 注釋表示參數(shù)是 required 性質(zhì)的命名參數(shù), 該方式可以在任何 Dart 代碼中使用(不僅僅是Flutter)。

const Scrollbar({Key key, @required Widget child})

此時 Scrollbar 是一個構(gòu)造函數(shù), 當 child 參數(shù)缺少時,分析器會提示錯誤。

Required 被定義在 meta package。 無論是直接引入(import) package:meta/meta.dart ,或者引入了其他 package,而這個 package 輸出(export)了 meta,比如 Flutter 的 package:flutter/material.dart。


位置可選參數(shù)

將參數(shù)放到 [] 中來標記參數(shù)是可選的:

String say(String from, String msg, [String device]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  return result;
}

下面是不使用可選參數(shù)調(diào)用上面方法 的示例:

assert(say('Bob', 'Howdy') == 'Bob says Howdy');

下面是使用可選參數(shù)調(diào)用上面方法的示例:

assert(say('Bob', 'Howdy', 'smoke signal') ==
    'Bob says Howdy with a smoke signal');


默認參數(shù)值

在定義方法的時候,可以使用 = 來定義可選參數(shù)的默認值。 默認值只能是編譯時常量。 如果沒有提供默認值,則默認值為 null。

下面是設(shè)置可選參數(shù)默認值示例:

/// 設(shè)置 [bold] 和 [hidden] 標志 ...
void enableFlags({bool bold = false, bool hidden = false}) {...}

// bold 值為 true; hidden 值為 false.
enableFlags(bold: true);

不推薦: 舊版本代碼中可能使用的是冒號 (:) 而不是 = 來設(shè)置參數(shù)默認值。 原因是起初命名參數(shù)只支持 : 。 這種支持可能會被棄用。 建議 使用 = 指定默認值。

下面示例演示了如何為位置參數(shù)設(shè)置默認值:

String say(String from, String msg,
    [String device = 'carrier pigeon', String mood]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  if (mood != null) {
    result = '$result (in a $mood mood)';
  }
  return result;
}

assert(say('Bob', 'Howdy') ==
    'Bob says Howdy with a carrier pigeon');

list 或 map 可以作為默認值傳遞。 下面的示例定義了一個方法 doStuff(), 并分別指定參數(shù) list 和 gifts 的默認值。

void doStuff(
    {List<int> list = const [1, 2, 3],
    Map<String, String> gifts = const {
      'first': 'paper',
      'second': 'cotton',
      'third': 'leather'
    }}) {
  print('list:  $list');
  print('gifts: $gifts');
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號