Dart语法学习(7)

void printElement(int element) { print(element); } var list = [1, 2, 3]; // 把 printElement函数作为一个参数传递进来 list.forEach(printElement);

您也可以将一个函数分配给一个变量。

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

匿名函数

大多数函数都能被命名为匿名函数,如 main() 或 printElement()。您还可以创建一个名为匿名函数的无名函数,有时也可以创建lambda或闭包。您可以为变量分配一个匿名函数,例如,您可以从集合中添加或删除它。

一个匿名函数看起来类似于一个命名函数 - 0或更多的参数,在括号之间用逗号和可选类型标注分隔。

下面的代码块包含函数的主体:

([[Type] param1[, …]]) { codeBlock; };

下面的示例定义了一个具有无类型参数的匿名函数item,该函数被list中的每个item调用,输出一个字符串,该字符串包含指定索引处的值。

var list = ['apples', 'bananas', 'oranges']; list.forEach((item) { print('${list.indexOf(item)}: $item'); });

如果函数只包含一条语句,可以使用箭头符号=>来缩短它, 比如上面的例2可以简写成:

list.forEach((item) => print('${list.indexOf(item)}: $item'));

返回值

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

foo() {} assert(foo() == null);

类(Classes)

对象

Dart 是一种面向对象的语言,并且支持基于mixin的继承方式。

Dart 语言中所有的对象都是某一个类的实例,所有的类有同一个基类--Object。

基于mixin的继承方式具体是指:一个类可以继承自多个父类。

使用new语句来构造一个类,构造函数的名字可能是ClassName,也可以是ClassName.identifier, 例如:

var jsonData = JSON.decode('{"x":1, "y":2}'); // Create a Point using Point(). var p1 = new Point(2, 2); // Create a Point using Point.fromJson(). var p2 = new Point.fromJson(jsonData);

使用.(dot)来调用实例的变量或者方法。

var p = new Point(2, 2); // Set the value of the instance variable y. p.y = 3; // Get the value of y. assert(p.y == 3); // Invoke distanceTo() on p. num distance = p.distanceTo(new Point(4, 4));

使用?.来确认前操作数不为空, 常用来替代. , 避免左边操作数为null引发异常。

// If p is non-null, set its y value to 4. p?.y = 4;

使用const替代new来创建编译时的常量构造函数。

var p = const ImmutablePoint(2, 2);

使用runtimeType方法,在运行中获取对象的类型。该方法将返回Type 类型的变量。

print('The type of a is ${a.runtimeType}');

实例化变量(Instance variables)

在类定义中,所有没有初始化的变量都会被初始化为null。

class Point { num x; // Declare instance variable x, initially null. num y; // Declare y, initially null. num z = 0; // Declare z, initially 0. }

类定义中所有的变量, Dart语言都会隐式的定义 setter 方法,针对非空的变量会额外增加 getter 方法。

class Point { num x; num y; } main() { var point = new Point(); point.x = 4; // Use the setter method for x. assert(point.x == 4); // Use the getter method for x. assert(point.y == null); // Values default to null. }

构造函数(Constructors)

声明一个和类名相同的函数,来作为类的构造函数。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/82c011c5fbd719479ecf8402e9575707.html