美文网首页
Dart语言 3 方法

Dart语言 3 方法

作者: 芝麻酱的简书 | 来源:发表于2019-01-19 14:02 被阅读32次

Dart是一种真正的面向对象语言,因此即使是函数也是对象并且具有类型Function。这意味着函数可以分配给变量或作为参数传递给其他函数。

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

我们也可以简写为如下:(阅读性不好,不推荐)

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

对于只包含一个表达式的函数,可以使用简写语法:

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

=> expr语法是{return expr;的简写。=>表示法有时称为箭头语法。

注意:箭头(=>)和分号(;)之间只能出现表达式而非语句。
例如,您不能在其中放置if语句,但可以使用条件表达式。

参数类型
函数可以有两种类型的参数:必需和可选。首先列出所需参数,然后列出任何可选参数。命名的可选参数也可以标记为@required

可选参数分类:
可选参数可以是位置参数,也可以是命名参数,但不能同时都是。

  • 可选的命名参数:

定义函数时,使用{param1,param2,...}指定命名参数:

///设置[bold]和[hidden]标志......
void enableFlags({bool bold,bool hidden}){...}

调用函数时,可以使用paramName:value指定命名参数。例如:

enableFlags(bold:true,hidden:false);

您可以使用@required在任何Dart代码(不仅仅是Flutter)中注释命名参数,以指示它是必需参数。例如:

const Scrollbar({Key key,@required Widget child})
  • 可选的位置参数:
    []中包装一组函数参数将它们标记为可选的位置参数:
String say(String from, String msg, [String device]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  return result;
}

默认参数值
您的函数可以使用=来定义命名和位置参数的默认值。默认值必须是编译时常量。如果未提供默认值,则默认值为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);

Dart中函数是一等公民,可以作为方法参数:

void printElement(int element) {
  print(element);
}

var list = [1, 2, 3];

// Pass printElement as a parameter.
list.forEach(printElement);

也可以声明为变量:

var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
assert(loudify('hello') == '!!! HELLO !!!');

所有函数都返回一个值。如果未指定返回值,则该语句返回null;隐式附加到函数体。

foo(){}

assert(foo()== null);

运行时类型判断符
as,is,and! 运算符在运行时检查类型很方便。

if (emp is Person) {
  // Type check
  emp.firstName = 'Bob';
}
或者
(emp as Person).firstName = 'Bob';

如果emp不是Person类型,则不会向后执行, 直接抛出异常。

分配运算符
要仅在变量为null时分配,请使用?? =运算符。

//为a分配值
a = 值;
//如果b为null,则将值赋给b;否则,b保持不变
b ?? =值;

级联符号 ..

(..)允许您对同一对象进行一系列操作。除了函数调用,您还可以访问同一对象上的字段。这通常可以为您节省创建临时变量的步骤,并允许您编写更多流畅的代码。

querySelector('#confirm') // Get an object.
  ..text = 'Confirm' // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

上面代码等价于:

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

不可以在返回void(其实就是返回null,方法没有返回值的时候,默认返回null)的方法上构造级联:

var sb = StringBuffer();
sb.write('foo')
  ..write('bar'); 

错误写法❌
 Error: method 'write' isn't defined for 'void'.

注意:严格来说,级联的“双点”符号不是运算符。它只是Dart语法的一部分。

相关文章

  • Dart语言 3 方法

    Dart是一种真正的面向对象语言,因此即使是函数也是对象并且具有类型Function。这意味着函数可以分配给变量或...

  • 【Flutter】Dart基本语法

    Dart编程语言——基本概念及变量类型Dart编程语言——方法Dart编程语言——操作符、流程控制和异常Dart编...

  • flutter【3】dart语言--方法

    方法 dart时纯面向对象语言,所以方法也是一种对象,Function。所以方法也能被赋值给变量,当成参数传递给其...

  • Dart语言(三)Functions(方法)

    Dart语言(三)Functions(方法) Dart是一个真正的面向对象的语言,方法本身也是个对象,这个对象类型...

  • Dart 语言入门 (四)

    Dart 语言系列 Dart 语言入门 (一) Dart 语言入门 (二) Dart 语言入门 (三) Dart ...

  • Dart 语言入门 (六) - Exceptions

    Dart 语言系列 Dart 语言入门 (一) Dart 语言入门 (二) Dart 语言入门 (三) Dart ...

  • Dart 语言入门 (五)

    Dart 语言系列 Dart 语言入门 (一) Dart 语言入门 (二) Dart 语言入门 (三) Dart ...

  • (三)Dart Functions(方法)

    Dart方法概述 Dart 是一个真正的面向对象语言,方法也是对象并且具有一种 类型, Function。 这意味...

  • Dart/Flutter - 扩展方法(ExtensionMet

    最近Get到一个新技能,类似Kotlin、C#等语言上的扩展方法,现在Dart语言也支持啦! 目前Dart-SDK...

  • Dart学习-基础篇

    1.Dart学习入门2.Dart学习-关键词3.Dart学习-变量4.Dart学习-内置类型5.Dart学习-方法...

网友评论

      本文标题:Dart语言 3 方法

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