Flutter - Dart 基础(运算符和流程控制语句)

492 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

运算符

在 Dart 的运算符中,很多运算符同其他语言一样。关于这些相同运算符的使用这里就不多做功课了,但是,对于 Dart 中特殊的运算符这里会做对应的说明

类型判断运算符

使用 runtimeTypeisis! 进行类型检测

String city = "Dart";
if (city.runtimeType == String) { 
    print("String 类型");
} else {
    print("非 String 类型");
}
if (city is String) {
    print("String类型");
} else {
    print("非String类型");
}
if (city is! String) {
    print("非String类型");
} else {
    print("String类型");
}

值的检查

使用 isEmptyisNotEmptyisNaNnull 进行值的检查

String job = "法师";
if (job.isEmpty) {
  print("空空如也");
} else {
  print(job);  //法师
}

if (job.isNotEmpty) {
  print(job);  //法师
} else {
  print("空空如也");
}

var level = 0 / 0;
if (level.isNaN) {
  print("非数字");  //非数字
} else {
  print("数字");
}

var car;
if (car == null) {
  print("空空如也");  //空空如也
} else {
  print(car);
}

var count = 0;
assert(count <= 0);
if (count <= 0) {
  print("空空如也");  //空空如也
} else {
  print("富甲一方");
}

赋值运算符 ??=

  • 当变量为 null 时,使用后面的内容进行赋值

    void main(List<String> args) {
        var str = null;
        str ??= "dart";
        print(str);
    }
    
  • 当变量有值时,使用自己原来的值

    void main(List<String> args) {
        var str = "dart";
        str ??= "java";
        print(str);  // dart
    }
    

条件表达式 ??

  • obj1 赋值给 obj3,如果 obj1null,则返回 obj2 的结果

    void main(List<String> args) {
        var obj1 = null;
        var obj2 = "java";
        var obj3 = obj1 ?? obj2;
        
        print(obj3); // java
    }
    
  • obj1 赋值给 obj3,如果 obj1 不是 null,直接使用 obj1 的结果

    void main(List<String> args) {
        var obj1 = "dart";
        var obj2 = "java";
        var obj3 = obj1 ?? obj2;
        
        print(obj3); //dart
    }
    

级联语法..

在同一个对象上连续调用多个对象的变量或方法

class Student {
    String? name;
    int? age;
    
    void sayHI() {
        print("我的名字叫$name, 我今年$age岁");
    }
    
    void study() {
        print("study");
    }
    
    void play() {
        print("play");
    }
}


void main(List<String> args) {
    
    // 普通调用方式
    final stu = Student();
    stu.name = "xiaoming";
    stu.age = 12;
    stu.sayHI();
    stu.study();
    stu.play();
    
    // 使用级联语法调用
    final stu1 = Student()
        ..name = "hanmeimei"
        ..age = 12
        ..sayHI()
        ..study()
        ..play();
}

流程控制语句

同样,在 Dart 的流程控制语句中,很多流程控制语句同其他语言一样。关于这些相同流程控制语句的使用这里就不多做功课了,但是,对于 Dart 中特殊的流程控制语句这里会做对应的说明

if 和 else

关于 if 的判断,不支持非空即真或者非 0 即真,必须有明确的 bool 类型

  • 错误写法

    final stu = Student();
    
    if (stu.athletes) {
        print(stu.athletes);
    }
    
  • 正确写法

    final stu = Student();
    if (stu.athletes == true) {
        print(stu.athletes);
    }
    

switch-case

在 dart 中,每一个 case 语句,默认情况下必须以一个 break 结尾

main(List<String> args) {
  var direction = 'east';
  switch (direction) {
    case 'east':
      print('东面');
      break;
    case 'south':
      print('南面');
      break;
    case 'west':
      print('西面');
      break;
    case 'north':
      print('北面');
      break;
    default:
      print('其他方向');
  }
}