Dart对比快速入门

定位

首先本文是通过对比其他语言(主要是java)快速入门,建议您至少要熟悉一门静态语言或者动态语言。Dart和java以及C#都差不多,基本上不用学习可以直接使用,从这里可以你可以了解Dart有些特别之处。

首先从一段代码入门吧:

void main() {
  for (int i = 0; i < 5; i++) {
    printTest('hello ${i + 1}');
  }
}

void printTest(String variableInteger) {
  print(variableInteger);
}

从上面可以看到,Dart语言主入口是main函数,他可以不用属于某个类。一眼看上去和java差不多。流程控制也是由小括号和大括号构成,不用考虑缩进。结尾必须要加上分号

声明数据类型

void main() {
  int l = 4;
  String str1 = "str1";
  var i = 1;
	dynamic d = 0;
  final j = 2;
  const k = 3;
}

Dart是强类型语言,变量都会有一个类型。你可以向java那样直接声明类型,同样可以像swift或者Kotlin那样使用类型推导。Dart的类型推导使用final,var,const,dynamic关键字。

  • var修饰变量,这个没什么好说的。
  • final表示不可变的,修饰内置数据类型,值不可变;修饰对象表示引用不可变,使用到的频率很高。
  • const是编译时常量,他表示始终不可变,无论修饰内置类型还是对象,或者是数据结构。
  • dynamic是任意类型,有点像java里面的Object,Kotlin中的Any

使用const修饰的都是编译时常量。它区别于运行时,它的值是不可变的。
所有的数据类型,不管是int还是String,初始值都是null

数据类型

numbers、strings和booleans

首先是numbers,strings,booleans其中numbers包括intdouble类型,分别表示整数和浮点数。strings就是String类型,普通的字符串。booleans类型是bool只包含truefalse

numbers
* int
* double

strings
* String

booleans
* bool

如下代码:

void main() {
  // numbers
  int i = 1;
  double d = 1.1;
  
  // 字符串转数字
  // 这里就使用了类型推导
  final p1 = "3";
  final p2 = "3.3";
  print(int.parse(p1));
  print(double.parse(p2));
  
  // string
  // 可以使用('xxx')("xxx")('''xxx''') 三种方式初始化字符串,和Kotlin很像。
  // 字符串比较的是值
  final str1 = "test";
  final str2 = "test";
  print(str1 == str2); // true
  
  final str3 = 'test';
  print(str3);
  
  final str4 = '''test''';
  print(str4);
  print(str4 == str3); // true
  
  print("I'm ${str4}!!!");
  
  //booleans
  // null 可以直接用来判断,它是false
  if(null) {
    print('null is true');
  } else {
    print('null is false');
  }
  
  print(''.isEmpty);
//   final list = [];
//   if(!list) {
//     print('not empty');
//   } 
}

Dart的数据结构包括list和map

list

list对应的就是java里面的List,list可以像Python等语言那样使用[]进行数组操作,参照以下示例代码。
List有几个在flutter非常常用的初始化方式,分别为filledgenerate。具体参考:https://api.dartlang.org/stable/2.1.0/dart-core/List-class.html

void main() {
  // 初始化
  final list1 = [1,2,3,4,5];
  // 编译时常量
  final list2 = const [2,3,4,5,6];
//   list2[2] = 8; error
  print(list2);
  
  // 初始化2
  List<int> list3 = new List(5);
  print(list3); // [null, null, null, null, null]
  
  // 初始化3 filled 第一个参数是个数,第二个是添加的值
  List<int> list4 = List.filled(3,10);
  print(list4); // [10,10,10]
  
  // 初始化4 类似Python的Map生成 
  List<int> list5 = List.generate(3,(i) => i * 3);
  print(list5); // [0, 3, 6]
  
  // 更改 使用list1
  list1[2] = 8;
  print(list1); // [1, 2, 8, 4, 5]
  // 添加
  list1.add(10);
//   list1[10] = 20; Index out of range
  print(list1); // [1, 2, 8, 4, 5, 10]
  //删除
  list1.remove(10);
  print(list1); // [1, 2, 8, 4, 5]
}
map

map 对应java里面的Map,他的操作方式有点像Python。需要注意的有几点。

  • Map的Key不能有重复的
  • 如果使用int类型作为key,取值的时候优先使用key匹配,然后是下标。
  • 取不到值不会抛异常,直接返回null
  • Map和List可以转换为Json,来回转换时深拷贝。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值