Dart

官方教程https://www.dartlang.org/guides/language/language-tour

官方在线编译器https://dartpad.dartlang.org/

语言方面

感觉就是提供动态类型的静态类型、既能AOT也能JIT的javascript...

  • 所有类型均继承于Object,包括int这种基本类型
  • 所有类型默认初始值为null
  • var自动推导类型,dynamic才是动态类型
  • constfinal的区别就是一个编译前一个运行中
  • 整除是~/
  • is!is not,有意思
  • as这个关键字就更niub了,就是一个强制类型转换
if (emp is Person) {
    // Type check
    emp.firstName = 'Bob';
}

等价于

(emp as Person).firstName = 'Bob';

emp不是Person,就会抛出错误

  • expr1 ?? expr2??操作符niub,等价于expr1 != null ? expr1 : expr2
  • ..操作符,更niub了,你见过这样的写法吗?
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!'));

酷炫

  • ?.操作符,若foo == nullfoo.bar会抛出错误,但foo?.bar则返回null
  • 字符串format的例子
void main() {
  int a = 1;
  int aa = 2;
  print('$a');
  print('$aa');
  print('${a}a');
}
/* 输出
1
2
1a
*/
  • 支持这样的switch写法
var command = 'CLOSED';
switch (command) {
  case 'CLOSED': // Empty case falls through.
  case 'NOW_CLOSED':
    // Runs for both CLOSED and NOW_CLOSED.
    executeNowClosed();
    break;
}
  • Dart 2之后,new关键字是可选项,可写可不写
  • 一些类的有趣用法
class Point {
  num x, y;
  Point(this.x); // 语法糖
}

void main() {
  var a = Point(1);
  print(a.x);
  print(a.y);
  print(a.runtimeType); // 每个类都有
  print(a.runtimeType == Point);
}
/* 输出
1
null
Point
true
*/
  • 重载一般的运算符就和c++差不多,但要注意重载==的时候不太一样,详细请看官网文档

Flutter

官方文档https://flutter.io/

docker image

可以用cirrusci/flutter。但要注意的是,这玩意locale没有支持utf8。。。。所以要是你的gitlab的用户名有非ascii的字符,就会爆炸。。。

Flutter package get被墙

Using Flutter in China

export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

Gradle被墙

参见这篇文章

一些库

大全在这

一些文章

欢迎留言>_<

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据