[解決済み】Dartの名前付きパラメータと位置付きパラメータの違いは何ですか?
質問
Dartは、名前付きオプション・パラメータと位置付きオプション・パラメータの両方をサポートしています。この2つの違いは何ですか?
また、オプショナル・パラメーターが実際に指定されたかどうかは、どのように見分けるのですか?
どのように解決するのですか?
Dartには、2種類のオプションのパラメータがあります。 名前付き と 位置づけ . 違いを説明する前に、まず類似点について説明します。
Dartのオプションのパラメータは オプション というのは、関数を呼び出す際に、呼び出し元がパラメータの値を指定する必要がないからです。
オプションのパラメータは、必須パラメータの後にのみ宣言することができます。
オプションのパラメータはデフォルト値を持つことができ、呼び出し元が値を指定しない場合に使用されます。
位置決めオプションパラメータ
でラップされたパラメータ。
[ ]
は位置指定可能なオプション・パラメータです。以下はその例です。
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
上記のコードで
port
はオプションで、デフォルト値は
80
.
を呼び出すことができます。
getHttpUrl
を第3パラメータで指定してもしなくてもよい。
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
関数の位置パラメーターは複数指定可能です。
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
オプションのパラメータは
位置決め
を省略できない点で
port
を指定したい場合は
numRetries
.
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
もちろん、8080と5が何であるかを知らなければ、これらの一見マジックナンバーが何であるかを知ることは難しい。そこで 名前付きオプションパラメータ を使えば、より読みやすいAPIを作成することができます。
名前付きオプションパラメータ
でラップされたパラメータ。
{ }
は名前付きオプション・パラメータです。以下はその例です。
getHttpUrl(String server, String path, {int port = 80}) {
// ...
}
を呼び出すことができます。
getHttpUrl
を第3パラメータで指定してもしなくてもよい。あなたは
必ず
は、関数を呼び出す際にパラメータ名を使用します。
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
関数に複数の名前付きパラメータを指定することができます。
getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
// ...
}
名前付きパラメータは名前で参照されるため、宣言と異なる順序で使用することができます。
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', port: 8080);
getHttpUrl('example.com', '/index.html', port: 8080, numRetries: 5);
getHttpUrl('example.com', '/index.html', numRetries: 5, port: 8080);
getHttpUrl('example.com', '/index.html', numRetries: 5);
名前付きパラメータは、特にブーリアンフラグや文脈から外れた数値がある場合、より理解しやすいコールサイトになると思っています。
オプションのパラメータが提供されたかどうかの確認
残念ながら、「オプションのパラメータが提供されなかった場合」と「オプションのパラメータがデフォルト値で提供された場合」を区別することはできません。
注意してください。 位置指定オプションのパラメータを使用することができます または 名前付きオプション・パラメータ。 の両方は使用できません。 を同じ関数またはメソッドで使用することができます。以下のようなことは許されません。
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
関連
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] Bash関数にパラメータを渡す
-
[解決済み] 引数とパラメータの違いは何ですか?
-
[解決済み] Pythonの関数では、渡すパラメータの種類はどのように扱われるのですか?
-
[解決済み] 実際の関数定義と比較して)パラメータがない関数がコンパイルされるのはなぜですか?
-
[解決済み】位置指定パラメータを使用したGitエイリアス
-
[解決済み] appBarのバックボタンの色を変更する方法
-
[解決済み] アップバーのタイトルを中央揃えにする方法
-
[解決済み] Dartのasyncとasync*の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Flutter - くねくね動くアニメーションを作るには?
-
[解決済み] flutterで文字に下線を引く方法
-
[解決済み】flutterはアプバー上の戻るボタンを削除します。
-
[解決済み】flutterでパッケージ名を変更する方法は?
-
[解決済み] ボタンの幅を親と同じにするには?
-
[解決済み] Flutterアプリでインターネット接続が可能かどうかを確認する
-
[解決済み] フラッター エキスパンドとフレキシブル
-
[解決済み] Flutter プログラムでアプリを終了させる方法
-
[解決済み] FlutterError: アセットをロードできない
-
[解決済み] Flutter FirestoreでD8が発生:要求されたクラスを単一のdexファイルに収められない (# methods: 71610 > 65536) in Android Studio