Dart 语言入门扫盲篇之3:【运算符】

370 阅读1分钟

【量】的修饰符

关键词:算术、关系、位、逻辑、赋值、条件、类型检查、级联
·算术运算符
+、-、*、/、%、++、--、-expr(反转表达式的符号)、~/(整除,将相除后的结果取整返回)
  /// 整除 ~/
  var x = 4 / 2; //除
  var x1 = 4 ~/ 2; //整除
  print('除 输出:$x, $x1'); //结果:除 输出:2.5, 2
·关系运算符
 ==、!=、<、>、>=、<=
·类型检查运算符
as(类型转换)、is(如果对象具有指定的类型,则为true)、is! (如果对象具有指定的类型,则为false)
/// is、 is!
var testIs = 'testIs';
print('testIs 输出:${(testIs is String)}'); // true
print('testIs 输出:${(testIs is! String)}'); // false

/// as
Person mChild = Child();
String school = (mChild as Child).school;
print('school 输出: $school');
·位运算符
&、|、^、~、<<、>>
· 赋值运算符
=、+=、-=、*=、/=、??= (默认值兜底赋值,仅当变量为null时,把值赋给变量)
·逻辑运算符
||、&&、!expr
·条件表达式
?:、??
//这里就介绍下 dart 里面用的几个与 问号(?) 相关的符号

/// ??=  兜底赋值,当参数为 null 时,赋值
var a = Person();
a.name ??= "小明"; 
print('??= 输出:$a, ${a.name}');

/// ?. 空操作, 当 ?. 的值为 null 时,跳过该运行语句
var c = Person();
//当 address / note 为null 时,则不会运行 if 里面的判断语句
if (c.address?.note?.isEmpty == true) { 
  var d = c.address?.note;
  print('?. 输出:$c, $d');
}

/// condition ? expr1 : expr2
/// 如果条件为真,返回expr1,否则返回expr2
bool isPublic = true;
var visibility = isPublic ? 'public' : 'private';
print('?: 输出:$visibility');

/// expr1 ?? expr2
/// 如果expr1为非空,则返回其值;否则,计算并返回expr2的值。
String playerName(String name) => name ?? 'Guest';
print('?? 输出:${playerName(null)}');

//上面的语句使用其它实现:
//使用 ?: 
String playerName(String name) => name != null ? name : 'Guest';
//使用if - else
String playerName(String name) {
    if (name != null) {
        return name;
    } else {
        return 'Guest';
    }
}

·级联(..)

级联(..)允许您在同一个对象上创建一个操作序列。除了函数调用之外,您还可以访问同一对象上的字段。这通常可以省去创建临时变量的步骤,能使你更为流畅的写代码。

  注意:函数要有返回值才能使用级联

Child child = Child()
  ..name = '小明'
  ..age = 15
  ..address = Address()
  ..setSchool('中学');
  
  等同于:
  var child = Child()
  child.name = '小明';
  child.age = 15;
  child.classes = Address();
  child.setSchool('中学');