String 的属性和方法和其他语言类似,这里列举几个常用方法和属性
void main() { String str1 = "我和我的祖国"; String str2 = ",一刻也不能分割"; String str3 = str1 + str2; print(str1.length); // 6 print(str1.substring(2)); // 我的祖国 List<String> list = str3.split(","); print(list); // [我和我的祖国, 一刻也不能分割] print(str1.startsWith("我")); // true print(str1.indexOf("我")); // 0 print(str1.lastIndexOf("我")); // 2 print(str1.replaceAll("我", "你")); // 你和你的祖国 print("a".compareTo("b")); // -1 print(str1.contains('祖国')); // true }bool
布尔值,字面值只能是true或false, 不能为其他
void main() { bool bool1 = true; print(bool1); // true }List
类似js中的数组, 长度可变。
void main() { List<int> list = [1, 3, 4]; print(list.length); // 3 print(list); // [1, 3, 4] list.add(5); print(list); // [1, 3, 4, 5] list.addAll([6, 7]); print(list); // [1, 3, 4, 5, 6, 7] print(list.removeLast()); // 7 print(list); // [1, 3, 4, 5, 6] list.removeAt(0); print(list); // [3, 4, 5, 6] list.remove(3); print(list); // [4, 5, 6] list.sort((item1, item2) { return item2 - item1; }); print(list); // [6, 5, 4] list.forEach((item) { print(item); }); // 6 // 5 // 4 print(list.indexOf(4)); // 2 list.clear(); print(list); // [] }Set
表示集合,无重复值,加重复值不会报错,但是进不去,无序。
void main() { Set<int> set = {1, 3, 3, 4}; print(set); // {1, 3, 4} set.add(9); print(set); // {1, 3, 4, 9} print(set.contains(3)); // true print(set.length); // 4 set.remove(3); print(set); // {1, 4, 9} print(set.isEmpty); // true }Map
表示k-v结构数据,key不能重。
void main() { Map<String, int> map = { "a": 1, "b": 2, }; print(map); // {a: 1, b: 2} map['c'] = 3; print(map); // {a: 1, b: 2, c: 3} map.remove('a'); print(map); // {b: 2, c: 3} print(map.containsKey('a')); // false print(map.length); // 2 print(map.containsValue(3)); // true }enum
表示枚举,是一种特殊的类,官方文档没有将其纳入到基础类型,这里为了方便理解放到这里。
enum Color { red, blue, yellow, } void main() { Color c = Color.red; print(Color.blue); // Color.blue print(Color.values); // [Color.red, Color.blue, Color.yellow] print(c); // Color.red } 数据类型转换java中有自动类型转换机制,例如可以将int型自动转为double;dart中类型不匹配时必须强转,没有自动类型转换
其他类型转String或数字之间相互转换 toXxx()方法
String转数字使用数字类(int,double,num)的parse()方法
void main() { int int1 = 1; // 错误,不能自动转换 // double double1= int1; // double 和int的相互转换 double double1 = int1.toDouble(); int1 = double1.toInt(); // num 是int 和 double的父类型, 可以直接转换 num num1 = double1; num1 = int1; // String 与double相互转换 String str1 = double1.toString(); double1 = double.parse(str1); // String 与int相互转换 String str2 = int1.toString(); int1 = int.parse(str2); // Map,Set,List用其toString方法可以转换为String Map map = {"a": 1, "b": 2}; List list = [1, 2, 3]; Set set = {1, 2, 3}; String str3 = map.toString(); list.toString(); set.toString(); } 操作符操作符与其他语言基本相同,这里说明几个特殊的,其他简单罗列。
算术运算符
+、-、*、/、%、++、--
比较特殊的是~/, 表示整除
void main() { int int1 = 3; print(int1 ~/ 2); // 1 }比较运算符
==、!=、>、<、<=、>=
赋值运算符
=、-=、~/=等等
比较特殊的是 变量名??=值, 表示如果左边变量是null则赋值,否则不赋值
void main() { int a; a ??= 1; print(a); // 1 int b = 2; b ??= 1; print(b); // 2 }逻辑运算符
!、||、&&
位运算符
&、|、^、~expr、<<、>>
条件表达式
condition ? expr1 : expr2
级联运算符
这是比较特殊的运算符,类似于jquery中的连续的.操作, 上一次操作还是返回当前对象,因此可以继续调用其方法。大多语言没有这种操作。
class User { say() { print("say"); } run() { print("run"); } } void main() { User user = User(); user..say()..run(); // say // run }类型运算符
这是比较特殊的运算符,用于判断类型和强转,类似java里边(User) instance这种
instance as className
用于将某个类型转换为其他类型,必须满足父子关系,否则报错。
import 'xxx' as variable;
用于指定导入库的别名,相当于将库里导出来的东西挂到一个map上,可以解决重名问题。
instance is classNmae
用于判断一个对象是否是某个类的实例
instance is! classNmae