当前位置:首页 > 后端开发 > 正文内容

Flutter/Dart第07天:Dart根底语法详解(库、导入和关键字)

邻居的猫1个月前 (12-09)后端开发1683

Dart官网文档:https://dart.dev/language/libraries

重要阐明:本博客依据Dart官网文档,但并不是简略的对官网进行翻译,在掩盖中心功用情况下,我会依据个人研制经历,参加自己的一些扩展问题和场景验证。

Dart中的库(Library)

Dart言语对代码的复用下了不少功夫,如前面讲到的Mixin高档特性完结类等级代码复用。本文介绍另一种更广大的代码复用:

Dart库能够认为是一组复用类、功用等的调集,它则代表了一个同享的代码模块,任何一个.dart文件都是一个库。

Dart库有一个隐含的规矩:但凡以下划线_最初的标识符仅在本库内部可见,其他在库内外部均可见。(Dart没有private/protected/public可见域标识符,那么对应Java言语,下划线_最初为private,其他的为public,Dart没有protected)。

Dart库能够根本可分为3种,主张在运用时严厉依照这3类导入库:

  1. Dart中的内置库,即SDK中的库(关于Java言语如java.util.Map),以dart:作为命名空间。
  2. Dart包中心库房的库(关于Java言语为Maven中心库房),以package:作为命名空间。
  3. 本地文件代码库,以相对途径或许绝对途径作为命名空间。当然,本地代码块也能够运用package作为命名空间,简单和第2中混杂,因而不引荐。

怎么运用库(import要害字)

经过import要害字指定在一个库中运用别的一个命名空间的库。

代码样例:如下代码,咱们导入了Dart内置的html库、中心库房get库,和本地库。

// 内置库
import 'dart:html';

// 中心库房
import 'package:get/get.dart';

// 本地代码库
import '../01-ntopic-hellodart.dart';

指定库前缀(as要害字)

研制过程中,咱们有时会导入有相同标识符,那么在运用过程中就会发生抵触,这时能够经过as要害字进行重命名库,一起在运用的时分,添加前缀进行区别。

代码样例:如下代码,咱们导入了lib1lib2两个库,它们都有Element这个类。

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

// `lib1`库中Element类
Element element1 = Element();

// `lib2`库中Element类,经过`lib2`前缀处理抵触
lib2.Element element2 = lib2.Element();

导入部分库(show/hide要害字)

咱们有时分只需求用到某个库的一部分代码或许类,或许需求扫除某个库中指定的代码,经过添加showhide要害字可完结。

代码样例:如下代码,咱们用到了lib1lib2两个库,lib1经过show仅导入了foo这个标识符(类名、常量名等),而lib2经过hide导入除foo之外的其他一切标识符。

// 仅导入`foo`
import 'package:lib1/lib1.dart' show foo;

// 导入除`foo`之外一切
import 'package:lib2/lib2.dart' hide foo;

推迟导入库(deferred as要害字)

Web运用中经过推迟导入库,能够完结按需加载,如下几种常见的运用场景:

  1. 削减Web运用的发动时刻。
  2. A/B测验,比方切流不同的算法库。
  3. 不常用的功用,比方可选页面、弹窗等。

代码样例:如下代码,经过deferred as要害字,完结推迟导入库,在实践运用库功用时需求导入库(如:await hello.loadLibrary();),在库加载完结之前,会堵塞代码履行。履行loadLibrary()办法仅实践加载库一次,后续调用该办法不会重复加载。

// 1. 推迟导入库
import 'package:greetings/hello.dart' deferred as hello;

// 2. 实践运用时,运用库前缀
Future<void> greet() async {
  // 加载库,加载成功之前堵塞后续代码履行,屡次调用仅加载一次
  await hello.loadLibrary();
  hello.printGreeting();
}

特别注意:

  1. 推迟导入库中的常量,在该库导入之前并不存在,因而它们并不是导入库(即运用它们的文件)中的常量。
  2. 推迟导入库在导入之前并不存在,因而导入库不能运用它们的类型(包括类、枚举等),能够考虑把公共代码(如根底类、接口等)抽取出来作为独自的库,让推迟导入库和导入库一起导入运用。
  3. 当运用deferred as XXX推迟导入库时,Dart隐含的给loadLibrary()添加了XXX命名空间。如上代码,loadLibrary()办法是异步的,回来一个Future

Dart中的要害字(共67个)

Dart官方文档:https://dart.dev/language/keywords

Dart要害字总共包括67个,本博客不重复列出这67个要害字,仅对要害字进行阐明:

  1. 尽量防止运用这些要害字作为标识符,如有必要,表格中有123上标的要害字在部分常见能够运用作为标识符。
  2. 上标为1的要害字与上下文有关,离开了上下文,这些要害字能够作为标识符。如showhide要害在只在导入库上下文文中用到,其他地方能够正常作为标识符。
  3. 上标为2的要害字是Dart内置的标识符,它们在大部分场景能够运用,可是制止在类名、类型名和指定库的前缀(其实也是类型的一种)。
  4. 上标为3的要害字(共2个:await/yield)约束在异步编程场景运用,在标记为async/async*/sync*同步和异步函数内部,制止运用。

我的本博客原地址:https://ntopic.cn/p/2023100201


扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=276

分享给朋友:

“Flutter/Dart第07天:Dart根底语法详解(库、导入和关键字)” 的相关文章

Flutter/Dart第08天:Dart类型(内置类型、记载、调集、泛型和类型别号)

Flutter/Dart第08天:Dart类型(内置类型、记载、调集、泛型和类型别号)

Dart内置类型(共10类) Dart官网文档:https://dart.dev/language/built-in-types Dart内置类型即Dart SDK自带的类型,咱们编程过程中可直接运用的类型,首要分为10类: 数值类型:包含int类、double类等。 字符串类型:即String类。...

链表c语言,二、链表的基本概念

链表c语言,二、链表的基本概念

链表(Linked List)是一种常见的数据结构,它由一系列节点组成,每个节点包含两部分:数据部分和指向下一个节点的指针。链表可以分为单链表、双链表和循环链表等。下面我将分别介绍这些链表类型,并提供相应的C语言实现。 1. 单链表单链表是最简单的链表类型,每个节点只包含一个指向下一个节点的指针。...

scala柯里化,什么是Scala柯里化?

scala柯里化,什么是Scala柯里化?

Scala 中的柯里化是一种函数式编程技术,它允许将一个接受多个参数的函数转换成一系列接受单个参数的函数。这种方法在处理具有多个参数的函数时特别有用,因为它可以简化函数的调用和重用。柯里化的基本思想是将一个多参数函数转换为一系列嵌套的单参数函数。例如,一个接受两个参数的函数 f 可以被柯里化为两个嵌...

go ping,Go语言简介

go ping,Go语言简介

Go语言中实现ping命令的原理和步骤如下: 原理ping命令通过发送ICMP(Internet Control Message Protocol,因特网控制消息协议)回显请求(Echo Request)数据包到目标主机,并监听回显应答(Echo Reply)数据包来测试网络连通性。如果目标主机在线...

python应用领域,Python应用领域的广泛探索与未来展望

python应用领域,Python应用领域的广泛探索与未来展望

1. Web开发:Python拥有许多流行的Web框架,如Django、Flask等,这些框架可以帮助开发者快速构建Web应用程序。2. 数据分析:Python在数据分析领域非常受欢迎,拥有Pandas、NumPy、SciPy等强大的数据分析库。这些库提供了丰富的数据操作和分析功能,使得Python...

php游戏源码,开发、应用与优化

php游戏源码,开发、应用与优化

1. 寻仙纪: 寻仙纪是一款在线多人文字游戏,需要PHP 5.6版本和MySQL 5.5版本的环境。MySQL高于5.5版本可能会导致无法建立角色的问题。支持Nginx、APACHE、IIS等WEB发布服务,但不支持Mariadb。你可以访问获取更多信息和下载源码。2. Ogame: O...