美文网首页Flutter学习笔记
Dart值得注意的知识点(一)

Dart值得注意的知识点(一)

作者: WinJayQ | 来源:发表于2020-04-12 22:03 被阅读0次

    1. dynamic的使用

    • 在开发中, 通常情况下不使用dynamic, 因为类型的变量会带来潜在的危险
      dynamic name = 'WinJayQ';
      print(name.runtimeType);//String
    
      name = 18;
      print(name.runtimeType);//int
    

    2.final&const的使用

    • final和const都是用于定义常量的, 也就是定义之后值都不可以修改

    2.1 final和const有什么区别呢?

    • const在赋值时, 赋值的内容必须是在编译期间就确定下来的
    • final在赋值时, 可以动态获取, 比如赋值一个函数
    String getName() {
      return 'WinJayQ';
    }
    
    main(List<String> args) {
      const name = getName(); // 错误的做法, 因为要执行函数才能获取到值
      final name2 = getName(); // 正确的做法
    }
    

    2.2 const放在赋值语句的右边,可以共享对象,提高性能

    class Person {
      const Person();
    }
    
    main(List<String> args) {
      final a = const Person();
      final b = const Person();
      print(identical(a, b)); // true
    
      final m = Person();
      final n = Person();
      print(identical(m, n)); // false
    }
    

    3.布尔类型

    • 注意: Dart中不能判断非0即真, 或者非空即真
    var message = 'Hello Dart';
      // 错误的写法
     //Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
      if (message) { 
        print(message)
      }
    

    4.字符串类型

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

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

    5.函数

    如果函数中只有一个表达式, 那么可以使用箭头语法(arrow syntax)

    • 注意, 这里面只能是一个表达式, 不能是一个语句
    sum(num1, num2) => num1 + num2;
    

    5.1函数的参数问题

    函数的参数可以分成两类: 必须参数和可选参数

    可选参数可以分为 命名可选参数 和 位置可选参数
    定义方式:

    命名可选参数: {param1, param2, ...}
    位置可选参数: [param1, param2, ...]
    
    • 5.1.1 命名可选参数的演示:
    // 命名可选参数
    printInfo1(String name, {int age, double height}) {
      print('name=$name age=$age height=$height');
    }
    
    // 调用printInfo1函数
    printInfo1('win'); // name=win age=null height=null
    printInfo1('win', age: 18); // name=win age=18 height=null
    printInfo1('why', age: 18, height: 1.88); // name=win age=18 height=1.88
    printInfo1('why', height: 1.88); // name=win age=null height=1.88
    
    • 5.1.2 位置可选参数的演示:
    // 定义位置可选参数
    printInfo2(String name, [int age, double height]) {
      print('name=$name age=$age height=$height');
    }
    
    // 调用printInfo2函数
    printInfo2('win'); // name=win age=null height=null
    printInfo2('win', 18); // name=win age=18 height=null
    printInfo2('win', 18, 1.88); // name=win age=18 height=1.88
    
    • 5.1.3 命名可选参数, 可以指定某个参数是必传的(使用@required)
    • Required 是在meta 包下面定义的,因此你需要import package:meta/meta.dart 或者,import那些输出meta包的包,如Flutter下的package:flutter/material.dart.
    // 命名可选参数的必传
    printInfo3(String name, {int age, double height, @required String address}) {
      print('name=$name age=$age height=$height address=$address');
    }
    
    • 5.1.4 参数默认值
      参数可以有默认值, 在不传入的情况下, 使用默认值

    • 注意, 只有可选参数才可以有默认值, 必须参数不能有默认值

    // 参数的默认值
    printInfo4(String name, {int age = 18, double height=1.88}) {
     print('name=$name age=$age height=$height');
    }
    

    6.匿名函数的使用

    某些情况下,给函数命名太麻烦了,我们可以使用没有名字的函数,这种函数可以被称之为匿名函数( anonymous function),也可以叫lambda或者closure。

    
    main(List<String> args) {
      // 1.定义数组
      var movies = ['盗梦空间', '星际穿越', '少年派', '大话西游'];
    
      // 2.使用forEach遍历: 有名字的函数
      printElement(item) {
        print(item);
      }
      movies.forEach(printElement);
    
      // 3.使用forEach遍历: 匿名函数
      movies.forEach((item) {
        print(item);
      });
      movies.forEach((item) => print(item));
    }
    

    学习内容来自Flutter从入门到实战

    相关文章

      网友评论

        本文标题:Dart值得注意的知识点(一)

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