美文网首页Flutter烂笔头
Dart小知识-可选参数了解一下?

Dart小知识-可选参数了解一下?

作者: RidingWind2023 | 来源:发表于2019-06-12 08:13 被阅读0次

函数(Function)

Dart是面向对象的语言,所以 函数也是对象,并且拥有一个类型,叫 Function。这意味着,函数可以赋值给某些变量 或者 当做参数传递给其他函数。甚至你可以把一个Dart类的实例当做函数来调用。
具体可参考 Callable classes
下面是一个函数的例子:

bool isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

当然,dart也支持隐藏类型,下方的函数依然工作(Effectvie Dart 并不推荐这么做 , type annotations for public APIs):

isNoble(atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

如果函数只有一条表达式,还可以使用简写的语法:

bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

=> expr语法 相当于 {return expr;}.
而一个函数可以拥有两种类型的参数, 必须参数可选参数。必选参数必须出现在前面,后面才能跟可选参数。名称可选参数 也可以被标记为 @required.

Callable classes

如果你想让dart class 可以像函数一样被调用, 需要实现 call() 方法。

class WannabeFunction {
  call(String a, String b, String c) => '$a $b $c!';
}

main() {
  var wf = new WannabeFunction();
  var out = wf("Hi","there,","gang");
  print('$out');
}

可选参数(Optional parameters)

可选参数又可以分为位置可选或者名称可选,但不能同时出现。

名称可选参数

当你调用一个函数时,你可以指定参数名称,语法 paramName: value。 举例:

enableFlags(bold: true, hidden: false);

那如何定义这样的函数呢?使用 {param1, param2, …}来指定名称参数:

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

Flutter 中实例创建表达式很复杂,所以 widget 构造时使用名称可选参数。这使得 实例创建表达式 更易读。

你可以使用@required注解来标注名称参数,在任何dart代码中,这表示这是一个 必填的参数。 举例:

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

当一个Scrollbar被构建的时候,如果缺失 child字段,语法会报错。
Required定义在meta包中。可以直接导入 package:meta/meta.dart,也可以导入其他包来暴露 meta, 比方说 package:flutter/material.dart

位置可选参数

[]来包装一些列的函数参数,来表示他们是 位置可选参数:

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

不使用可选参数调用的例子:

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

使用可选参数调用的例子:

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

参数默认值(Default parameter values)

可以使用=来定义默认值,不管是 名称还是位置可选参数。默认值必须是 编译时常量, 如果没有默认值提供,那默认将会是null
下面是给名称可选参数设置默认值的例子:

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

// bold will be true; hidden will be false.
enableFlags(bold: true);

下面的例子时 如何给位置可选参数设置默认值:

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');

你也可以传递 lists 或者 maps 作为默认参数。 下例子中的函数, doStuff()就指定了 list参数的默认值(是个list) 和 gifts参数的默认值(是个map):

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');
}

好了,以上就是今天关于dart 函数 和 可选参数相关知识点啦。


如果你觉得这篇文章对你有益,还请帮忙转发和点赞,万分感谢。

Flutter烂笔头
您的关注将是我坚持的动力源泉,再次感谢。

相关文章

  • Dart小知识-可选参数了解一下?

    函数(Function) Dart是面向对象的语言,所以 函数也是对象,并且拥有一个类型,叫 Function。这...

  • Dart独特的使用方式(session one)

    1.位置可选参数 Dart中的函数可以包含可选参数。可选参数是函数调用者可以选择不提供的参数。可以在函数内检查可选...

  • 【Flutter】Dart的方法中的可选参数、方法作为参数传递

    ?【Flutter】学习养成记,【程序员必备小知识】 ? 今日小知识——【Flutter】Dart的方法中的可选参...

  • Dart语法之可选参数

    Dart方法有两种类型的参数:必需的和可选的。必需的我们一般都知道,这里主要分析可选参数。 如果同时包含可选参数和...

  • Dart基础语法<五> 参数

    本节主要记录Dart方法参数中的 可选位置参数 默认参数 可选命名参数 在java中经常会出现各种重载函数 但一旦...

  • dart

    "_" 不同文件中才有私有效果,如果是同一.dart文件中,则没有私有效果。 可选参数 用[]包围的参数是可选参数...

  • 2.Dart面向对象

    函数 命名可选参数{} 位置可选参数[] 作用域定义:与js的作用域一致,层层向上找。 Dart函数闭包 js函数...

  • 【Flutter】Dart语法篇之类型系统与泛型(七)

    一、可选类型 在Dart中的类型实际上是可选的,也就是在Dart中函数类型,参数类型,变量类型是可以直接省略的。 ...

  • Dart 基础语法

    在线Dart语言编辑器 [dartpad]https://dartpad.cn/ 国内版 函数 a)可选参数 语法...

  • Flutter—SomeTips

    1:Dart: 无析构函数 2:final const 修饰的变量,函数,会节约性能 3:可选参数 {this....

网友评论

    本文标题:Dart小知识-可选参数了解一下?

    本文链接:https://www.haomeiwen.com/subject/zjohfctx.html