dart 学习 之命名参数

你可以在参数列表的靠后位置使用花括号 ({}) 来定义命名参数。

除非显式使用 required 进行标记,否则命名参数默认是可选的。

复制代码
void printName(String firstName, String lastName, {String? middleName}) {
  print('$firstName ${middleName ?? ''} $lastName');
}
// ···
  printName('Dash', 'Dartisan');
  printName('John', 'Smith', middleName: 'Who');
  // Named arguments can be placed anywhere in the argument list
  printName('John', middleName: 'Who', 'Smith');

正如你所料,这些参数默认为 null,但你也可以为其提供默认值。

如果一个参数的类型是非空的,那么你必须要提供一个默认值(如下方代码所示),或者将其标记为 required(如 构造部分所示)。

复制代码
void printName(String firstName, String lastName, {String middleName = ''}) {
  print('$firstName $middleName $lastName');
}

一个方法不能同时使用可选位置参数和可选命名参数。

看看练习

向 MyDataObject 类添加一个 copyWith() 实例方法,它应该包含三个可空的命名参数。

int? newInt

String? newString

double? newDouble

copyWith 方法应该根据当前实例返回一个新的 MyDataObject 并将前面参数(如果有的话)的数据复制到对象的属性中。例如,如果 newInt 不为空,则将其值复制到 anInt 中。

答案

复制代码
class MyDataObject {
  final int anInt;
  final String aString;
  final double aDouble;

  MyDataObject({
     this.anInt = 1,
     this.aString = 'Old!',
     this.aDouble = 2.0,
  });

  MyDataObject copyWith({int? newInt, String? newString, double? newDouble}) {
    return MyDataObject(
      anInt: newInt ?? this.anInt,
      aString: newString ?? this.aString,
      aDouble: newDouble ?? this.aDouble,
    );
  }
}
相关推荐
QuantumLeap丶43 分钟前
《Flutter全栈开发实战指南:从零到高级》- 10 -状态管理setState与InheritedWidget
flutter·前端框架·dart
QuantumLeap丶1 小时前
《Flutter全栈开发实战指南:从零到高级》- 09 -常用UI组件库实战
flutter·ios·dart
嵌入式-老费2 小时前
自己动手写深度学习框架(快速学习python和关联库)
开发语言·python·学习
执笔论英雄2 小时前
【大模型训练】zero 学习及deepseed实战
人工智能·深度学习·学习
前路不黑暗@4 小时前
Java:继承与多态
java·开发语言·windows·经验分享·笔记·学习·学习方法
2501_916007474 小时前
从零开始学习iOS App开发:Xcode、Swift和发布到App Store完整教程
android·学习·ios·小程序·uni-app·iphone·xcode
_dindong6 小时前
牛客101:递归/回溯
数据结构·c++·笔记·学习·算法·leetcode·深度优先
笨鸟笃行6 小时前
百日挑战——单词篇(第十二天)
学习
lingggggaaaa7 小时前
小迪安全v2023学习笔记(一百四十三讲)—— Win系统权限提升篇&AD内网域控&NetLogon&ADCS&PAC&KDC&CVE漏洞
windows·笔记·学习·安全·内网安全·权限提升
71-37 小时前
牛客上的练习题——打印X形图案(有说明scanf返回值)
c语言·笔记·学习