【Dart】语言概述
// 导入(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】语言概述的更多相关文章
- Atitit.dart语言的特性 编译时js语言大总结
Atitit.dart语言的特性 编译时js语言大总结 1. 原型环境1 1.1. Dart可以编译js3 2. 第二个期待的理由是Dart的语言特性,没有什么特别特性好像,类似java c#一小时 ...
- Dart 语言简述
Dart是一种“结构化的web编程”语言,Dart编程语言在所有现代浏览器和环境中提供高性能.Dart是谷歌开发的计算机编程语言,后来被ECMA认定为标准. Dart重要的概念: 1.所有的东西都是对 ...
- 1-学习前言&C语言概述
[C语言]01-学习前言&C语言概述 参考自 http://www.cnblogs.com/mjios/archive/2013/03/12/2956508.html#label2 C语言是我 ...
- OpenGL官方教程——着色器语言概述
OpenGL官方教程——着色器语言概述 OpenGL官方教程——着色器语言概述 可编程图形硬件管线(流水线) 可编程顶点处理器 可编程几何处理器 可编程片元处理器 语言 可编程图形硬件管线(流水线) ...
- Delphi XE5教程1:语言概述
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...
- java基础---java语言概述
一.计算机编程的两种范型 1.面向过程的模型---具有线性执行特点,认为是代码作用于数据. 2.面向对象的模型---围绕它的数据(即对象)和为这个数据定义的接口来组织程序:实际上是用数据控制代码的访问 ...
- Dart语言入门(一)
Dart 语言介绍 Dart 是谷歌在 2011 年推出的编程语言,是一种结构化 Web 编程语言,允许用户通过 Chromium 中所整合的虚拟机(Dart VM)直接运行 Dart 语言编写的程序 ...
- Python语言——Python语言概述
Python语言概述 计算机语言概述 语言:交流工具,沟通媒介 计算机语言:人和计算机交流的工具,翻译官 Python语言简述 Python是计算机语言的一种 Python编程语言: 代码:人类语言, ...
- 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB
走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...
- [编程笔记]第一章 C语言概述
//C语言学习笔记 第一讲 C语言概述 第二讲 基本编程知识 第三讲 运算符和表达式 第四讲 流程控制 第五讲 函数 第六讲 数组 第七讲 指针 第八讲 变量的作用域和存储方式 第九讲 拓展类型 第十 ...
随机推荐
- 算法——单词拆分 II
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 链接: leetcode. 解题思路 ...
- mysql创建表分区
MySQL创建表分区 create table erp_bill_index( id int primary key auto_increment, addtime datetime ); inser ...
- Centos7下使用mail发送邮件
首先检测相关服务是否已安装[root@ProxyServer ~]# rpm -qa|grep mail libreport-plugin-mailx-2.0.9-19.el6.x86_64 mail ...
- 使用公钥私钥加密实现单点登录(SSO)
Oauth2+Gateway+springcloud+springcloud-alibaba-nacos+jwt ,使用公钥私钥加密实现单点登录(OSS) github地址点这里 注意事项 GET: ...
- css精髓:这些布局你都学废了吗?
前言 最近忙里偷闲,给自己加油充电的时候,发现自己脑海中布局这块非常的凌乱混杂,于是花了一些时间将一些常用的布局及其实现方法整理梳理了出来,在这里,分享给大家. 单列布局 单列布局是最常用的一种布局, ...
- Django之DRF-- API限速
什么场景下需要限制访问频次呢? 1)防爬虫:爬虫可能会在短时间内大量的访问服务接口,增加服务器压力 2)对于需要限制访问频次的接口 具体使用配置如下: 1,settings.py加入配置 REST_F ...
- ELK原理介绍
本篇转载自:https://www.cnblogs.com/aresxin/p/8035137.html 为什么使用日志系统: 日志系统记录了系统运行.业务处理的方方面面,在故障排除.业务分析.数据挖 ...
- [leetcode]187. Repeated DNA Sequences寻找DNA中重复出现的子串
很重要的一道题 题型适合在面试的时候考 位操作和哈希表结合 public List<String> findRepeatedDnaSequences(String s) { /* 寻找出现 ...
- 一文掌握XSS
目录 XSS跨站脚本攻击 1.什么叫跨站脚本攻击? 2.XSS跨站脚本攻击的原理 3.XSS跨站脚本攻击的目的是什么? 4.XSS跨站脚本攻击出现的原因 5.XSS跨站脚本攻击的条件 1.有输入有输出 ...
- 定期删除文件夹中的文件——C#
下面是自定义的一个函数,参数分别为:文件夹名称.文件后缀.保存天数 逻辑是获取当前系统的时间,和文件创建时间去作差,如果结果大于保存天数,就删除它 /// <summary> /// 定期 ...