美文网首页
从Java 到 Dart

从Java 到 Dart

作者: 城平京 | 来源:发表于2019-05-24 11:03 被阅读0次

1 Dart中的Int 相当于Java中的包装类型,其实Dart中一切都是对象,没有Java中的基本数据类型

void main() {
    int count;
    print(count);
}

count = null

2 定义字符串既可以使用单引号,也可以使用双引号,这个和JavaScript一致,和Java不一样

3 数组(在Dart中是List,因为Dart中一些都是对象,所以也没有Java中的数组了)和Map和JavaScript一致, 另外还有Set类型(元素不重复)

var names = ['张三','李四','王五']; // List

var gifts= {
    'first':'partridge',
    'second':'turtledoves',
    'fifth': 'golden rings'
}

var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'}; // Dart2.2 中才引入了 Set 字面量 

List Set Map这些容器类都支持泛型,并且都可以用const修饰,定义成编辑期常量

4 有闭包(函数内部访问外包的变量,外包的变量无法得到释放)

5 没有===,这个和Java一致

6 数字类型只有int 和 double

7 构造函数, 和Java很接近

class Point {
    num x, y;
  // Syntactic sugar for setting x and y
  // before the constructor body runs.
    Point(this.x, this.y);
}

void main() {
  var point = new Point(3, 4);
  print("x : ${point.x}");
  print("y : ${point.y}");
}

这样写构造函数其实是一种语法糖,完整写法是

  Point(num x, num y) {
    this.x = x;
    this.y = y;
  }

8 命名构造函数,我的理解就是有名字的构造函数,JAVA中的构造函数没有名字,因此经常会用静态工厂方法来创建对象,在Dart中改进了这一点

class Point {
  num x, y;

  // The main constructor for this class.
  Point(this.x, this.y);

  // Delegates to the main constructor.
  Point.alongXAxis(num x) : this(x, 0);
}


void main() {
  
  var point = Point.alongXAxis(4);
  print("x : ${point.x}");
  
}

9 ?.和is 运算符,这个和Kotlin一致

10 创建一个Class的时候new是可选的,new Point(2, 2) 等同于 Point(2, 2)这个和Kotlin类似,不过Kotlin是强制省略
更新一下new 在Dart2中已经是不推荐的了,为得是Flutter声明布局的时候更清晰

Widget build(BuildContext context) {
  return Row(
    children: [
      RaisedButton(
        child: Text('Increment'),
      ),
      Text('Click!'),
    ],
  );
}

不推荐

Widget build(BuildContext context) {
  return new Row(
    children: [
      new RaisedButton(
        child: new Text('Increment'),
      ),
      new Text('Click!'),
    ],
  );
}

11 const 构造函数,相当于创建一个不可变类的实例,一旦创建,类中的属性都不可以改变,个人非常喜欢的一种设计,
如果需要改变属性,可以重新创建一个新的实例
同样在Dart2中const也建议尽量在常量上下文的环境中省去

const primaryColors = [
  Color("red", [255, 0, 0]),
  Color("green", [0, 255, 0]),
  Color("blue", [0, 0, 255]),
];

不推荐

const primaryColors = const [
  const Color("red", const [255, 0, 0]),
  const Color("green", const [0, 255, 0]),
  const Color("blue", const [0, 0, 255]),
];

12 常量对象?JAVA中好像没有类似的实现,有点接近于static 代码块(这个特性可以用来实现享元模式,用来实现类似java中的integer缓存了-128 到 127)

class User {
  final String name;
  
  const User(this.name);
}


void main() {
  
 var a = const User("Dean");
 var b = const User("Dean");
 print(a==b); // true
  
}

注意上面的代码如果把User前的const去掉,就会打印false了

13 级联符号 .. 一种语法糖,帮你省去创建临时变量的步骤,不知道有多少人会用,反正我估计是不会去用,我建议大家也别去用,可读性不好

querySelector('#confirm') // Get an object.
  ..text = 'Confirm' // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

等价于

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

14 const 编译期常量,final 只能赋值一次,这个和java也差不多,只不过JAVA编辑期常量用的是 static

15

相关文章

  • 从Java 到 Dart

    1 Dart中的Int 相当于Java中的包装类型,其实Dart中一切都是对象,没有Java中的基本数据类型 2 ...

  • Flutter - Weight 入门

    从 C 开始,我们进步到 java,再到 kotlin,现在又迎来了 Dart、Flutter,还要去学学 pyt...

  • Dart和Java及JavaScript对比

    Dart vs Java 客观的来讲,Dart在语法层面确实比Java更有表现力;在VM层面,Dart VM在内存...

  • Flutter学习资料

    一、Dart学习资料 1.语言 Dart编程中文语言网 Dart学习笔记 极客学院Dart教程汇总 为 Java ...

  • dart异步编程

    dart是单线程 一定要记得很清楚dart异步不同于java的线程,java线程是抢占式,但dart相当于开辟...

  • Flutter入门之mac开发环境搭建

    Flutter从v0.2.4版本开始默认采用Dart 2。Dart 2是完整的静态强类型语言,它的语法对于Java...

  • Dart

    Dart 的模块导入。 和 Java 不同的是,Dart 没有public、protected、 和private...

  • Dart之旅 首站 A basic Dart program

    译自A Tour of the Dart Language 本文展示了如何使用Dart的各大特性,从变量和操作符到...

  • Dart和Java通信源码分析和实践

    前言 Dart 和 Java 通信这块的知识点涵盖了 Dart&C 以及 Java&C 的通信,我们先有简单的业务...

  • Dart语言简介

    Dart的设计目标应该是既对标Java,也对标JavaScript,Dart在静态语法方面和Java非常相似,如类...

网友评论

      本文标题:从Java 到 Dart

      本文链接:https://www.haomeiwen.com/subject/catgzqtx.html