Dart Language samples
Hello World
Every app has a main()
function. To display text on the console, you can use the top-level print()
function:
void main() {
print('Hello, World!');
}
Variables
Even in type-safe Dart code, most variables don’t need explicit types, thanks to type inference:
var name = 'Voyager I';
var year = ;
var antennaDiameter = 3.7;
var flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];
var image = {
'tags': ['saturn'],
'url': '//path/to/saturn.jpg'
};
Read more about variables in Dart, including default values, the final
and const
keywords, and static types.
Control flow statements
Dart supports the usual control flow statements:
if (year >= ) {
print('21st century');
} else if (year >= ) {
print('20th century');
} for (var object in flybyObjects) {
print(object);
} for (int month = ; month <= ; month++) {
print(month);
} while (year < ) {
year += ;
}
Read more about control flow statements in Dart, including break
and continue
, switch
and case
, and assert
.
Functions
We recommend specifying the types of each function’s arguments and return value:
int fibonacci(int n) {
if (n == || n == ) return n;
return fibonacci(n - ) + fibonacci(n - );
} var result = fibonacci();
A shorthand =>
(arrow) syntax is handy for functions that contain a single statement. This syntax is especially useful when passing anonymous functions as arguments:
flybyObjects.where((name) => name.contains('turn')).forEach(print);
Besides showing an anonymous function (the argument to where()
), this code shows that you can use a function as an argument: the top-level print()
function is an argument to forEach()
.
Read more about functions in Dart, including optional parameters, default parameter values, and lexical scope.
Comments
Dart comments usually start with //
.
// This is a normal, one-line comment. /// This is a documentation comment, used to document libraries,
/// classes, and their members. Tools like IDEs and dartdoc treat
/// doc comments specially. /* Comments like these are also supported. */
Read more about comments in Dart, including how the documentation tooling works.
Imports
To access APIs defined in other libraries, use import
.
// Importing core libraries
import 'dart:math'; // Importing libraries from external packages
import 'package:test/test.dart'; // Importing files
import 'path/to/my_other_file.dart';
Read more about libraries and visibility in Dart, including library prefixes, show
and hide
, and lazy loading through the deferred
keyword.
Classes
Here’s an example of a class with three properties, two constructors, and a method. One of the properties can’t be set directly, so it’s defined using a getter method (instead of a variable).
class Spacecraft {
String name;
DateTime launchDate; // Constructor, with syntactic sugar for assignment to members.
Spacecraft(this.name, this.launchDate) {
// Initialization code goes here.
} // Named constructor that forwards to the default one.
Spacecraft.unlaunched(String name) : this(name, null); int get launchYear =>
launchDate?.year; // read-only non-final property // Method.
void describe() {
print('Spacecraft: $name');
if (launchDate != null) {
int years =
DateTime.now().difference(launchDate).inDays ~/
365;
print('Launched: $launchYear ($years years ago)');
} else {
print('Unlaunched');
}
}
}
You might use the Spacecraft
class like this:
var voyager = Spacecraft('Voyager I', DateTime(1977, 9, 5));
voyager.describe(); var voyager3 = Spacecraft.unlaunched('Voyager III');
voyager3.describe();
Read more about classes in Dart, including initializer lists, optional new
and const
, redirecting constructors, factory
constructors, getters, setters, and much more.
Inheritance
Dart has single inheritance.
class Orbiter extends Spacecraft {
num altitude;
Orbiter(String name, DateTime launchDate, this.altitude)
: super(name, launchDate);
}
Read more about extending classes, the optional @override
annotation, and more.
Mixins
Mixins are a way of reusing code in multiple class hierarchies. The following class can act as a mixin:
class Piloted {
int astronauts = 1;
void describeCrew() {
print('Number of astronauts: $astronauts');
}
}
To add a mixin’s capabilities to a class, just extend the class with the mixin.
class PilotedCraft extends Spacecraft with Piloted {
// ···
}
PilotedCraft
now has the astronauts
field as well as the describeCrew()
method.
Read more about mixins.
Interfaces and abstract classes
Dart has no interface
keyword. Instead, all classes implicitly define an interface. Therefore, you can implement any class.
class MockSpaceship implements Spacecraft {
// ···
}
Read more about implicit interfaces.
You can create an abstract class to be extended (or implemented) by a concrete class. Abstract classes can contain abstract methods (with empty bodies).
abstract class Describable {
void describe(); void describeWithEmphasis() {
print('=========');
describe();
print('=========');
}
}
Any class extending Describable
has the describeWithEmphasis()
method, which calls the extender’s implementation of describe()
.
Read more about abstract classes and methods.
Async
Avoid callback hell and make your code much more readable by using async
and await
.
const oneSecond = Duration(seconds: );
// ···
Future<void> printWithDelay(String message) async {
await Future.delayed(oneSecond);
print(message);
}
The method above is equivalent to: Future<void> printWithDelay(String message) {
return Future.delayed(oneSecond).then((_) {
print(message);
});
}
As the next example shows, async
and await
help make asynchronous code easy to read.
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(
'File for $object already exists. It was modified on $modified.');
continue;
}
await file.create();
await file.writeAsString('Start describing $object in this file.');
} on IOException catch (e) {
print('Cannot create description for $object: $e');
}
}
}
You can also use async*
, which gives you a nice, readable way to build streams.
Stream<String> report(Spacecraft craft, Iterable<String> objects) async* {
for (var object in objects) {
await Future.delayed(oneSecond);
yield '${craft.name} flies by $object';
}
}
Read more about asynchrony support, including async functions, Future
, Stream
, and the asynchronous loop (await for
).
Exceptions
To raise an exception, use throw
:
if (astronauts == ) {
throw StateError('No astronauts.');
}
To catch an exception, use a try
statement with on
or catch
(or both):
try {
for (var object in flybyObjects) {
var description = await File('$object.txt').readAsString();
print(description);
}
} on IOException catch (e) {
print('Could not describe object: $e');
} finally {
flybyObjects.clear();
}
Note that the code above is asynchronous; try
works for both synchronous code and code in an async function.
Read more about exceptions, including stack traces, rethrow
, and the difference between Error and Exception.
Dart Language samples的更多相关文章
- Dart 基础重点截取 Dart 2 20180417
官网教程 https://www.dartlang.org/guides/language/language-tour dart是一个单线程的语言,没有多线程 Final and const If y ...
- dart之旅(一)
前言 最近在看 dart 了,本着 "纸上得来终觉浅,绝知此事 markdown" 的原则,准备边学边写,写一个系列,这是第一篇.学习过程中主要是参考 A Tour of the ...
- Dart语法学习
Dart语法学习 目录 参考资料 语言特性 关键字 变量与常量 数据类型 运算符 operators 控制流程语句 异常 Exceptions 函数 Function 类 Class 类-方法 类-抽 ...
- Flutter学习笔记(6)--Dart流程控制语句
如需转载,请注明出处:Flutter学习笔记(5)--Dart流程控制语句 条件语句:if.if...elseif.if...elseif...else ; ) { print('优秀'); } &g ...
- Dart语言学习(十) Dart流程控制语句
一.条件语句:if.if...elseif.if...elseif...else int score = 95; if (score >=90) { print('优秀'); } else if ...
- Dart Memo for Android Developers
Dart Memo for Android Developers Dart语言一些语法特点和编程规范. 本文适合: 日常使用Kotlin, 突然想写个Flutter程序的Android程序员. Dar ...
- Dart 学习
语言特性 Dart所有的东西都是对象, 即使是数字numbers.函数function.null也都是对象,所有的对象都继承自Object类. Dart动态类型语言, 尽量给变量定义一个类型,会更安全 ...
- Cheatsheet: 2013 09.10 ~ 09.21
.NET Lucene.Net – Custom Synonym Analyzer Using FiddlerCore to Capture Streaming Audio Immutable col ...
- linq字符串搜索条件,排序条件-linq动态查询语句 Dynamic LINQ
在做搜索和排序的时候,往往是前台传过来的字符串做条件,参数的数量还不定,这就需要用拼sql语句一样拼linq语句.而linq语句又是强类型的,不能用字符串拼出来. 现在好了,有个开源的linq扩展方法 ...
随机推荐
- Vue入门到出门
原来微信小程序的js跟这个差不多啊.这个也不像jQuery那种完全是为了方便写js的感觉,难道算前端框架?还不太了解,总之要先看看,然后用HBuilder快点上手做点东西…… ------------ ...
- 第82题:删除排序链表中的重复元素II
一. 问题描述 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5 ...
- ppt打不开,显示发现文件中的内容有问题。可尝试修复此演示文稿
ppt打不开,显示发现文件中的内容有问题.可尝试修复此演示文稿 PPT发现要打开的文件有问题,修复后无法打开该文件 解决方法: 主要是因为文件是网络下载的,office自动锁定了文件(默认不可编辑). ...
- 快捷键IntelliJ IDEA For Mac
http://www.cnblogs.com/wxd0108/p/5295017.html Mac键盘符号和修饰键说明 ⌘ Command ⇧ Shift ⌥ Option ⌃ Control ↩︎ ...
- BZOJ 3925: [Zjoi2015] 地震后的幻想乡(概率DP)
这里有一篇很好很强的博客%%% YouSiki大佬的博客 多理解一会就行了- 代码 #include <bits/stdc++.h> using namespace std; typede ...
- JQuery实践--实用工具函数
实用工具函数,$命名空间的一系列函数,但不操作包装集.它要么操作除DOM元素以外的Javascript对象,要么执行一些非对象相关的操作. JQuery的浏览器检测标志可在任何就绪处理程序执行之前使用 ...
- JSON格式数据
1. 基础知识 1. 什么是JSON格式? JSON格式是现在网站数据交互的标准数据格式,写入标准. 取代原来的XML:符合JS原生语法,可以被直接解析,不需要额外的解析文件. 书写简单,一目了然 2 ...
- OSI七层协议模型
OSI七层模型详解 TCP/IP协议 链接:https://www.nowcoder.com/questionTerminal/b2ccf60bbb13483b94b4bffe200b4f3c 来源: ...
- Python3操作YAML文件
数据及配置文件之争 数据及文件通常有三种类型: 配置文件型:如ini,conf,properties文件,适合存储简单变量和配置项,最多支持两层,不适合存储多层嵌套数据 表格矩阵型:如csv,exce ...
- go区分操作系统
package main import ( "fmt" "runtime" ) func main() { fmt.Println("Go runs ...