美文网首页Happy Flutter
Dart语法摘要(一)

Dart语法摘要(一)

作者: tongxyj | 来源:发表于2020-11-17 16:33 被阅读0次

    学Flutter就和学iOS一样,先学基本语言语法的使用,再学习搭UI,iOS是OC和Swift,Flutter么就是Dart,语言学多了语法都差球不多,特别是这些新的语言,很多东西都是相似的,但是长时间不用容易忘记,与其每次去网上瞎jb找,不如自己总结一些,以后看自己写的东西就行了。文中个别结论是我自己总结出来的,不能保证准确性,看到的同学仅供参考。

    距上次写文章也有一段时间了,本来打算去掘金重新开始的,因为感觉自己之前在简书写的这些东西技术含量太低了,后来因为简书把我保存的草稿莫名其妙丢失了,加上百度出来的答案还是以简书居多,决定还是待在这吧,虽然简书这个环境大不如从前了,但是现在写东西更多的是自己记录和梳理的一个过程,还没达到给别人指导的水平,和之前写的文章对比对比,也算是记录一段开发的心路历程。

    本章提纲:
    1.变量定义
    2.基本数据类型
    3.集合类型及其相关操作

    main函数

    1.Dart语言也需要有一个main函数作为入口,该函数接收一个List类型的参数,目前不知道有啥用,后期知道了再补充吧,这个main函数没有返回值。

    main(List<String> args) {
      print('Hello World');
    }
    

    变量定义

    1.定义变量有两种方式,显示申明类型推断,变量相互赋值的时候也会进行类型检查,intfloat不能相互赋值,这个和Swift相似。

    2.字符串用单引号和双引号都可以,字符串和其他变量或表达式拼接用${expression},如果表达式是一个标识符,那么{}可以省略,查看一个变量的具体类型用runtimeType

    var name = 'tong';
    print(name.runtimeType); // String
    var a = 1;
    print('num is $a');//num is 1
    

    3.var就是基本的申明一个变量,不多讲,dynamic感觉和OC里的id修饰的变量一样,就是告诉编译器不做静态类型检查了,反正怎么用都行,但是在运行的时候如果类型不匹配就可能产生问题。

    //显示声明变量
    String name = 'tong';
    int i = 1;
    float = 1.0;
    //类型推导声明变量,几个关键字后面再讲
    var/dynamic/const/final name = xx;
    

    4.constfinal都是用来定义常量的,主要讲一下区别,const修饰的变量值必须是在编译期间就确定的值,你不能赋给它一个运行期间才能得到的值,而final可以。另外const放在赋值语句的右边,可以共享对象,提高性能,这个后边再补充。

    String getName() {
      return 'tong';
    }
    
    main(List<String> args) {
      const name = getName(); // 错误的做法, 因为要执行函数才能获取到值
      final name = getName(); // 正确的做法
    }
    

    5.Dart 没有 publicprivateprotected 这些关键字,变量名以"_"开头意味着对它的 lib 是私有的。

    基本数据类型

    1.基本数据类型常用的就intdouble,和NSIntegerCGFloat一样,他们可表示的精度范围是根据平台变化的。

    2.字符串和数字之间的转换,有几个方法,直接上代码:

    // 字符串和数字转化
    // 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
    

    3.布尔类型truefalse,不能用非0或者非空判断真假,if条件判断的时候必须使用布尔类型,这个和Swift一样。

    枚举类型

    枚举类型中有两个比较常见的属性:
    index:用于表示每个枚举常量的索引,从0开始。
    values:包含每个枚举值的List。

    main(List<String> args) {
      print(Colors.red.index);
      print(Colors.green.index);
      print(Colors.blue.index);
    
      print(Colors.values);
    }
    
    enum Colors {
      red,
      green,
      blue
    }
    

    集合类型

    1.集合类型Dart内置三种List / Set / Map,其中,List可以这样来定义:

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

    Set可以这样来定义:
    其实,也就是把[]换成{}就好了。
    SetList最大的两个不同就是:Set是无序的,并且元素是不重复的。

    // Set的定义
    // 1.使用类型推导定义
    var lettersSet = {'a', 'b', 'c', 'd'};
    print('$lettersSet ${lettersSet.runtimeType}');//{a, b, c, d} _CompactLinkedHashSet<String>
    
    // 2.明确指定类型
    Set<int> numbersSet = {1, 2, 3, 4};
    print('$numbersSet ${numbersSet.runtimeType}');//{1, 2, 3, 4} _CompactLinkedHashSet<int>
    

    最后,Map是我们常说的字典类型,它的定义是这样的:

    // Map的定义
    // 1.使用类型推导定义
    var infoMap1 = {'name': 'tong', 'age': 18};
    print('$infoMap1 ${infoMap1.runtimeType}');//{name: tong, age: 18} _InternalLinkedHashMap<String, Object>
    // 2.明确指定类型
    Map<String, Object> infoMap2 = {'height': 1.88, 'address': '北京市'};
    print('$infoMap2 ${infoMap2.runtimeType}');//{height: 1.88, address: 北京市} _InternalLinkedHashMap<String, Object>
    

    集合操作

    1.获取集合长度,用length属性:

    // 获取集合的长度
    print(letters.length);
    print(lettersSet.length);
    print(infoMap1.length);
    

    2.集合添加/删除/包含操作:

    // 添加/删除/包含元素
    numbers.add(5);//向List中添加数字5
    numbersSet.add(5);//向Set中添加数字5
    
    numbers.remove(1);//删除List中的数字1
    numbersSet.remove(1);
    // List根据index删除元素
    numbers.removeAt(3);
    
    print(numbers.contains(2));//判断List是否包含数字2
    print(numbersSet.contains(2));
    

    3.Map相关操作

    var infoMap1 = {'name': 'tong', 'age': 18};
    // Map的操作
    // 1.根据key获取value
    print('${infoMap1.entries} ${infoMap1.entries.runtimeType}'); // (MapEntry(name: tong), MapEntry(age: 18)) MappedIterable<String, MapEntry<String, Object>>
    
    // 2.获取所有的entries
    print(infoMap1.entries); // (MapEntry(name: tong), MapEntry(age: 18)) 
    
    // 3.获取所有的keys
    print('${infoMap1.keys} ${infoMap1.keys.runtimeType}'); // (name, age) _CompactIterable<String>
    
    // 4.获取所有的values
    print('${infoMap1.values} ${infoMap1.values.runtimeType}'); // (tong, 18) _CompactIterable<Object>
    
    // 5.判断是否包含某个key或者value
    print('${infoMap1.containsKey('age')} ${infoMap1.containsValue(18)}'); // true true
    
    // 6.根据key删除元素
    infoMap1.remove('age');
    print('${infoMap1}'); // {name: tong}
    

    参考资料:
    coderwhy-Flutter之搞定Dart系列
    Dart编程语言中文网

    相关文章

      网友评论

        本文标题:Dart语法摘要(一)

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