Hello World
void main() {
print('Hello, World!');
}
执行结果如下:
flutter: Hello, World!
变量
Dart 代码是类型安全的,但也支持类型判断,大多数变量是不需要显示指定类型的
var name = 'Voyager I';
var year = 1977;
var antennaDiameter = 3.7;
var flybyObjects = ['Jupiter','Saturn','Uranus','Neptune'];
var image = {
'tag':['saturn'],
'url':'//path/to/saturn.jpg'
};
流程控制语句
if (year >= 2001) {
print('21st century');
} else if (year >= 1901) {
print('20th century');
}
for (var object in flybyObjects) {
print(object);
}
for (int month = 1; month <= 12; month++) {
print(month);
}
while (year < 2016) {
year += 1;
}
函数
int fibonacci(int n) {
if (n == 0 || n == 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
var result = fibonacci(20);
=>(箭头)语法用于仅包含一条语句的函数。该语法在匿名函数作为函数参数情况中 非常有用。
flybyObjects.where((name) => name.contains('turn')).forEach(print);
类
下面是一个关于类的示例,这个类包含三个属性,两个构造函数,以及一个方法。 其中一个属性不能被直接赋值,因此它被定义为一个 getter 方法(而不是变量)。
class Spacecraft {
String name;
DateTime launchDate;
// 构造函数,使用语法糖设置成员变量。
Spacecraft(this.name, this.launchDate) {
// 这里编写初始化代码。
}
// 命名构造函数,最终调用默认构造函数。
Spacecraft.unlaunched(String name) : this(name, null);
int get launchYear =>
launchDate?.year; // read-only non-final 属性
// 方法。
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');
}
}
}
类的使用
var voyager = Spacecraft('Voyager I', DateTime(1977, 9, 5));
voyager.describe();
var voyager3 = Spacecraft.unlaunched('Voyager III');
voyager3.describe();
扩展类(继承)
Dart 支持单继承。
class Orbiter extends Spacecraft {
num altitude;
Orbiter(String name, DateTime launchDate, this.altitude)
: super(name, launchDate);
}
Mixin
Mixin 是一种在多个类层次结构中重用代码的方法。下面的类可以作为一个 mixin :
class Piloted {
int astronauts = 1;
void describeCrew() {
print('Number of astronauts: $astronauts');
}
}
将 mixin 的功能添加到一个类中,只需要继承这个类并 with 这个 mixin 。
class PilotedCraft extends Spacecraft with Piloted {
// ···
}
现在 飞行器PilotedCraft 有了 astronauts 字段以及 describeCrew() 方法。
接口和抽象类
Dart 没有 interface 关键字。相反,所有的类都隐式定义了一个接口,因此,任意类都可以作为接口被实现。
class MockSpaceship implements Spacecraft {
// ···
}
创建一个抽象类,这个类可以被一个具体的类去扩展(或实现)。抽象类可以包含抽象方法(只声明未实现)。
abstract class Describable {
void describe();
void describeWithEmphasis() {
print('=========');
describe();
print('=========');
}
}
任意一个扩展了 Describable 的具体类都拥有 describeWithEmphasis() 方法,这个方法调用了具体类中实现的 describe() 。
网友评论