一个Java开发快速入门Darthtml
一个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的基础规则。框架
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}'); } }
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()); }
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中经常使用的写法,可是在阅读代码过程当中仍然会有不少让你困惑的内容,这是时候,若是你须要更全的语法规则,能够参考官方文档。