flutter 参数函数_(三)flutter入门之dart中的集合、动态类型和函数

上个博客我们大概了解了dart中的基本数据类型的特性以及和java、javaScript等语言之间的比较,这篇博客我们主要来介绍一下dart中的集合操作,动态变量和函数相关的内容

集合

熟悉java的都知道,在java中集合分为了Map,List和Set三种,每一种职责和使用方式都不一样,并且在java中还提供了一个通用的数组类型Array用来更加精细的处理和集合不一样的操作,但是我们在使用List集合和Array的时候,经常会因为数组和集合之间的互相使用而感觉到为了详细区分牺牲了体验度,而js中就很简单,因为js中并不限制你是什么类型,可以直接初始化一个[]作为数组或者集合使用,并且可以初始化添加多个参数,还可以在初始化以后继续push的方式添加元素进入集合中,可以说比起java这方面操作上的确好了不少,但是缺陷也很明显,js的集合不能强制指定类型,可以任意更改,并且js中集合单一,并无map,set等具体的细节区分。dart作为一个新生代的语言,既然能集百家之长,肯定是要具备java和js这些比较优秀的特性,并且dart综合了两大语言的特点,摒弃了一些不好的体验

List

dart的list既有数组特性也有java中的list特性,接下来我们看一下使用:

void main() {

List list = new List();

list.add("aa");

list.add(1);

list.add(1.2);

print(list);

}

看到这里,熟悉java的一定会认为报错,但是输出的结果却是如下所示,是不是很惊讶?其实要明白,dart中默认为list的类型为最大的基类Object,所以如果我们不指定泛型的话,会当成List

ject>方式,所以这里能正确输出

[aa, 1, 1.2]

接着我们指定一下泛型为int类型以后,再来看看情况

list泛型插入其他类型报错.png

很明显,编译时期就报错了,因为强制指定了泛型的原因,而在开发中,我们往往有时候希望初始化的时候就设置几个参数进去,然后再去做add等操作,传统java类型的list.add操作可能要写很多次,这样的话初始化会很不方便,能不能像数组那样直接初始化插入值,然后后面有需要的话再去add呢?如果是在java中,这样的操作是不能实现的,因为数组的长度是固定的,而list又没有类型数组那样的初始化赋值方式,但是在js中数组初始化赋值是个最常见不过的事情,并且还支持后面push操作,在dart中,也是支持初始化赋值后期add元素的操作的,如下:

void main() {

List list = [1,2,3];

list.add(1);

print(list);

}

并且在dart中提供了一系列语法糖api,不仅支持add单个元素,支持addAll添加一个集合进行合并,还支持多种remove操作,并且还有replaceRange 这样的语法糖可以进行元素的替换操作,集合的api在java和js中都有所不足,dart在此基础上进行了改进操作

Map

map是个key-value方式存储数据的集合,这点在java语言中体现的很多,dart中完美的继承了过来,并且提供了类似java的api,但是在dart中不存在接口的概念,所以可以直接new Map出来:

Map map = new Map();

map['abc'] = 'bbb';

print(map);

可以看出来dart中的map使用和js中一样,直接指定key进行赋值就可以了,并且支持key-value的泛型,还支持了一些常用的语法糖操作:

map.containsKey("abc"); //是否存在当前key true

map.containsValue("bbb");//是否存在当前value true

map.isEmpty;//false

map.isNotEmpty;//true

ma

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值