draft |
---|
true |
Google codelabs的Dart笔记
class Bicycle {
int cadence;
int speed;
int gear;
}
void main() {
}
- Dart的主方法是
main()
或者main(List<String> args)
main()
方法处于最外层。Dart中可以在类的外部定义代码。变量、函数等都可以处于类的外部- Java中可以用
private
修饰符声明私有成员,Dart中没有private
、public
、protected
关键字 main()
和Bicycle
都没有用public
修饰符,Dart中所有把字符默认都是public- Dart惯例是用两个字符缩进,而不是四个
在Bicycle类中加入如下构造器:
Bicycle(this.cadence, this.speed, this.gear);
- 这个构造方法没有结构体,在Dart中可以这样
- 在构造方法参数列表中使用
this
是给实例变量赋值的便捷方式
void main() {
var bike = new Bicycle(2, 0, 1);
print(bike);
}
输出结果
Instance of 'Bicycle'
所有的Dart类都有toString()
方法,重写该方法:
@override
String toString() => 'Bicycle: $speed mph';
打印结果:
Bicycle: 0 mph
@override
注解,与Java中的类似- Dart中字符串可以用单引号或双引号
- 字符串插值
$variableName
或${variableName}
- 函数或方法可以用箭头标记法简化成单行(
=>
),类似lambda?
Java中只读的实现:private + getter()
Dart中没有private,以下划线开头的变量为私有
speed
改为_speed
并为Bicycle类加一个getter:
int get speed => _speed;
- Dart中下划线开头的为私有
- Dart默认为所有公开变量提供隐式的getter和setter
class Bicycle {
int cadence;
int _speed;
int gear;
Bicycle(this.cadence, this._speed, this.gear);
int get speed => _speed;
void applyBrake(int decrement) {
_speed -= decrement;
}
void speedUp(int increment) {
_speed += increment;
}
@override
String toString() => 'Bicycle: $_speed mph';
}
main() {
var bike = new Bicycle(2, 0, 1);
print(bike);
}
矩形
import 'dart:math';
class Rectangle {
int width;
int height;
Point origin;
}
Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});
this.origin
等在构造方法声明中以简写的方式赋值this.origin
,this.width
,this.height
是可选的命名参数。命名参数用大括号包围this.origin = const Point(0, 0)
是为origin
指定默认值Point(0,0)
.默认值必须是编译时常量
@override
String toString() =>
'Origin: (${origin.x}, ${origin.y}), width: $width, height: $height';
main() {
print(new Rectangle(origin: const Point(10, 20), width: 100, height: 200));
print(new Rectangle(origin: const Point(10, 10)));
print(new Rectangle(width: 200));
print(new Rectangle());
}
// 输出结果
// Origin: (10, 20), width: 100, height: 200
// Origin: (10, 10), width: 0, height: 0
// Origin: (0, 0), width: 200, height: 0
// Origin: (0, 0), width: 0, height: 0