ToB企服应用市场:ToB评测及商务社交产业平台

标题: Flutter/Dart第07天:Dart基础语法详解(库、导入和关键字) [打印本页]

作者: 慢吞云雾缓吐愁    时间: 2023-10-12 02:13
标题: Flutter/Dart第07天:Dart基础语法详解(库、导入和关键字)
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类导入库:
如何使用库(import关键字)

通过import关键字指定在一个库中使用另外一个命名空间的库。
代码样例:如下代码,我们导入了Dart内置的html库、中心仓库get库,和本地库。
  1. // 内置库
  2. import 'dart:html';
  3. // 中心仓库
  4. import 'package:get/get.dart';
  5. // 本地代码库
  6. import '../01-ntopic-hellodart.dart';
复制代码
指定库前缀(as关键字)

研发过程中,我们有时会导入有相同标识符,那么在使用过程中就会产生冲突,这时可以通过as关键字进行重命名库,同时在使用的时候,增加前缀进行区分。
代码样例:如下代码,我们导入了lib1lib2两个库,它们都有Element这个类。
  1. import 'package:lib1/lib1.dart';
  2. import 'package:lib2/lib2.dart' as lib2;
  3. // `lib1`库中Element类
  4. Element element1 = Element();
  5. // `lib2`库中Element类,通过`lib2`前缀解决冲突
  6. lib2.Element element2 = lib2.Element();
复制代码
导入部分库(show/hide关键字)

我们有时候只需要用到某个库的一部分代码或者类,或者需要排除某个库中指定的代码,通过增加show和hide关键字可实现。
代码样例:如下代码,我们用到了lib1lib2两个库,lib1通过show仅导入了foo这个标识符(类名、常量名等),而lib2通过hide导入除foo之外的其他所有标识符。
  1. // 仅导入`foo`
  2. import 'package:lib1/lib1.dart' show foo;
  3. // 导入除`foo`之外所有
  4. import 'package:lib2/lib2.dart' hide foo;
复制代码
延迟导入库(deferred as关键字)

Web应用中通过延迟导入库,可以实现按需加载,如下几种常见的应用场景:
代码样例:如下代码,通过deferred as关键字,实现延迟导入库,在实际使用库功能时需要导入库(如:await hello.loadLibrary();),在库加载完成之前,会阻塞代码执行。执行loadLibrary()方法仅实际加载库一次,后续调用该方法不会重复加载。
  1. // 1. 延迟导入库
  2. import 'package:greetings/hello.dart' deferred as hello;
  3. // 2. 实际使用时,使用库前缀
  4. Future<void> greet() async {
  5.   // 加载库,加载成功之前阻塞后续代码执行,多次调用仅加载一次
  6.   await hello.loadLibrary();
  7.   hello.printGreeting();
  8. }
复制代码
特别注意:
Dart中的关键字(共67个)

Dart官方文档:https://dart.dev/language/keywords
Dart关键字一共包含67个,本博客不重复列出这67个关键字,仅对关键字进行说明:
我的本博客原地址:https://ntopic.cn/p/2023100201

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4