美文网首页
Dart基础(十)-其它

Dart基础(十)-其它

作者: 苍眸之宝宝 | 来源:发表于2022-01-12 11:22 被阅读0次

1.简介:

  本篇文章介绍Dart的其它一些知识。

2.库:

  importlibrary 关键字可以帮助你创建一个模块化和可共享的代码库。代码库不仅只是提供 API 而且还起到了封装的作用:以下划线(_)开头的成员仅在代码库中可见。 每个 Dart 程序都是一个库,即便没有使用关键字 library 指定。
  Dart 的库可以使用 包工具 来发布和部署。

2.1引入库:

  使用 import 来指定命名空间以便其它库可以访问。
  比如你可以导入代码库 dart:html 来使用 Dart Web 中相关 API:

import 'dart:html';

  import 的唯一参数是用于指定代码库的URI(代表统一资源标识符),对于 Dart 内置的库,使用 dart:xxxxxx 的形式。而对于其它的库,你可以使用一个文件系统路径或者以 package:xxxxxx 的形式。 package:xxxxxx 指定的库通过包管理器(比如 pub 工具)来提供:

import 'package:test/test.dart';

2.2指定库的别名:

  如果你导入的两个代码库有冲突的标识符,你可以为其中一个指定前缀。比如如果 library1library2 都有 Element 类,那么可以这么处理:

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

// Uses Element from lib1.
Element element1 = Element();

// Uses Element from lib2.
lib2.Element element2 = lib2.Element();

2.3库的部分引入:

  如果你只想使用代码库中的一部分,你可以有选择地导入代码库。例如:

// 只引入库中 foo.
import 'package:lib1/lib1.dart' show foo;

// 引入库的所有除 foo以外的代码.
import 'package:lib2/lib2.dart' hide foo;

2.4实现库

查阅 创建依赖库包 可以获取有关如何实现库包的建议,包括:

  • 如何组织库的源文件。

  • 如何使用 export 命令。

  • 何时使用 part 命令。

  • 何时使用 library 命令。

  • 如何使用导入和导出命令实现多平台的库支持。

3.生成器:

  当你需要延迟地生成一连串的值时,可以考虑使用 生成器函数。Dart 内置支持两种形式的生成器方法:

  • 同步 生成器:返回一个 Iterable 对象。
  • 异步 生成器:返回一个 Stream 对象。

  通过在函数上加 sync* 关键字并将返回值类型设置为 Iterable 来实现一个 同步 生成器函数,在函数中使用 yield 语句来传递值:

Iterable<int> naturalsTo(int n) sync* {
  int k = 0;
  while (k < n) yield k++;
}

  实现 异步 生成器函数与同步类似,只不过关键字为 async* 并且返回值为 Stream:

Stream<int> asynchronousNaturalsTo(int n) async* {
  int k = 0;
  while (k < n) yield k++;
}

  如果生成器是递归调用的,可是使用 yield* 语句提升执行性能:

Iterable<int> naturalsDownFrom(int n) sync* {
  if (n > 0) {
    yield n;
    yield* naturalsDownFrom(n - 1);
  }
}

4.别名:

  类型别名是引用某一类型的简便方法,因为其使用关键字typedef,因此通常被称作typedef。下面是一个使用IntList来声明和使用类型别名的例子:

typedef IntList = List<int>;
IntList il = [1, 2, 3];

类型别名可以有类型参数:

typedef ListMapper<X> = Map<X, List<X>>;
Map<String, List<String>> m1 = {}; // Verbose.
ListMapper<String> m2 = {}; // Same thing but shorter and clearer.

针对函数,在大多数情况下,我们推荐使用 内联函数类型 替代 typedefs。然而,函数的 typedefs 仍然是有用的:

typedef Compare<T> = int Function(T a, T b);

int sort(int a, int b) => a - b;

void main() {
  assert(sort is Compare<int>); // True!
}

5.元数据:

  使用元数据可以为代码增加一些额外的信息。元数据注解以 @ 开头,其后紧跟一个编译时常量(比如 deprecated)或者调用一个常量构造函数。

  Dart 中有两个注解是所有代码都可以使用的: @deprecated@Deprecated@override。你可以查阅 扩展一个类 获取有关 @override 的使用示例。下面是使用 @deprecated 的示例:

class Television {
  /// Use [turnOn] to turn the power on instead.
  @Deprecated('Use turnOn instead')
  void activate() {
    turnOn();
  }

  /// Turns the TV's power on.
  void turnOn() {...}
  // ···
}

  可以自定义元数据注解。下面的示例定义了一个带有两个参数的 @todo 注解:

// 定义
library todo;

class Todo {
  final String who;
  final String what;

  const Todo(this.who, this.what);
}

// 使用
import 'todo.dart';

@Todo('seth', 'make this do something')
void doSomething() {
  print('do something');
}

  元数据可以在 library、class、typedef、type parameter、 constructor、factory、function、field、parameter 或者 variable 声明之前使用,也可以在 import 或 export 之前使用。可使用反射在运行时获取元数据信息。

相关文章

  • Dart基础(十)-其它

    1.简介:   本篇文章介绍Dart的其它一些知识。 2.库:   import 和 library 关键字可以帮...

  • Dart 基础(四)

    前言笔者在之前已经写了3篇Dart的基础文章了。Dart 基础 (一)Dart 基础 (二)Dart 基础 (三)...

  • Dart 基础 (三)

    前言笔者在之前已经写了2篇Dart的基础文章了。Dart 基础 (一)Dart 基础 (二) 本文是Dart基础的...

  • Dart编译技术在服务端的探索和应用

    前言 最近闲鱼技术团队在Flutter+Dart的多端一体化的基础上,实现了FaaS研发模式。Dart吸取了其它高...

  • dart入门潜修系列教程

    dart入门潜修基础篇之基本语法和内置类型dart入门潜修基础篇之方法dart入门潜修基础篇之操作符dart入门潜...

  • 一.Dart语法-操作符、方法与异常

    Dart基础 运行Dart 代码可以使用 dart xxx.dart,dart命令需要配置环境变量,将 “${F...

  • Dart 笔记 14 - 其它

    StringBuffer 在 dart:core 库里。 在调用 toString() 之前,StringBuff...

  • Dart基础(一)

    级别: ★☆☆☆☆标签:「Flutter 」「Dart」「Dart基础类型」作者: WYW审校: QiShare...

  • Flutter学习笔记

    Dart基础语法 一、选择开发工具 首先需要安装Dart SDK(https://www.dart-china.o...

  • Dart语言基础,Dart 基础

    Dart 的main方法有两种声明方式 注释 变量的声明 、命名规则、数组类型 Dart是一个强大的脚本类语言,可...

网友评论

      本文标题:Dart基础(十)-其它

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