Dart 基础 - 工具 变量 数据类型 运算符 表达式 语句 集合 函数

470 阅读3分钟

01 开发工具配置

  • vscode
  • vscode 插件:
    • dart
    • code runner

02 入口 注释 变量 常量

  • 注意常量的两种定义方式 const final
  • 区别:final 可以开始不赋值,只能赋一次 ; 而 final 不仅有 const 的编译时常量的特性,最重要的它是运行时常量,并且 final是 惰性初始化,即在运行时第一次使用前才初始化
  final a = new DateTime.now();
  • 字符串
    • 利用一对单引号或者一对双引号定义
    • 利用一对三个单引号或者一对三个双引号定义(定义的字符串可以换行)

03 Dart的数据类型详解 int double String bool List Maps

  • 数据类型的判断
  int number = 123;
  if (number is int) {
    print('number 变量是 int 类型');
  } else {
    print('number 变量不是 int 类型');
  }
  • null
  • NaN

04 Dart运算符 条件表达式 Dart 类型转换

  • 算术运算符 ~/ 表示取整

  • 赋值运算符 ?? 表示只为空时将右边的值赋值到左边

  • 类型转换

    • 字符串转 intdouble,使用 int.parse 或者 double.parse
    • number 类型转字符串类型,toString()
    • isEmpty 判断字符串是否为空
  • 判断是否相等 ==

  if (myNum == 0) {
    print('0');
  } else {
    print('非0');
  }

05 Dart 循环语句 for while do...while break continue 多维列表循环

05-1 自增 自减

  void main() {
    var a = 3;
    var b = a++;

    print(a); // 4
    print(b); // 3
  }
  void main() {
    var a = 3;
    var b = --1;

    print(a); // 2
    print(b); // 2
  }

循环

  • continue 跳过循环
  • break 跳出循环

06 Dart 集合类型List Set Map详解 以及循环语句 forEach map where any every

06-1 List

  • 属性

    • length
    • reversed 反转 返回结果 (苹果,香蕉,李子),使用 toList() 方法转为 List 类型
    • isEmty 和 isNoEmpty
  • 方法

    • add() 增加元素
    • addAll() 拼接 List,传入 List
    • indexOf() 查找元素,传入元素
    • remove() 移除元素,传入元素
    • removeAt() 移除元素,传入索引
    • fillRange(start, end, value) 修改
    • insert(index, value) 插入一个值
    • insertAt(index, List) 插入 List
    • toList() 其他类型转成 List
    • join() List 连接成 String
    • split() String 转成 List
    • forEach()
    • where()
    • any()
    • every()
  • 循环遍历

    • for...in...
    • forEach

06-2 Set

  • 数组去重
void main() {
  var mySet = new Set();
  mySet.allAll(['苹果', '香蕉', '李子', '香蕉', '李子', '香蕉']);
  print(mySet); // {苹果,香蕉,李子}
  print(mySet.toList()) // [苹果,香蕉,李子]
} 

06-3 Map

  • 常用属性
    • keys // 结果 (name,age).toList()
    • values
    • isEmpty
    • isNoEmpty
  • 方法
    • remove(key) 删除指定key的数据
    • addAll({...}) 合并映射 给映射内增加属性
    • containsValue 查看映射内的值 返回true/false
    • forEach
    • map
    • where
    • any
    • every

07 Dart中的函数 函数的定义 可选参数 默认参数 命名参数 箭头函数 匿名函数 闭包等 - 上

07-1 可选参数

  void main() {
    String personInfo(String name, [String sex = '女', int age]) {
      if (age != null) {
        return '姓名:$name -- 性别:$sex -- 年龄保密';
      } else {
        return '姓名:$name -- 性别:$sex -- 年龄:$age';
      }
    }

    persionInfo('Hiraku')
  }

07-2 命名参数

  void main() {
    String personInfo(String name, {String sex = '女', int age}) {
      if (age != null) {
        return '姓名:$name--性别:$sex--年龄保密';
      } else {
        return '姓名:$name--性别:$sex--年龄:$age';
      }
    }

    persionInfo('Hiraku', sex:'男', age:20)
  }

08 Dart中的函数 箭头函数 匿名函数 闭包等-下

08-1 箭头函数

void main() {
  List myList = [2, 4, 6, 8, 34, 3, 7];
  var relList = myList.map((value) => value > 7 ? value * 2 : value);

  print(relList.toList());
}

08-2 函数调用函数

  void main() {
    bool isEven(int number) {
      return number % 2 == 0
    }

    void printEvenNumber(int number) {
      for(int i = 1; i <= number; i++) {
        if(isEven(i)) {
          print(i);
        }
      }
    }

    printEvenNumber(10);
  }

08-3 匿名函数

void main() {
  // 匿名方法
  var myFun = () {
    print('匿名函数执行了---');
  };

  myFun();
}

08-4 自执行方法

void main() {
  // 自执行方法
  (() {
    print('自执行方法执行了---');
  })();
}

08-5 递归

void main() {

  int sum = 0;

  recursiveFunc(int n) {
    sum += n;

    if (n < 1) {
      return;
    }

    recursiveFunc(n-1);
  }

  recursiveFunc(100);

  print(sum);
  
}

08-6 闭包

  • 全局变量特点: 全局变量常驻内存、全局变量污染全局
  • 局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
  • 想实现的功能: 1.常驻内存
    2.不污染全局
  • 产生了闭包,闭包可以解决这个问题.....
  • 闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
  • 闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
  void main() {
    func() {
      int a = 123;
      return () {
        a++;
        print(a);
      };
    }

    var b = func();
    b();
    b();
    b();
  }