一个Java开发快速入门Dart

一笑奈何 提交于 2019-11-26 17:29:49

目录

一个Java开发快速入门Dart

Flutter使用简报

一个Android开发快速入门Flutter(一)

一个Android开发快速入门Flutter (二) 

吐槽

    好久没写博客了,意识到自己的惫懒,内心相当愧疚……

    日子不好混,作为Android的移动开发,在某公司日子一天比一天难过,app各大模块纷纷转用前端weex框架,native端移动开发几乎要失业了。

    oschina都代码格式都不支持dart,很急。

前言

    内心焦虑,于是想着学点什么充实下自己吧,前端框架的选择挺多的,weex是一个(资料是真的少……),另一个我颇为看好的就是Flutter。Flutter的主要语言是Dart (我真是气啊,为什么没个东西出来都要用一些奇奇怪怪的语言,你用python不行?你tensorflow怎么就用python呢!)。那么学习Dart的一些基本语法就是相当必要的了。另外,据说谷歌正在开发,不知道能不能取代Android的Fuchsia前端用的就是Flutter框架了。这都不学?等着被淘汰吗?

    本文的后续内容完全是按照 https://codelabs.flutter-io.cn/codelabs/from-java-to-dart-cn/index.html#0 这里一点点写下来的,这里只是将知识点直接用注释的方式写入了dart代码中,更方便看而已,能够让一个java开发者急速了解dart的基础规则。

正文

demo1

class Bicycle {
  //dart没有 private ,public 等关键字,默认都为public
  int cadence;
  // 前面加 _表示只读,并且private(仅在该文件内可用)
  // 如果不设置初始值,默认是null
  // *** 注意int类型默认也是null。***
  int _speed = defalutSpeed;
  int gear;
  Bicycle(this.cadence, this.gear); // 等同于 Bicycle(int cadence,int gear){.....}

  //默认的dart会为所有dart公开变量提供setter和getter方法
  //非公开变量需要自己定义getter 和 setter方法
  int get speed => _speed;
  /*
   * 只有一行代码的时候可以使用 =>
   * 所有类都有toString方法。
   * */
  @override //重写关键字
  //字符串可以使用单引号或者双引号。
  //字符串内部可以使用 ${} 或者只是$ 进行格式化
  String toString() => 'Bicycle: $_speed mph';

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

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

//在类中可以直接使用外部定义的变量。
int defalutSpeed = 100;

/**
 * main() 方法是 Dart 的主方法,如果你需要访问命令行传递过来的参数。
 * 可以使用 main(List<String> args 方法。
 * 
 * 在 Dart 中你可以在类之外编写代码,变量、方法、存取方法都可以独立于类之外维持生命周期。
 *
 * */
void main() {
  //new 关键字可选,变量用var声明,类型自动推断
  // final变量用final声明 ,final var 必须省略成 final
  final bike = Bicycle(2, 1);
  print(bike.speed);
  print(bike);
  for (int i = 0; i < 5; i++) {
    print('hello ${i + 1}');
  }
}

 

正文2

    

import 'dart:math';

class Rectangle {
  int width;
  int height;
  Point origin;
  
  /**
   * 敲黑板了,dart中经常使用这种定义,弄得人很懵.
   * 嵌套在闭合的花括号中 ({}) ,用来表示它们是可选的命名参数。
   * 这样的赋值代码表明给实例变量提供了默认的值。(必须有 {} )
   * 甚至你可以使用类似 Rectangle(this.origin , {this.width = 0, this.height = 0}); 这样前边必选,后面可选
   * 然后代码调用 Rectangle(const Point(10, 20), width: 100, height: 200) ,前面的参数没有名字
   */
  Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});
  
  @override
  String toString()=>'Origin: (${origin.x}, ${origin.y}), width: $width, height: $height';
}

main() {
  //调用构造函数,但是对参数进行了选择。依稀记得kotlin中也有类似用法哦。
   print(Rectangle(origin: const Point(10, 20), width: 100, height: 200));
  print(Rectangle(origin: const Point(10, 10)));
  print(Rectangle(width: 200));
  print(Rectangle());
}

正文3

import 'dart:math';

//这里的abstract和java中的类似
abstract class Shape {
  //相当于abstract方法,另外get关键字表示是一个get方法,实现可以直接 shape.area这样获取值。
  num get area; //num是 数值类型的基类,有两个子类 int 和 double
  num getAA(){return 1;} 
}

//implements继承接口
class Circle implements Shape {
  final num radius;
  Circle(this.radius);
  
  @override //关键字可以省略
  num get area => pi * pow(radius, 2);
  // 使用了implements关键字继承,相当于继承接口
  // 必须重写,而且父类中的实现是被忽略的
  @override
  num getAA(){return 1;}
  
}

//使用 extends继承,和java中的继承一样。
class CircleMock extends Shape {
  final num radius;
  CircleMock(this.radius);
  num get area => pi * pow(radius, 2);
}

//总结,使用implements和extends集成一个类是不同的
//dart只能有一个extends类,但是可以有多个interface和java一样

/**
 * 可以看到,虽然circle是一个普通类,但是还是可以使用implements
 * 但是circle内部所有的实现都被抛弃了,需要在子类重新实现
 */
class CircleMock2 implements Circle{
  @override
  num get area => null;

  @override
  num getAA() {
    return null;
  }

  @override
  num get radius => null;
  
}

class Square implements Shape {
  final num side;
  Square(this.side);
  num get area => pow(side, 2);
  num getAA(){return 1;}
}

Shape shapeFactory(String type) {
  if (type == 'circle') return Circle(2);
  if (type == 'square') return Square(2);
  throw 'Can\'t create $type.'; //抛出错误
}

main() {
  final circle = shapeFactory('circle');
  final square = shapeFactory('square');
  print(circle.area);
  print(square.area);
}

结语

    文档后面写的函数式编程是个鸡脖?? 质量太低了,所以这里省略了,因为如果你知道函数式编程,那么那篇文档就是废话,如果你不知道函数式编程,那么,那篇文档就是废话。等到后面进阶的时候补上dart的函数式编程吧。

    看懂了上面的基本代码,你就可以说已经掌握了dart中常用的写法,但是在阅读代码过程中仍然会有很多让你困惑的内容,这是时候,如果你需要更全的语法规则,可以参考官方文档

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!