1. // 导入(import)
  2. // 导入核心库
  3. //导入外部库
  4. import 'package:test_api/test_api.dart';
  5. // 导入文件
  6. //import 'path/test.dart';
  7. // 每个应用都有一个 main() 函数
  8. void main() {
  9. // 你好,世界
  10. // 使用顶层函数 print() 来将一段文本输出显示到控制台
  11. print('Hello, World!');
  12. // 变量
  13. // 虽然 Dart 是代码类型安全的语言,但是由于其支持类型推断,因此大多数变量不需要显式地指定类型
  14. var name = '天空之城';
  15. var year = 1977;
  16. var antennaDiameter = 3.7;
  17. var flybyObjects = ['木星', '土星', '天王星', '海王星'];
  18. var image = {
  19. 'tags': ['木星'],
  20. 'url': '//path//ex.jpg',
  21. };
  22. // 流程控制语句
  23. // Dart 支持常用的流程控制语句
  24. if (year >= 2001) {
  25. print('21世纪');
  26. } else if (year >= 1901) {
  27. print('20世纪');
  28. }
  29. for (var object in flybyObjects) {
  30. print(object);
  31. }
  32. for (var month = 1; month <= 12; ++month){
  33. print(month);
  34. }
  35. while (year < 2016) {
  36. year += 1;
  37. }
  38. // 调用函数
  39. var result = fibonacci(20);
  40. print(result);
  41. // =>(胖箭头)
  42. // 这种简写语法用于仅包含一条语句的函数。该语法在将匿名函数作为参数传递时非常有用
  43. flybyObjects.where((name) => name.contains('土星')).forEach(print);
  44. // 注释
  45. // 这是一个普通的单行注释。
  46. /// 这是一个文档注释。
  47. /// 文档注释用于为库、类以及类的成员添加注释。
  48. /// 像 IDE 和 dartdoc 这样的工具可以专门处理文档注释。这很重要!
  49. /* 也可以像这样使用单斜杠和星号的注释方式 */
  50. // 使用类
  51. var voyager = Spacecraft('旅行者一号', DateTime(1977, 5, 5));
  52. voyager.describe();
  53. var voyager3 = Spacecraft.unlaunched('旅行者三号');
  54. voyager3.describe();
  55. }
  56. // 函数
  57. // 建议为每个函数的参数以及返回值都指定类型
  58. int fibonacci(int n) {
  59. if (n == 0 || n == 1) return n;
  60. return fibonacci(n - 1) + fibonacci(n - 2);
  61. }
  62. // 类
  63. // 展示了一个包含三个属性、两个构造函数以及一个方法的类。其中一个属性不能直接赋值,因此它被定义为一个 getter 方法(而不是变量)。
  64. class Spacecraft {
  65. String name;
  66. DateTime launchDate;
  67. // 构造函数,带有可以直接为成员变量赋值的语法糖
  68. Spacecraft(this.name, this.launchDate) {
  69. // 实现初始化代码
  70. }
  71. // 命名构造函数,转发到默认构造函数
  72. Spacecraft.unlaunched(String name) : this(name, null);
  73. // 只读的非final的属性
  74. int get launchYear => launchDate?.year;
  75. // 方法
  76. void describe() {
  77. print('宇宙飞船:$name');
  78. if (launchDate != null) {
  79. int years = DateTime.now().difference(launchDate).inDays ~/ 365;
  80. print('发射时间:$launchYear ($years years ago)');
  81. } else {
  82. print('尚未发射!');
  83. }
  84. }
  85. }
  86. // 继承类,Dart支持单继承
  87. class Orbiter extends Spacecraft {
  88. num altitude;
  89. Orbiter(String name, DateTime launchDate, this.altitude) : super(name, launchDate);
  90. }
  91. // Mixins, 它是一种在多个类层次结构中重用代码的方法
  92. class Piloted {
  93. int astronauts = 1;
  94. void describeCrew() {
  95. print('宇航员人数:$astronauts');
  96. }
  97. }
  98. // 使用 Mixin 的方式继承这个类就可将该类中的功能添加给其它类
  99. class PilotedCraft extends Spacecraft with Piloted {
  100. //
  101. }
  102. // 接口和抽象类
  103. // Dart 没有 interface 关键字。相反,所有的类都隐式定义了一个接口。因此,任意类都可以作为接口被实现。
  104. class MockSpaceship implements Spacecraft {
  105. //
  106. }
  107. // 创建一个被任意具体类扩展(或实现)的抽象类。抽象类可以包含抽象方法(不含方法体的方法)。
  108. abstract class Describable {
  109. void describe();
  110. void describeWithEmphasis() {
  111. print('=========');
  112. describe();
  113. print('=========');
  114. }
  115. }
  116. // 异步
  117. // 使用 async 和 await 关键字可以让你避免回调地狱(Callback Hell)并使你的代码更具可读性
  118. const oneSecond = Duration(seconds: 1);
  119. // ...
  120. Future<void> printWithDelay(String message) async {
  121. await Future.delayed(oneSecond);
  122. print(message);
  123. }
  124. // async 和 await 关键字有助于使异步代码变得易于阅读
  125. Future<void> createDescriptions(Iterable<String> objects) async {
  126. for (var object in objects) {
  127. try {
  128. var file = File('$object.txt');
  129. if (await file.exists()) {
  130. var modified = await file.lastModified();
  131. print('文件$object已经存在,它上一次修改时间为 $modified。');
  132. continue;
  133. }
  134. await file.create();
  135. await file.writeAsString('开始在此文件中描述 $object。');
  136. } on IOException catch (e) {
  137. print('不能为 $object 创建描述:$e');
  138. }
  139. }
  140. }
  141. // 也可以使用 async* 关键字,其可以为你提供一个可读性更好的方式去生成 Stream。
  142. Stream<String> report(Spacecraft craft, Iterable<String> objects) async* {
  143. for (var object in objects) {
  144. await Future.delayed(oneSecond);
  145. yield '${craft.name} 由 $object 飞行。';
  146. }
  147. }
  148. // 异常
  149. // 使用 throw 关键字抛出一个异常
  150. if (astronauts == 0) {
  151. throw StateError('没有宇航员');
  152. }
  153. // 使用 try 语句配合 on 或 catch(两者也可同时使用)关键字来捕获一个异常
  154. try {
  155. for (var object in flybyObjects) {
  156. var description = await File('$object.txt').readAsString();
  157. print(description);
  158. }
  159. } on IOException catch (e) {
  160. print('无法描述该对象:$e');
  161. } finally {
  162. flybyObjects.clear();
  163. }
  164. // 上述代码是异步的;同步代码以及异步函数中得代码都可以使用 try 捕获异常。

【Dart】语言概述的更多相关文章

  1. Atitit.dart语言的特性  编译时js语言大总结

    Atitit.dart语言的特性  编译时js语言大总结 1. 原型环境1 1.1. Dart可以编译js3 2. 第二个期待的理由是Dart的语言特性,没有什么特别特性好像,类似java c#一小时 ...

  2. Dart 语言简述

    Dart是一种“结构化的web编程”语言,Dart编程语言在所有现代浏览器和环境中提供高性能.Dart是谷歌开发的计算机编程语言,后来被ECMA认定为标准. Dart重要的概念: 1.所有的东西都是对 ...

  3. 1-学习前言&C语言概述

    [C语言]01-学习前言&C语言概述 参考自 http://www.cnblogs.com/mjios/archive/2013/03/12/2956508.html#label2 C语言是我 ...

  4. OpenGL官方教程——着色器语言概述

    OpenGL官方教程——着色器语言概述 OpenGL官方教程——着色器语言概述 可编程图形硬件管线(流水线) 可编程顶点处理器 可编程几何处理器 可编程片元处理器 语言 可编程图形硬件管线(流水线) ...

  5. Delphi XE5教程1:语言概述

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

  6. java基础---java语言概述

    一.计算机编程的两种范型 1.面向过程的模型---具有线性执行特点,认为是代码作用于数据. 2.面向对象的模型---围绕它的数据(即对象)和为这个数据定义的接口来组织程序:实际上是用数据控制代码的访问 ...

  7. Dart语言入门(一)

    Dart 语言介绍 Dart 是谷歌在 2011 年推出的编程语言,是一种结构化 Web 编程语言,允许用户通过 Chromium 中所整合的虚拟机(Dart VM)直接运行 Dart 语言编写的程序 ...

  8. Python语言——Python语言概述

    Python语言概述 计算机语言概述 语言:交流工具,沟通媒介 计算机语言:人和计算机交流的工具,翻译官 Python语言简述 Python是计算机语言的一种 Python编程语言: 代码:人类语言, ...

  9. 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB

    走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...

  10. [编程笔记]第一章 C语言概述

    //C语言学习笔记 第一讲 C语言概述 第二讲 基本编程知识 第三讲 运算符和表达式 第四讲 流程控制 第五讲 函数 第六讲 数组 第七讲 指针 第八讲 变量的作用域和存储方式 第九讲 拓展类型 第十 ...

随机推荐

  1. 五、Zookeeper基于API操作Node节点

    安装zookeeper :linux下安装Zookeeper 3.4.14 zookeeper 分为5个包: org.apache.zookeeper //客户端主要类文件 org.apache.zo ...

  2. tp5使用PHPWord(下载引入/composer两种方式)

    PHPWORD使用文档 一:引入 tp5.0,tp5.1: 1:composer方式(推荐) a:根目录下执行:composer require phpoffice/phpword b:引入: use ...

  3. Navicat Primium连接数据库报ORA-28547错误

    这个问题主要是Navicat Primium与orecal中的oci.dll版本不一致造成的,无论是本地数据库或者网络数据库. 解决方法:在数据库orecal安装目录中搜索oci.dll文件,找到后将 ...

  4. windows 下命令行关闭进程。

    使用 进程名关闭 taskkill /im mspaint.exe /f 使用 进程id 关闭 taskkill /im 12555 /f

  5. Kafka中使用Avro编码、解码消息

    1.消费者代码 import com.twitter.bijection.Injection; import com.twitter.bijection.avro.GenericAvroCodecs; ...

  6. 面试 11-01.ES6:模块化的使用和编译环境

    11-01.ES6:模块化的使用和编译环境 #前言 #ES6的主要内容 模块化的使用和编译环境 Class与JS构造函数的区别 Promise的用法 ES6其他常用功能 本文来讲"模块化的使 ...

  7. SQL:我为什么慢你心里没数吗?

    SQL 语句执行慢的原因是面试中经常会被问到的,对于服务端开发来说也是必须要关注的问题. 在生产环境中,SQL 执行慢是很严重的事件.那么如何定位慢 SQL.慢的原因及如何防患于未然.接下来带着这些问 ...

  8. ASP.NET Core 3.1使用JWT认证Token授权 以及刷新Token

    传统Session所暴露的问题 Session: 用户每次在计算机身份认证之后,在服务器内存中会存放一个session,在客户端会保存一个cookie,以便在下次用户请求时进行身份核验.但是这样就暴露 ...

  9. C#中Newtonsoft.Json 序列化和反序列化 时间格式

    步骤 引用 using Newtonsoft.Json; using Newtonsoft.Json.Converters; 格式配置 IsoDateTimeConverter timeFormat ...

  10. Redis在存取序列化和反序列化性能问题

    1. 问题场景 我们在使用Redis的时候经常会将对象序列化存储到Redis中,在取出的时候进行反序列化,如果对象过大在进行序列化和反序列化的时候会有一定性能问题.今天查看了CSRedis源码发现在S ...