// 导入(import)
// 导入核心库 //导入外部库
import 'package:test_api/test_api.dart'; // 导入文件
//import 'path/test.dart'; // 每个应用都有一个 main() 函数
void main() {
// 你好,世界
// 使用顶层函数 print() 来将一段文本输出显示到控制台
print('Hello, World!'); // 变量
// 虽然 Dart 是代码类型安全的语言,但是由于其支持类型推断,因此大多数变量不需要显式地指定类型
var name = '天空之城';
var year = 1977;
var antennaDiameter = 3.7;
var flybyObjects = ['木星', '土星', '天王星', '海王星'];
var image = {
'tags': ['木星'],
'url': '//path//ex.jpg',
}; // 流程控制语句
// Dart 支持常用的流程控制语句
if (year >= 2001) {
print('21世纪');
} else if (year >= 1901) {
print('20世纪');
} for (var object in flybyObjects) {
print(object);
} for (var month = 1; month <= 12; ++month){
print(month);
} while (year < 2016) {
year += 1;
} // 调用函数
var result = fibonacci(20);
print(result); // =>(胖箭头)
// 这种简写语法用于仅包含一条语句的函数。该语法在将匿名函数作为参数传递时非常有用
flybyObjects.where((name) => name.contains('土星')).forEach(print); // 注释
// 这是一个普通的单行注释。
/// 这是一个文档注释。
/// 文档注释用于为库、类以及类的成员添加注释。
/// 像 IDE 和 dartdoc 这样的工具可以专门处理文档注释。这很重要!
/* 也可以像这样使用单斜杠和星号的注释方式 */ // 使用类
var voyager = Spacecraft('旅行者一号', DateTime(1977, 5, 5));
voyager.describe(); var voyager3 = Spacecraft.unlaunched('旅行者三号');
voyager3.describe(); } // 函数
// 建议为每个函数的参数以及返回值都指定类型
int fibonacci(int n) {
if (n == 0 || n == 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
} // 类
// 展示了一个包含三个属性、两个构造函数以及一个方法的类。其中一个属性不能直接赋值,因此它被定义为一个 getter 方法(而不是变量)。
class Spacecraft {
String name;
DateTime launchDate; // 构造函数,带有可以直接为成员变量赋值的语法糖
Spacecraft(this.name, this.launchDate) {
// 实现初始化代码
} // 命名构造函数,转发到默认构造函数
Spacecraft.unlaunched(String name) : this(name, null); // 只读的非final的属性
int get launchYear => launchDate?.year; // 方法
void describe() {
print('宇宙飞船:$name');
if (launchDate != null) {
int years = DateTime.now().difference(launchDate).inDays ~/ 365;
print('发射时间:$launchYear ($years years ago)');
} else {
print('尚未发射!');
}
} } // 继承类,Dart支持单继承
class Orbiter extends Spacecraft {
num altitude;
Orbiter(String name, DateTime launchDate, this.altitude) : super(name, launchDate);
} // Mixins, 它是一种在多个类层次结构中重用代码的方法
class Piloted {
int astronauts = 1;
void describeCrew() {
print('宇航员人数:$astronauts');
}
} // 使用 Mixin 的方式继承这个类就可将该类中的功能添加给其它类
class PilotedCraft extends Spacecraft with Piloted {
//
} // 接口和抽象类
// Dart 没有 interface 关键字。相反,所有的类都隐式定义了一个接口。因此,任意类都可以作为接口被实现。
class MockSpaceship implements Spacecraft {
//
}
// 创建一个被任意具体类扩展(或实现)的抽象类。抽象类可以包含抽象方法(不含方法体的方法)。
abstract class Describable {
void describe();
void describeWithEmphasis() {
print('=========');
describe();
print('=========');
}
} // 异步
// 使用 async 和 await 关键字可以让你避免回调地狱(Callback Hell)并使你的代码更具可读性
const oneSecond = Duration(seconds: 1);
// ...
Future<void> printWithDelay(String message) async {
await Future.delayed(oneSecond);
print(message);
}
// async 和 await 关键字有助于使异步代码变得易于阅读
Future<void> createDescriptions(Iterable<String> objects) async {
for (var object in objects) {
try {
var file = File('$object.txt');
if (await file.exists()) {
var modified = await file.lastModified();
print('文件$object已经存在,它上一次修改时间为 $modified。');
continue;
}
await file.create();
await file.writeAsString('开始在此文件中描述 $object。');
} on IOException catch (e) {
print('不能为 $object 创建描述:$e');
}
}
} // 也可以使用 async* 关键字,其可以为你提供一个可读性更好的方式去生成 Stream。
Stream<String> report(Spacecraft craft, Iterable<String> objects) async* {
for (var object in objects) {
await Future.delayed(oneSecond);
yield '${craft.name} 由 $object 飞行。';
}
} // 异常
// 使用 throw 关键字抛出一个异常
if (astronauts == 0) {
throw StateError('没有宇航员');
}
// 使用 try 语句配合 on 或 catch(两者也可同时使用)关键字来捕获一个异常
try {
for (var object in flybyObjects) {
var description = await File('$object.txt').readAsString();
print(description);
}
} on IOException catch (e) {
print('无法描述该对象:$e');
} finally {
flybyObjects.clear();
} // 上述代码是异步的;同步代码以及异步函数中得代码都可以使用 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. 我的js公共函数合集

    export default {     isDefin: function(value) { //数据是否被定义         if (value == null || value == &quo ...

  2. 使用HBase Shell命令

    使用HBase Shell命令 或 使用HBase Java API完成: 列出HBase所有的表的相关信息,例如表名: 在终端打印出指定的表的所有记录数据: 向已经创建好的表添加和删除指定的列族或列 ...

  3. STL——容器(deque) deque 的大小

    1. deque 的大小 deque.size();              //返回容器中元素的个数 1 #include <iostream> 2 #include <dequ ...

  4. Hive基础语法5分钟速览

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过 ...

  5. AWT02-ContainerAPI

    1.体系 Object -Component -Container Window:窗口容器 Frame:创建窗口 Dialog:创建对话框 Panel:内嵌容器 Applet ScrollPane:含 ...

  6. 自顶向下redis4.0(3)命令与dict

    redis4.0的命令 简介 目录 redis4.0的命令 简介 正文 redisCommand与redisCommandTable 初始化命令 执行命令 set指令与字典 参考文献 正文 redis ...

  7. SSO的通用标准OpenID Connect

    目录 简介 OpenID Connect是什么 ID Token 请求ID Token ID Token可以做什么 Open Connect认证码授权的例子 User Info 简介 OpenID C ...

  8. Kubernetes【K8S】(三):资源清单

    K8S中的资源 K8S中所有的内容都抽象为资源,资源实例化之后叫做对象.一般使用yaml格式的文件来创建符合我们预期的pod,这样的yaml文件我们一般成为资源清单. 名称空间级资源 工作负载型资源( ...

  9. WP | BUGKU 论剑

    题目:bugku Misc论剑 第一步:在winhex里分析 发现文件头有两个 两个jpg文件中间还有一段二进制码 在kali里分离出两个一样jpg图片,但是没有什么发现 二进制码解出来也没有flag ...

  10. Mysql5.7.20安装手记

    Mysql到5.7之后安装较之前有了很大的不同,特别是解压缩版,可能安装速度较之前有所减少,但对于我们这种一直使用5.5的我来说不知道步骤还真是挺费劲的.下面详细记一下我安装的过程. 1.下载mysq ...