菜鸡程序媛之Dart学习笔记

This passage may update with timeline.

2019.03.07 Update


1. 基础篇

1⃣️ 初始化
class Bicycle {
  int cadence;
  int speed;
  int gear;
}

void main() {
}
  • main() 方法是 Dart 的主方法;
  • 如果你需要访问命令行传递过来的参数,可以使用 main(List<String> args 方法;
  • main() 方法存在于最外层的作用域;
  • 在 Dart 中,可以在类之外编写代码,变量、方法、存取方法,它们都可以独立于类之外维持生命周期;
  • Java 中使用了 pubilc、private、protected 作为声明成员变量可访问性的标记;Dart 中使用_ 标记为变量为私有,通过改变变量名来实现将变量标识为只读;
  • 无论是main() 还是其他类都声明为 public ,默认情况下都是 public 的;
  • Dart 使用了 2 个字符长度作为缩进, Dart 的格式化工具 dartfmt 能够自动调整缩进;
2⃣️ 构造函数
Bicycle(this.cadence, this.speed, this.gear);
  • 在 Dart 中,构造函数没有方法体是合法的,与规范方法体是相同功效的;
  • 但没有方法体的构造函数后必须书写分号,否则,告诉你"A function body must be provided.";
  • 省略方法体使得 Dart 中能够在构造函数的参数中使用 this 直接对实例变量进行赋值,不用再编写多余的代码;
3⃣️ new/final
void main() {
 final bike = Bicycle(2, 0, 1);
  print(bike);
}
  • Dart 2 中,new 变为可选;
  • 当某个变量的值确信不不会发生变化时,可将 var 改为 final;
4⃣️ @override
@override
String toString() => 'Bicycle: $speed mph';

Or

@override
  RandomWordsState createState() => new RandomWordsState();
  • @override 表示重写某个方法或某个类,如果该复写不成功,编译器就会报错;
  • Dart 的许多特性与 Javascript 及 Css 类似,故可以使用单引号或者双引号进行字符串的声明;
  • 可以在字符串内使用${expression} 的方式来实现字符串模板的效果;如果该表达式仅仅是一个标识符,还可以去掉花括号用 $variableName 表示;
  • 针对只有一行的方法可以使用 => 来简化方法的书写;
5⃣️ 访问方式
class Bicycle {
  int cadence;
  int _speed = 0;
  int get speed => _speed;
  int gear;

  Bicycle(this.cadence, this.gear);

  void applyBrake(int decrement) {
    _speed -= decrement;
  }

  void speedUp(int increment) {
    _speed += increment;
  }

  @override
  String toString() => 'Bicycle: $_speed mph';
}

void main() {
  var bike = Bicycle(2, 1);
  print(bike);
}
  • Dart 中声明的变量的访问方式与Js中对象的属性访问方式(Java中的类 + 变量名)的访问方式类似;
  • 通过int get speed => _speed; 将 speed 作为实例变量;

2. 函数差异

1⃣️ Java
  • 支持函数的重载,相同函数名时通过返回值的不同、或参数的不同来进行重载;
  • 没有方法体会报错;
2⃣️ JavaScript
  • 没有函数重载的概念,因为函数接受的参数是可变的,根据传入的个数来进行对应操作;
  • 可以没有方法体,函数接受的参数可以包含任意类型(包括构造方法及函数等);
3⃣️ Dart
  • 同JavaScript,不支持重载,但可以通{ } 根据输入的可选参数,进行相应不同的print;
@override
String toString() =>
      'Origin: (${origin.x}, ${origin.y}), width: $width, height: $height';

main() {
  print(Rectangle(origin: const Point(10, 20), width: 100, height: 200));
  print(Rectangle(origin: const Point(10, 10)));
  print(Rectangle(width: 200));
  print(Rectangle());
}
  • 可以没有方法体,函数接受的参数可以包含任意类型(包括构造方法及函数等);
Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});
  • this.origin, this.widththis.height 直接对类中的实例变量进行赋值;
  • this.origin, this.widththis.height 嵌套在闭合的{ } 中,表示可选的命名参数;
  • this.origin = const Point(0, 0) 表明给实例变量 origin 赋予了const静态/默认值 Point(0,0)const静态/默认值必须是在编译期就可以确定的常量;

3. 抽象 / 工厂

1⃣️ abstract

Java

abstract class Shape {
  num get area;
}

class Circle implements Shape {
  final num radius;
  Circle(this.radius);
  num get area => pi * pow(radius, 2);
}

class Square implements Shape {
  final num side;
  Square(this.side);
  num get area => pow(side, 2);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值