Dart学习笔记(二)

coding

1,一般而言,当我们定义一个字符串的时候,字符串要用单引号或者双引号括起来,单引号或者双引号的作用是一样的,如下:

String str1 = '单引号';String str2 = "双引号";


当字符串有换行需求的时候,我们可以用\n来代表一个换行符,如下:

String str1 = '单引号\n这是第二行了';  print(str1);

打印结果如下:

单引号这是第二行了


但是有没有一个更加可视化的定义可换行的字符串的方案呢,比如像下面这样直接换行:

  String str2 = "双引号   这是第二行了";print(str2);

运行之后我们发现,程序报错了。


其实,Dart中,除了单引号和双引号,还可以用三引号(即三个单引号或者三个双引号)来修饰字符串。使用三引号修饰的字符串可以直接换行,如下所示:

  String str2 = '''双引号   这是第二行了''';  print(str2);

运行之后打印结果如下:

双引号   这是第二行了


2,Dart中的数组是List,字典是Map,可以通过is关键字来判断变量的类型,如下所示:

var map2 = newMap();  map2['name'] = '李四';  map2['age'] = 29;  map2['work'] = ['程序员', '登山运动员'];  print(map2);
if (map2 is Map) { print('map'); }


3,Dart中的加减乘除取余,与oc中一致,但是多出了一个~/运算符:两者相除取整。代码如下:

double a = 13.14;  int b = 520;  var f = b/a;  print(f);  var h = b~/a;  print(h);

打印结果如下:

39.573820395738239


4,??=运算符。

  double c;c = 11;c ??= 23;print(c);

上面代码的打印结果是:

11.0

为什么不是23呢?因为c??=23;这行代码的意思是:如果c为空,那么就将23赋值给c。上例中,在执行c??=23;这行代码之前,c就已经被赋值为11,所以最终打印结果是11。


5,??运算符。

voidmain(){var a = 13.14;var b;  print(a ?? 111);  print(b ?? 222);}

打印结果如下:

13.14222


a ?? 111这行代码的意思是:判断a的值是否为空,如果为空则这行代码的值为111;如果a值不为空,则这行代码的值是a的值


6,未赋值的变量。

当一个变量未被赋值的时候,它是null。

  String str;print(str);
int a;print(a);print(a==0);  print(a==null);

打印结果如下:

nullnullfalsetrue

该例中,字符串str和数值a均未被赋值,所以其打印结果均为null

在OC中,如果一个int类型的变量未被初始化,那么默认值为0,但是在Dart中,如果一个int类型的变量未被赋值,那么其值为null,不是0。


7,While和Do-While的区别。

var i = 10;while (i<8) {print('单身狗');  }
do {print('幸福美满'); } while (i<8);

打印结果如下:

幸福美满

while循环是先判断再执行;do-while循环是先执行一次,再判断


8,break和continue


break可以用在switch-case中,也可以用在for循环和while循环中;

在switch-case中使用break,可以使流程跳出switch结构;

在循环结构中使用break,可以使流程跳出当前循环(遇到break,循环就终止,本次循环体接下来的代码也不会执行);

在多层循环中,一个break语句只能向外跳出一层


continue只能用在循环语句中;

continue的作用是使本次循环体结束,即跳过本次循环体中尚未执行的语句,然后进入下次是否执行循环的判断


9,List中的常用属性和方法。

List mylist = ['111'];  mylist.add('222');  mylist.add('333');//给数组增加元素  mylist.addAll(['444', '555']);//用于拼接数组print(mylist.reversed.toList());//对列表倒序排序,并转为Listprint(mylist.isEmpty);//列表是否为空print(mylist.isNotEmpty);//列表是否为非空print(mylist.indexOf('5575'));//查找数据,找到的话会返回对应的索引值,查找不到就返回-1  mylist.remove('111');//删除对应的元素  mylist.removeAt(0);//通过对应元素的索引值删除  mylist.fillRange(1, 3, '666');//修改相应的元素值  mylist.insert(1, '777');//插入一个元素  mylist.insertAll(3, ['888', '999']);//插入多个元素print(mylist.join(','));//将List转成字符串String,各个元素间用,分割var listStr = '1,2,3,4,5,6,7,8,9,10';print(listStr.split(','));//将String字符串分割成List数组,分隔符是,


10,Set

Set与List的不同之处在于:Set中元素不可重复,而List中元素可以重复;Set中元素无序,List中元素是有序的。

一般使用Set来对List中的元素去重:将List转成Set,这样获取到的集合的元素就没有重复的了。


11,Map的相关属性和方法

var person = {'name':'拉维','age':29,'job':'程序员'};print(person.keys.toList());//获取到字典中的所有keyprint(person.values.toList());//获取字典中的所有valueprint(person.isEmpty);//是否为空print(person.isNotEmpty);//是否不为空person.addAll({'height':176,"weight":126  });//增加元素person.remove('height');//删除对应元素print(person.containsKey('height'));//查看有没有对应的keyprint(person.containsValue(126));//查看有没有对应的value


12,循环遍历List的几种方式。

  List mylist = [1, 2, 3, 4, 5, 6, 7, 8];//for循环for (var i = 0; i < mylist.length; i++) {    print(mylist[i]);  }
//for-in循环for (var a in mylist) { print(a); }
//forEach循环遍历集合的每个元素 mylist.forEach((value){ print(value); });
//map方法用于遍历处理每一个元素var newlist = mylist.map((value){//给集合中的每一个值乘以2returnvalue*2; }); print(newlist.toList());
//where用于遍历每一个元素并返回满足判断条件的元素var newlist2 = mylist.where((value){//这里是判断条件returnvalue>6; }); print(newlist2);
//遍历集合的所有元素,只要有任何一个元素符合判断条件,结果就是true;当所有元素都不符合判断条件的时候,才会返回faultbool result1 = mylist.any((value){//这里是判断条件returnvalue > 7; }); print(result1);
//遍历集合的所有元素,当每一个元素都满足判断条件的时候才会返回true,有一个元素不满足条件就会返回faultbool result2 = mylist.every((value){//这里是判断条件returnvalue>0; }); print(result2);

虽然这里是以List举例演示,但是对于Set、List以及Map这三种几何形式,以上方法都适用。比如,下面是使用forEach方法来循环Map:

  Map person={"name":"张三","age":20  };
person.forEach((key, value){print('$key---$value'); });


以上。

本文分享自微信公众号 - iOS小生活(iOSHappyLife)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

以上是 Dart学习笔记(二) 的全部内容, 来源链接: utcz.com/z/508845.html

回到顶部