一个Java开发快速入门Dart

目录

一个Java开发快速入门Darthtml

Flutter使用简报前端

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

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

吐槽

    很久没写博客了,意识到本身的惫懒,心里至关愧疚……编程

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

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

前言

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

    本文的后续内容彻底是按照 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的函数式编程吧。ide

    看懂了上面的基本代码,你就能够说已经掌握了dart中经常使用的写法,可是在阅读代码过程当中仍然会有不少让你困惑的内容,这是时候,若是你须要更全的语法规则,能够参考官方文档

相关文章
相关标签/搜索