一、Dart 常用的数据类型

1、数字(num、int、double)

1.1 num 类型

num类型是数字类型的父类,他即可以接受 整型 也可以接受 浮点型

  void _numType() {
    num num1 = -0.1; //num 是数字类型的父类
    num num2 = 1; //即可以是浮点类型也可以是整型
  }
1.2 int 类型

int 是num的子类,只能接收整数

  void _numType() {
    int int1 = 3; //只能是整数
  }
1.3 double 类型

double 也是 num的子类

  void _numType() {
    double d1 = 3.14; //双精度
  }

num 常用的API

  • abs() 绝对值
  • toDouble() 转换为 double 类型
  • toInt() 转换为 int 类型
  • round() 四舍五入
  void _numType() {
    num num1 = -0.1; //num 是数字类型的父类
    num num2 = 1; //即可以是浮点类型也可以是整型
    int int1 = 3; //只能是整数
    double d1 = -3.14; //双精度
    print("num:$num1 num2:$num2 int:$int1 double:$d1");
    print(num1.abs());//求绝对值
    print(num1.toDouble());//转成 double 类型
    print(d1.toInt());//转成Int类型
    print(d1.round());//四舍五入 -3.5->-4   3.5->4  3.4->3
  }
输出结果:
num:-0.1 num2:1 int:3 double:-3
0.1
-0.1
-3
-3

2、字符串(String)

在 dart 中字符串也是可以用 单引号 或者 双引号 来表示字符串的,字符串的拼接使用 '+' 或者使用 '$' (使用这个后面也是可以跟着表达式的)

  //字符串类型
  void _stringType() {
    String str1 = '单引号', str2 = "双引号";
    String str3 = 'str1:' + str1 + ' str2:' + str2;
    String str4 = "str1:$str1 str2:$str2"; //还可以使用 ${}
    print(str3);
    print(str4);
  }

String 常用的数据类型

String 字符串的Api和java中的String基本上是差不多的

  • substring() 字符串截取
  • replaceAll() 替换所有配置的字符
  • startsWith() 判断是否以 某个字符开始,注:这个方法的第二个参数表示从第几个字符开始
  • contains() 判断是否包含某个字符串,这个也是有第二个参数index的,同startsWith()一个道理
    等等
将字符串转成数字类型
    String str6 = "12s";
    print(num.tryParse(str6) ?? 0); //如果字符串没有问题就正常转换,如果不能正常转换就会返回 0
    print(num.parse(str6));//会报错

3、布尔(bool)

在dart中布尔类型使用 bool

  //布尔类型
  void _boolType(){
    bool success = true, fail = false;
    debugPrint("${success||fail}"); // true
    debugPrint("${success&&fail}"); // false
  }

4、集合(List、Map)

4.1 List 集合

先来看看 dart 语言中的集合是如何创建的?
集合的创建可以使用 [ ]generate() 方法,同时还要注意 List 的泛型,没有泛型的List可以暂时理解为 Object(其实是 dynamic 类型)
在Dart中的 List 是继承自 Iterable

  //集合 List类型
  void _listType() {
    //集合的初始化
    List<String> list = ["a", "b", "c"]; //初始化并添加元素,这里设置了泛型所以只能添加string类型
    List list2 = [1, 2, 3, "abc", "cde"]; //这里没有设置泛型所以添加任何类型的都可以
    debugPrint(list2.toString());
    debugPrint(list.toString());
    // list = list2;会报错,因为 list2 没有指定泛型那么他可以放的类型是dynamic(动态)的
    // list2=list; 这个不会报错

    //集合生成函数 generate() ,第一个参数是长度,第二个是一个高阶函数返回值是元素
    List list4 = List.generate(10, (index) => index + 1);
  
  }

List 常用的Api

  • addAll(Iterable<E> iterable) 添加一个集合,如 list2.addAll(list) ,将 list 的所有元素加入到 list2 中,注意 list2 的泛型是 dynamic 类型

  • insert(int index, E element) 从指定的下标处插入一个元素

  • sublist(int start, [int? end]) 从一个List中截取一个集合 List list5 = list2.sublist(0,3); 并不会改变原有(list2)的集合

  • indexOf(E element) 获取元素的下标,如果集合中没有此元素则返回-1

  • contains(Object? element) 是否包含此元素

  • remove(Object? value) 删除一个元素

  • removeLast() 删除最后一个元素并返回最后删除的元素

  • removeRange(int start, int end) 删除从下标start到 end之间的元素

  • removeWhere(bool test(E element)); 当表达式为true时删除元素

List 遍历

    //使用 in 关键字
    for (var element in list2) {
      debugPrint(element.toString());
    }

    // forEach() 方法
    list2.forEach((element) {
      debugPrint(element.toString());
    });
    
    //普通的遍历方式
    for (int i = 0; i < list2.length; i++) {
      debugPrint(list2[i].toString());
    }
4.2 Map 集合

创建方式和List差不多 Map的创建使用 { } ,它也是可以有泛型或者没有泛型的

    //Map集合的创建,同样的如果不添加泛型默认的泛型是 dynamic
    Map map = {"a": 1, "b": 2, 3: "c"};
    Map<int, String> map2 = {1: "a", 2: "b"};
    Map map3 = {}; //空的Map集合

    //  添加元素
    map["d"] = 4;

添加元素使用 map["d"] = 4;

Map 常见的Api

  • remove(Object? key) 删除Key所对应的元素
  • removeWhere(bool test(K key, V value)) 如果表达式成立则删除元素
  • containsKey(Object? key) 是否包含 key
  • containsValue(Object? value) 是否包含 value

还有下面几个觉的属性

  • values Iterable<V> get values; 是一个Iterable 的类型(List就是继承了这个类型)
  • keys Iterable<K> get keys;
  • isEmpty bool get isEmpty; 是否为空, 空:true 不为空:false
  • isNotEmpty bool get isNotEmpty; 是否不为空。空:false。不为空:true

Map 的遍历

    //使用forEach 遍历
    map.forEach((key, value) {
      debugPrint("key:$key value:$value");//打印
    });

    //使用 Map.keys(返回的是一个数组)
    for (var key in map.keys) {
      debugPrint("key:$key value:${map[key]}");
    }

5、var(任何数据类型、运行时数据类型)

dynamic 、var、Object 类型

5.1、dynamic 数据类型

这个是 dart 中的 动态数据类型,通常我们并不直接使用他,为什么?看看他的优点和缺点就知道了

  • 优点: 可以代替任何的数据类型.如果我们某个对象只有在运行的时候才会知道他的数据类型使用他就可以

  • 缺点:它会关闭语法检查,或者着语法检查不到 dynamic 类型的错误。 因为dart是静态的语法检查。而且他是动态的所以肯定没有静态的类型性能要高。

    // dynamic 动态数据类型
    //优点:可以代替任何数据类型(比如某个变量只有在运行的时候才会知道他的类型)
    // 缺点:会使dart的语法检查失效,因为他是表态的语法检查

    dynamic a;
    debugPrint("类型:${a.runtimeType}");//类型:Null
    a=1;
    debugPrint("类型:${a.runtimeType}");//类型:int
    a = "";
    debugPrint("类型:${a.runtimeType}");//类型:String
    a = Object();
    debugPrint("类型:${a.runtimeType}");//类型:Object

    //a.abc();//会关闭类型检查,这里的abc()是随便写的一个方法,并且编译器不会报错
5.2、var 关键字

注意 var 是关键字,并不是数据类型,那个var 关键字是什么时候确认类型的呢?
它是在 声明变量赋值的那一刻,就决定了它是什么类型.什么意思呢?看下面的两种写法。

    // 情况一:
    var b = "abc";//在这确定了他的类型
    // b = 123;//报错,因为在声明 b 的时候就已经给他赋值了"abc" 是 String类型的

    //情况二:
    var c;//这里确定了类型。并没有给他赋值,他现在的类型是Object ,值是 null ,所以下面给他赋什么值都是可以接收的
    debugPrint(c.toString());
    c ="abc";
    c = 123;
5.3、 Object 类型

他是Dart对象的基类

    //Object 类型
    Object o1="";
    o1 = 1;
    o1.abc();//这里语法检查是会报错的,因为Object没有abc()方法
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容