美文网首页
Dart语法基础-2基础类型

Dart语法基础-2基础类型

作者: tp夕阳武士 | 来源:发表于2020-09-08 15:19 被阅读0次

    1. 数据类型

    对于数值来说,我们也不用关心它是否有符号,以及数据的宽度和精度等问题。只要记着整数用int,浮点数用double就行了。
    不过,要说明一下的是Dart中的intdouble可表示的范围并不是固定的,它取决于运行Dart的平台。

    // 1.整数类型int
    int age = 18;
    int hexAge = 0x12;
    print(age);
    print(hexAge);
    
    // 2.浮点类型double
    double height = 1.88;
    print(height);
    

    字符串和数字之间的转化:

    • ${实例名} //这就是打印某个实例时的语法方式;
    • Dart语法的字符串类型和Swift一样可以:插入,截取等操作;
    // 字符串和数字转化
    // 1.字符串转数字
    var one = int.parse('111');
    var two = double.parse('12.22');
    print('${one} ${one.runtimeType}'); // 111 int
    print('${two} ${two.runtimeType}'); // 12.22 double
    
    // 2.数字转字符串
    var num1 = 123;
    var num2 = 123.456;
    var num1Str = num1.toString();
    var num2Str = num2.toString();
    var num2StrD = num2.toStringAsFixed(2); // 保留两位小数
    print('${num1Str} ${num1Str.runtimeType}'); // 123 String
    print('${num2Str} ${num2Str.runtimeType}'); // 123.456 String
    print('${num2StrD} ${num2StrD.runtimeType}'); // 123.46 String
    

    2.布尔类型

    • 布尔类型中,Dart提供了一个bool的类型, 取值为truefalse;
    • 如果熟悉Swift语法的布尔类型的,可以不用看这一节;
    // 布尔类型
    var isFlag = true;
    print('$isFlag ${isFlag.runtimeType}');
    

    注意: Dart中不能判断非0即真, 或者非空即真
    Dart的类型安全性意味着您不能使用if(非booleanvalu)或assert(非booleanvalue)之类的代码。

    var message = 'Hello Dart';
      // 错误的写法
      if (message) {
        print(message)
      }
    

    3.字符串类型

    Dart字符串是UTF-16编码单元的序列。您可以使用单引号或双引号创建一个字符串:

    // 1.定义字符串的方式
    var s1 = 'Hello World';
    var s2 = "Hello Dart";
    var s3 = 'Hello\'Fullter';
    var s4 = "Hello'Fullter";
    

    可以使用三个单引号或者双引号表示多行字符串:

    // 2.表示多行字符串的方式
    var message1 = '''
    哈哈哈
    呵呵呵
    嘿嘿嘿''';
    

    字符串和其他变量或表达式拼接: 使用${expression}, 如果表达式是一个标识符, 那么{}可以省略

    
    // 3.拼接其他变量
    var name = 'coderwhy';
    var age = 18;
    var height = 1.88;
    print('my name is ${name}, age is $age, height is $height');
    

    4. 集合类型 List / Set / Map

    集合类型分: List / Set / Map,分别对应的是Swift的: Array / Set / Dictionary

    4.1List

    List 定义:

    // List定义
    // 1.使用类型推导定义
    var letters = ['a', 'b', 'c', 'd'];
    print('$letters ${letters.runtimeType}');
    // 2.明确指定类型
    List<int> numbers = [1, 2, 3, 4];
    print('$numbers ${numbers.runtimeType}');
    
    4.2 Set

    Set定义:

    • Dart语法中Set和Swift语法遵循同样的规则;
    • 无序的,不重复的
    // Set的定义
    // 1.使用类型推导定义
    var lettersSet = {'a', 'b', 'c', 'd'};
    print('$lettersSet ${lettersSet.runtimeType}');
    
    // 2.明确指定类型
    Set<int> numbersSet = {1, 2, 3, 4};
    print('$numbersSet ${numbersSet.runtimeType}');
    
    4.3 Map

    Map的定义:

    • Map就是常见的字典类型
    
    // Map的定义
    // 1.使用类型推导定义
    var infoMap1 = {'name': 'why', 'age': 18};
    print('$infoMap1 ${infoMap1.runtimeType}');
    
    // 2.明确指定类型
    Map<String, Object> infoMap2 = {'height': 1.88, 'address': '北京市'};
    print('$infoMap2 ${infoMap2.runtimeType}');
    
    4.4 常见的集合操作:

    1.获取集合长度:

      //获取数组的长度
      List aaa = [1, 2, 3, 4, 5, 6];
      print(aaa.length);
    
      //获取Set的元素个数
      Set bbb = {1, 2, 3, 4, 5, 5, 5, 5};
      print(bbb.length); //打印结果5;
      //因为bbb是Set类型,不允许有重复元素,系统会自动取出重复元素;
    
      //获取字典的键:值 对数
      Map ccc = {'key1': 1, 'key2': 'value2', 'key3': false};
      print(ccc);
      print(ccc.length);
    

    2.添加/删除 操作

    // List
    List aaa = [1, 2, 3, 4, 5, 6];
    aaa.add(7); // [1, 2, 3, 4, 5, 6, 7]
    aaa.insert(3, 8); //[1, 2, 3, 8, 4, 5, 6, 7]
    aaa.remove(1); //[2, 3, 8, 4, 5, 6, 7]
    var index = aaa.indexOf(3); //3的index值是1;
    var value = aaa.elementAt(1); //aaa的index = 1 的值是 3;
    
    //Set
    Set bbb = {1, 2, 3, 4, 5};
    bbb.remove(1);
    bbb.add(6);
    
    //Map
    Map ccc = {'key1': 1, 'key2': 111, 'key3': false};
    ccc['key4'] = 'test';
    print(ccc); //{key1: 1, key2: value2, key3: false, key4: test}
    ccc.remove('key1');
    print(ccc); //{key2: value2, key3: false, key4: test}
    print(ccc.keys); //(key2, key3, key4)
    print(ccc.values); //(value2, false, test)
    print('${ccc.containsKey('key5')} ${ccc.containsValue(111)}'); // false true
    print(ccc.entries); //(MapEntry(key2: value2), MapEntry(key3: false), MapEntry(key4: test))
    

    4. dynamic & Object

    dynamic
    //这个方法运行时会报错,但是编译器编译不报错;
    void testDynamic() {
      //dynamic 编译时不会揣测数据类型,但是运行时会推断
      dynamic s1 = 'string';
      dynamic a1 = 1;
      var result = s1 + a1;
      print(s1.runtimeType);
      print(result);
      
      //上面这个代码编译时不会报错,但是运行时会报错;
      //运行时报错内容:type 'int' is not a subtype of type 'String' of 'other'
      
      //我们在来看一个:
      s1.foo();
      //s1这个实例,并没有包含foo();这个方法,但是调用的时候,编译器并不报错;
      //运行时就会报错,提示没有找到这个方法;
    }
    
    
    Object
    void testObject() {
      //Object
      Object object = "hello world";
      print(object.runtimeType); //String
      print(object); //hello world
    
    
      Object object2 = 1;
      var result = object + object2;
      //编译器会推断出这个类型不一致,直接报错
    
      print(object.runtimeType); //int 说明类型是可变的
      print(object); //1
      //object.foo();静态类型检查会运行报错会报错
    }
    //所以 Object 在运行时是有类型推断的;
    

    5.枚举类型

    main(List<String> args) {
      final s = Season.winter;
      
       //使用switch分支语法,对枚举进行判断
      switch (s) {
        case Season.spring:
          print('s 是春天');
          break;
        case Season.summer:
          print('s 是夏天');
          break;
        case Season.autumn:
          print('s 是秋天');
          break;
        case Season.winter:
          print('s 是冬天');
          break;
        default:
          print('啥也不是');
      }
    }
    
    //定义一个枚举类型;
    enum Season { spring, summer, autumn, winter }
    

    相关文章

      网友评论

          本文标题:Dart语法基础-2基础类型

          本文链接:https://www.haomeiwen.com/subject/vvodektx.html