在iOS原生开发中,只要是方法定义了形数,在方法调用时就必须在对应的位置上传递实参;在Flutter中参数定义可以定义非必选参数,可选参数,具名参数和不具名参数.

非具名参数

不具名参数的定义不使用{},只使用小括号即可.例如在Text控件的定义中:

onst Text(this.data, {Key key,this.style,this.strutStyle,this.textAlign,...}
)

其中data就是不具名参数,但是在调用时第一个位置上必须传data对应的实参.

默认情况下的不具名参数都是要求required的,也就是说没有特别说明的情况不具名参数都是需要传递对应实惨的.如果想要不具名参数时可选的,就需要使用如下定义:

class Person {Person(this.name, [this.age, this.height]);final String name;final int age;final double height;
}

这样就可以选择性地传递参数:

    final person1 = Person("Ericydong");final person2 = Person("Ericydong", 24); //对应第二个参数位置的24只能给赋值成员变量age,而不可能赋值给heightfinal person3 = Person("Ericydong", 23, 172);

由于不具名参数没有提供参数的名称给调用者,所以在调用方法时只能依据参数的位置来确定传递的参数赋值给哪一个成员变量.所以对应的位置可以选择是否传递参数,但是如果传递了参数那就肯定是赋值给对应位置的成员变量,而不能跳过某一个位置参数直接赋值给后一个位置的参数,只能按照定义依次赋值.

具名参数给方法定义提供了便利,但是并不能满足所有的场景.例如某个方法可能有很多参数,而在调用时可能只能给出其中不确定顺序的少数某几个参数值,可是如果使用具名参数的话就不得不将随然使用不到但是位置靠前的参数一个一个赋值.

class Man() {
Man(this.name, [this.age, this.height, this. identityCardNumber, this. wordPlace, this. homeAddress]);
final String name;
final int age;
final double height;
final String identityCardNumber,
final String wordPlace;
final homeAddress;
}//在初始化时我只想给homeAddress赋值,但是不得不一个一个赋值过去,虽然这些值并没有什么实际意义,更致命的如果需要赋值的参数前面很有多个参数的话在赋值过程中极有可能会位置错乱
finale man = Man(null, null, null, null, null, "Union Building")

当参数过多但是并不都是必须参数时这种操作方法的劣势非常明显:

  • 在其他没有意义变量赋值上浪费时间,且没有任何意义;
  • 在无意义变量的赋值上很容易由于位置错乱而导致变量赋值错误.例如在上述实例中赋值homeAddress之前需要四个null而你不小心写了三个,就会导致"Union Building"赋值给了wordPlace而不是homeAddress.

具名参数

为了弥补非具名参数的不足,flutter还有另外一种参数定义方式:具名参数.与非具名参数不同,具名参数不是根据位置来确定参数的赋值对象而是根据参数名称来确定传递进来的实参要赋值给那个成员变量.

具名参数使用{}来包括参数,参数可以根据参数名来确定需要赋值的对象,所以就拖离了入参位置的束缚,可以根据实际需要给指定的参数赋值,忽略不需要的参数.

class Person {Person({this.name,this.age, this.height, this.hobby});final String name;final int age;final double height;final String hobby;
}    final person1 = Person(name: "Ericydong"); //只赋值namefinal person2 = Person(height: 172); //只赋值heightfinal person3 = Person(name: "Ericydong", hobby: "input code", age: 25); //使用任意合法的参数名顺序赋值变量

而当具名变量是必须要在初始化进行赋值时,可以使用@required关键字来进行修饰.

class Person {Person({@required this.name,this.age, this.height, this.hobby});final String name;final int age;final double height;final String hobby;
}

被@required修饰的参数必须在初始化进行赋值,否则会抛出异常。

    //会抛出异常    The parameter 'name' is required.final person2 = Person(height: 172);

这样就可以把必须初始化的参数和非必须初始化的参数区分开来,在适当的场景下可以节约开发时间提升效率.

flutter中的可选参数相关推荐

  1. mysql存储过程参数可选,如何在T-SQL存储过程中使用可选参数?

    "KM"的答案就其本身而言是好的,但未能完全贯彻他早期的一条建议:.忽略紧凑型代码,忽略对重复代码的担忧. 如果您希望获得最佳的性能,那么您应该为每个可选条件的组合编写一个定制查询 ...

  2. 记录 之 Argparse 中的 可选参数 action 用法

    Argparse 是供我们由命令行来向程序传参的一种手段,非常的方便,我们宏观调参,这里就记录一下 action的用处: 例:parser.add_argument('-c', action='sto ...

  3. java中的@param参数_java – @RequestParam在Spring MVC中处理可选参数

    弹簧控制器可以处理这两种请求吗? 1) http://localhost:8080/submit/id/ID123432?logout=true 2) http://localhost:8080/su ...

  4. 有没有更好的方法在JavaScript中执行可选的函数参数? [重复]

    本文翻译自:Is there a better way to do optional function parameters in JavaScript? [duplicate] This quest ...

  5. java方法可选参数_Java可选参数

    java方法可选参数 在Java类中设计方法时,某些参数对于其执行而言可能是可选的. 无论是在DTO,胖模型域对象还是简单的无状态服务类中,可选方法参数都是常见的. 从本文中, 您将学习如何在Java ...

  6. go如何实现可选参数

    大家好,我是peachesTao,今天我们来聊一聊go的函数可选参数话题 go语言设计的时候函数就不支持默认参数,以下为go语言之父Rob Pike关于这个设计的一段话: One feature mi ...

  7. Dart语言笔记(运算符、箭头函数、可选参数)

    注:本文仅记录一些和java语法不甚相同或较难理解部分,方便个人的查找和学习 1.在 Dart 中有两个比较特殊的运算符. 赋值运算符 ??= 条件运算符 ?? void operatorTest() ...

  8. 【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )

    文章目录 一. Dart 面向对象 二. 类定义 三. 类的继承 四. 私有变量 五. 可选参数与默认参数 六. 初始化列表 七. 完整代码示例 八. 相关资源 一. Dart 面向对象 OOP 基本 ...

  9. Flutter 可选参数方法构建

    在Flutter 中不存在Java 方法重载概念,类似  test(), test(int a), test(String a) 这种一个类里面多个不同参数形式的相同名称的方法,但提供了可选参数构造方 ...

最新文章

  1. 简明 Vim 练级攻略(转)
  2. 利用Eventlog Analyzer分析日志
  3. (转)在Windows平台上安装Node.js及NPM模块管理
  4. SAP ABAP收货或者货物移动(MIGO,MB11,MB1A)在保存时候的增强点
  5. layui 如何去dom_layui 的基本使用介绍
  6. 杭电acm2151题java的解法,杭电ACM题型分类
  7. Amazon Elastic Map Reduce使用Apache Mahout计算建议
  8. 【英语学习】【WOTD】bread 释义/词源/示例
  9. 苹果计算机怎么添加在快捷方式,如何在 iPhone 主屏幕上添加文件快捷方式?
  10. linux中源码安装node
  11. SSM框架之Spring MVC(一)
  12. 101 Symmetric Tree
  13. 没有币如何复制百度文库中的文章
  14. android刷机工具 原理,Android 设备刷机教程
  15. 行测--资料分析--fb--高照老师
  16. 放弃高薪的程序员,体制内或许才是最好的归宿
  17. U盘fat32、ntfs和exfat区别
  18. 路由navigate
  19. 计算机桌面颜色怎么换,电脑桌面字体颜色怎么改
  20. 08.29web自动化测试

热门文章

  1. 前端SEO优化技术汇总
  2. APISIX 极简入门(国产微服务网关)
  3. 据说这是北大教师孔庆东的韩国游记
  4. 【数据库】MySQL的sql语句详解
  5. 乐鑫Esp32学习之旅14 esp32 sdk编程实现门户强制认证,连接esp32热点之后,自动强制弹出指定的登录html界面。(附带Demo)
  6. 行业轮动策略(附策略源码)
  7. sim900a 裸AT通过GPRS网络发送接收数据
  8. [Brute force][规律] Jzoj P3084 超级变变变
  9. WAN LAN WLAN区别
  10. 【手把手教你51单片机】三极管在数字电路中的应用