Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Dart 语法基础

Dart 语法基础

作者头像
用户3562254
发布于 2025-02-05 09:28:12
发布于 2025-02-05 09:28:12
1970
举报
文章被收录于专栏:Dart 语言Dart 语言

Dart 注释

Dart 支持单行注释、多行注释和文档注释。

单行注释

单行注释以 // 开头。 // 和行尾之间的所有内容都被 Dart 编译器忽略。

代码语言:dart
AI代码解释
复制
void main() {
  // TODO: 重构为 AbstractLlamaGreetingFactory?
  print('欢迎来到我的羊驼农场!');
}

多行注释

多行注释以 /* 开头,以 */ 结尾。 /**/ 之间的所有内容都被 Dart 编译器忽略(除非注释是文档注释;请参见下一节)。多行注释可以嵌套。

代码语言:dart
AI代码解释
复制
void main() {
  /*
   * 这是很多工作。考虑养鸡。

  Llama larry = Llama();
  larry.feed();
  larry.exercise();
  larry.clean();
   */
}

文档注释

文档注释是开头为 ////** 的多行或单行注释。在连续行上使用 /// 与多行文档注释的效果相同。

在文档注释中,分析器会忽略所有文本,除非它包含在方括号中。使用方括号,您可以引用类、方法、字段、顶级变量、函数和参数。方括号中的名称在已记录程序元素的词法作用域中解析。

这是一个带有对其他类和参数引用的文档注释示例:

代码语言:dart
AI代码解释
复制
/// 一种驯养的南美骆驼科动物(羊驼)。
///
/// 安第斯文化自前西班牙时代以来就一直将羊驼用作肉类和驮畜。
///
/// 与任何其他动物一样,羊驼也需要吃东西,
/// 所以不要忘记用一些 [Food] [feed] 它们。
class Llama {
  String? name;

  /// 用 [food] 喂你的羊驼。
  ///
  /// 一只典型的羊驼每周吃一捆干草。
  void feed(Food food) {
    // ...
  }

  /// 用 [activity] 活动让你的羊驼锻炼 [timeLimit] 分钟。
  void exercise(Activity activity, int timeLimit) {
    // ...
  }
}

在类的生成的文档中, [feed] 成为指向 feed 方法文档的链接,

[Food] 成为指向 Food 类文档的链接。

要解析 Dart 代码并生成 HTML 文档,您可以使用 Dart 的文档生成工具, dart doc

有关生成的文档示例,请参见

Dart API 文档。

有关如何组织注释的建议,请参见

Effective Dart:文档。

Dart 元数据

使用元数据为代码提供附加信息。元数据注释以字符 @ 开头,后跟编译时常量的引用(例如 deprecated )或对常量构造函数的调用。

所有 Dart 代码都可以使用四种注释: @Deprecated@deprecated@override@pragma 。有关使用 @override 的示例,请参阅 扩展类 。以下是如何使用 @Deprecated 注释的示例:

代码语言:dart
AI代码解释
复制
class Television {
  /// 使用 [turnOn] 代替打开电源。
  [!@Deprecated('Use turnOn instead')!]
  void activate() {
    turnOn();
  }

  /// 打开电视电源。
  void turnOn() {...}
  // ···
}

如果您不想指定消息,可以使用 @deprecated 。但是,我们 建议 始终使用 @Deprecated 指定消息。

您可以定义自己的元数据注释。以下是如何定义一个带有两个参数的 @Todo 注释的示例:

代码语言:dart
AI代码解释
复制
class Todo {
  final String who;
  final String what;

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

以下是如何使用该 @Todo 注释的示例:

代码语言:dart
AI代码解释
复制
@Todo('Dash', 'Implement this function')
void doSomething() {
  print('Do something');
}

元数据可以出现在库、类、typedef、类型参数、构造函数、工厂、函数、字段、参数或变量声明之前,以及 import 或 export 指令之前。

Dart 库与导入

importlibrary 指令可以帮助您创建模块化且可共享的代码库。库不仅提供 API,而且还是隐私单元:以下划线 (_) 开头的标识符仅在库内可见。每个 Dart 文件(及其部分)都是一个 库,即使它不使用 library 指令。

库可以使用 包 进行分发。

注意 要了解为什么 Dart 使用下划线而不是 publicprivate 等访问修饰符关键字,请参阅 SDK issue 33383 。

使用库

使用 import 指定一个库的命名空间如何在另一个库的范围内使用。

例如,Dart Web 应用通常使用 dart:html 库,它们可以这样导入:

代码语言:dart
AI代码解释
复制
import 'dart:html';

import 唯一必需的参数是指定库的 URI。

对于内置库,URI 具有特殊的 dart: 模式。

对于其他库,您可以使用文件系统路径或 package: 模式。 package: 模式指定由包管理器(例如 pub 工具)提供的库。例如:

代码语言:dart
AI代码解释
复制
import 'package:test/test.dart';

注意 URI 代表统一资源标识符。 URL(统一资源定位符)是一种常见的 URI。

指定库前缀

如果您导入了两个具有冲突标识符的库,则可以为一个或两个库指定前缀。例如,如果库1和库2都具有 Element 类,则您的代码可能如下所示:

代码语言:dart
AI代码解释
复制
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

// 使用 lib1 中的 Element。
Element element1 = Element();

// 使用 lib2 中的 Element。
lib2.Element element2 = lib2.Element();

只导入库的一部分

如果您只想使用库的一部分,可以选择性地导入库。例如:

代码语言:dart
AI代码解释
复制
// 只导入 foo。
import 'package:lib1/lib1.dart' show foo;

// 导入除 foo 之外的所有名称。
import 'package:lib2/lib2.dart' hide foo;
延迟加载库

延迟加载 (也称为 懒加载

允许 Web 应用根据需要按需加载库。

当您需要满足以下一项或多项需求时,请使用延迟加载。

  • 减少 Web 应用的初始启动时间。
  • 执行 A/B 测试——例如,尝试算法的替代实现。
  • 加载很少使用的功能,例如可选屏幕和对话框。

这并不意味着 Dart 会在启动时加载所有延迟组件。

Web 应用可以在需要时通过 Web 下载延迟组件。

dart 工具不支持针对 Web 以外的目标的延迟加载。

如果您正在构建 Flutter 应用,

请参阅 Flutter 指南中关于

延迟组件 的延迟加载实现。

undefined

要延迟加载库,首先使用 deferred as 导入它。

代码语言:dart
AI代码解释
复制
import 'package:greetings/hello.dart' deferred as hello;

当您需要该库时,使用库的标识符调用 loadLibrary()

代码语言:dart
AI代码解释
复制
Future<void> greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

在前面的代码中,

await 关键字会暂停执行,直到库加载完毕。

有关 asyncawait 的更多信息,

请参见 异步支持

您可以多次在库上调用 loadLibrary() 而不出现问题。

库只加载一次。

使用延迟加载时,请记住以下几点:

  • 延迟库的常量在导入文件中不是常量。 请记住,这些常量在延迟库加载之前不存在。
  • 您不能在导入文件中使用延迟库中的类型。 相反,请考虑将接口类型移动到由延迟库和导入文件同时导入的库。
  • Dart 会隐式地将 loadLibrary() 插入到您使用 deferred as 命名空间 定义的命名空间中。 loadLibrary() 函数返回一个 Future

library 指令 {:#library-directive}

要指定库级 文档注释 或 元数据注释 ,

请将它们附加到文件开头的 library 声明。

代码语言:dart
AI代码解释
复制
/// 一个非常棒的测试库。
@TestOn('browser')
library;

实现库

有关如何实现包的建议,请参阅

创建包 ,其中包括:

  • 如何组织库源代码。
  • 如何使用 export 指令。
  • 何时使用 part 指令。
  • 如何使用条件导入和导出来实现支持多个平台的库。

来源:Dart 中文开发文档

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Dart语言指南(二) 顶
Dart是一种面向对象的语言 包含类和基于 mixin 的继承两部分。每个对象是一个类的实例, 并且 Object.是所有类的父类。 基于 mixin 的继承指的是每个类(除了 Object )都只有一个父类,类体还可以在多个类继承中被重用。
南郭先生
2018/08/14
3.2K0
Dart语言指南(二)
                                                    顶
Dart 学习之开发语言概览,带思维导图(二)
在生成的文档中,[Food] 会成为一个链接,指向 Food 类的 API 文档。
siberiawolf
2020/03/24
1.8K0
Dart 学习之开发语言概览,带思维导图(二)
『Flutter开发实战』一小时掌握Dart语言
本文将从变量和运算符开始到类和库的使用来向你介绍 Dart 编程语言的主要功能,这里假设你已经有使用其它语言进行编程的经验。
小宋是呢
2022/01/05
5.3K0
Dart In Action -Dart快速入门(-)
本文基本上是将dart官网部分内容进行翻译,没兴趣的请出门左转至Dart的官网,有兴趣的同志请继续阅读本文。 Flutter教程在这里
JarvanMo
2018/09/06
1.2K0
Dart 概览
元数据注解是以 @ 字符开头,后面是一个编译时 常量(例如 deprecated)或者 调用一个常量构造函数。
前端GoGoGo
2019/07/01
8710
Dart的语法详解系列篇(四)-- 泛型、异步、库等有关详解九、泛型(Generics)十、库和可见性十一、异步支持十二、Isolates十三、生成器(Generators)十四、类型定义十五、元数据
上一篇主要讲了Dart的类与函数,由于内容有太多,我就把剩下的内容分开写一篇文章。 这一篇我们讲Dart的泛型、异步、库等有关详解,内容较多,希望大家可以耐心看完。我也是花了很长时间研究的。喜欢的就点个赞,打个赏吧。 感谢大家支持。
AWeiLoveAndroid
2019/01/03
4K1
Dart语言进阶语法(二)
Dart中的类与Java中的相似,不同的是,Dart中没有private、public这些成员访问修饰符。如果是类私有的成员,不希望外面访问,只需要在成员变量之前加上一个下划线_变为私有即可。
arcticfox
2019/09/17
1.7K0
Dart语言进阶语法(二)
dart系列之:在dart中使用packages
java中使用jar包来封装有用的功能,然后将其分发到maven仓库中,供其他人使用。同样的在dart中也有类似的概念叫做packages。packages就是可以用来共享的软件包,可以包含libraries和tools。
程序那些事
2021/11/18
7190
flutter--Dart基础语法(一)注释、变量、数据类型、运算符
Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,Flutter 开源、免费,拥有宽松的开源协议,支持移动、Web、桌面和嵌入式平台。
mukekeheart
2021/02/04
3.2K0
flutter--Dart基础语法(一)注释、变量、数据类型、运算符
《深入浅出Dart》Dart模块化
在大型软件项目中,模块化是必不可少的,它可以帮助我们更好地组织和管理代码,提高代码的可读性和可维护性。在Dart中,模块化是通过库(libraries)来实现的。
linwu
2023/07/27
2770
Flutter--Dart学习
2011年10月公开。它的开发团队由Google Chrome浏览器V8引擎 (JavaScript引擎)")团队的领导者拉尔斯·巴克主持,目标在于成为下一代结构化Web开发语言。 2014年7月,ECMA的第107次全体大会通过了第一版Dart语言规范 Dart中文网 Dart官网
None_Ling
2018/10/24
1K0
Flutter Lesson 2: Dart 语法简单介绍
Dart语法【Dart中文】可以说是Google因为为Flutter量身定做的一门语言,所以,我们之前基本上都没有接触过这门语言,在入手Flutter坑的时候,还必须了解一下Dart的语言特性。
踏浪
2019/07/31
1.9K0
Flutter Lesson 2: Dart 语法简单介绍
Dart学习笔记(六)——库
当引入的两个库具有相同的名称标识符的时候,会造成冲突。这个时候就可以使用as关键字来指定库的前缀。
拉维
2019/08/12
4530
Dart学习笔记(六)——库
Java魔法堂:注释和注释模板
一、注释                                     1. 注释类型      [a]. 单行注释 // 单行注释 String type = "单行注释";      [b]. 多行注释 /* * 多行注释 */ String type = "多行注释";      [c]. 文档注释 /** * 文档注释 */ public class Dummy{}   2. 快捷键      [a]. 添加/取消单行注释: Ctrl+/      [b]. 添加类的文档注释
^_^肥仔John
2018/01/18
2.7K0
python 基础知识汇总(注释规范)
python -m pydoc表示打开pydoc模块,这个模块就是用来查看python文档的工具
py3study
2020/01/08
1.7K0
python 基础知识汇总(注释规范)
初识Python(注释、编码规范、关键字...)
当使用三对单引号进行多行注释时,Pycharm会显示出来灰色波浪线,虽然不影响代码运行,但很影响程序美观。当代码下面出现波浪线时,通常表示代码存在一些警告或者建议
hacker707
2024/04/10
2630
初识Python(注释、编码规范、关键字...)
Dart 中的库的引入与使用
在Dart中,library指令可以创建库,每个Dart文件都是一个库,即使没有使用library指令来指定,库的使用时通过import关键字引入。
越陌度阡
2020/12/11
1.3K0
Dart 中的库的引入与使用
python语法基础
学一门语言,基础语法一定要扎实。很多入门的编程书籍,都会花大量的篇幅来介绍基础语法,对于毫无编程经验的新手而言,这样的书籍无疑是很友好的,但是对于有编程经验的开发者而言,很多的基础语法是通用的, 只需花费较少的时间浏览下基础语法,将精力集中在语言独有的特征上即可。
生信修炼手册
2020/05/07
6010
2. Groovy 语法-注释,关键字和标识符学习
它虽然可以直接使用Java代码进行编译,但是还是有部分和java语言的差异性。这里就是介绍Groovy的一些语言规范。学习Groovy的语法规则。
zinyan.com
2022/12/07
1.1K0
Deferred Components-实现Flutter运行时动态下发Dart代码
Tech      导读 Deferred Components,官方实现的Flutter代码动态下发的方案。本文主要介绍官方方案的实现细节,探索在国内环境下使用Deferred Components,并且实现了最小验证demo。读罢本文,你就可以实现Dart文件级别代码的动态下发。 01  引言 在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了! Deferred Components是Flu
京东技术
2022/06/24
2.2K0
Deferred Components-实现Flutter运行时动态下发Dart代码
相关推荐
Dart语言指南(二) 顶
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档