第二节: Dart 操作符(运算符)

Dart 语法学习目录

第一节: Dart 语法了解,认识变量,常量,数据类型
第二节: Dart 操作符(运算符)
第三节: Dart 中常用集合 List/Map
第四节: Dart 函数使用,声明函数/匿名函数/可选参数/作用域/闭包
第五节: Dart 面向对象/构造函数/静态属性
第六节: Dart中抽象类abstract/接口implements/混入Mixin
第七节: Dart中泛型/泛型定义与使用
第八节: Dart 中的库/自定义库/内置库/第三方库

1. 算术运算符

+ - * / % (取余) ~/(取整)

void main(){

    // 算术运算符
    int num1 = 13;
    int num2 = 5;

    print(num1 + num2);  // 加  18
    print(num1 - num2);  // 减   8
    print(num1 * num2);  // 乘  65
    print(num1 / num2);  // 除  2.6
    print(num1 % num2);  // 取余  3
    print(num1 ~/ num2);  // 取整 2

}

2. 一元运算符

-expr负数 ++expr 递增 expr++ 递增 --expr递减 expr--递减

void main(){

    // 一元运算符
    int num = 13;
    int num2 = 5;

    // 负数
    print(-num);  // 负数 -13

    // 递增
    ++ num;
    num2 ++;
    print(num);    // 14
    print(num2);   // 6

    // 递减
    -- num;
    num2 --;
    print(num);    // 13
    print(num2);   // 5

}

那么++在前在后有什么区别呢

如果不用再表达式中, 在前在后都一样, 都是对当前变量的递增.

如果是在表达式中参与运算结果就不一样了

void main(){

    // 一元运算符 
    int num = 13;

    // ++ 操作符
    int price = num + 12;
    print(price);   // 25
    print(num);     // 13   普通加法 num值不变

    // ++ 操作符在前
    int price2 = ++num + 12;
    print(price2);       // 26
    print(num);          // 14  

    // ++ 在前是先运算自增,然后在运算表达式
    // 等价于
    // ++num  // num+1 变成了14
    // int price2 = num + 12   此时num是14  所以price2值为16

    // ++ 操作符在后
    int price3 = num++ + 12;
    print(price3);       // 26
    print(num);          // 15

    // ++ 在后是先运算表达式,然后在运算自增
    // 等价于
    // int price3 = num + 12   此时num是14  所以price2值为16
    // num++   自增等价于 num+1 变成了15

}

也就是++自增运算符无论在前在后对于变量本事来说都是一样的,就是自身值加1,

所以如果不参与表达式运算, 对于变量本事没有影响

如果参与到表达式中运算, ++在前就是变量先自增,然后用自增的结果参与运算

++在后, 就是先用变量之前的值参与表达式运算, 在让变量自己自增.

3. 关系运算符

== 相等 !=> 大于 < 小于 >= 大于等于 <=小于等于

void main(){

  // 关系运算符
  int num1 = 13;
  int num2 = 5;

  print(num1 == num2);  // 判断是否相等
  print(num1 != num2);  // 判断是否不等
  print(num1 > num2);  // 判断是否大于
  print(num1 < num2);  // 判断是否小于
  print(num1 >= num2);  // 判断是否大于等于
  print(num1 <= num2);  // 判断是否小于等于

}

关系运算符主要用到条件判断里

void main(){

  // 关系运算符
  int num1 = 13;
  int num2 = 5;

  // 条件判断
  if(num1 > num2){
    print("num1 大于 num2");
  }else{
    print("num1 不大于 num2");
  }

}

4. 逻辑运算符

!取反 && 逻辑与(并且的意思) || 逻辑或(或者的意思)

void main(){

  // 逻辑运算符
  bool a = true;
  bool b = false;

  print(!a);
  print(a && b);
  print(a || b);

}

5. 赋值运算符

基础赋值运算符

= 赋值 ??= 变量为 null 时才会赋值,变量不为null不赋值

复合赋值运算符

+= 加等于 -=减等于 *=乘等于 /=除等于 %= 取模等于 ~/=取整等于

5.1 基础赋值
void main(){

  // 赋值运算符
  // 1\. 基本的赋值运算符
  // 普通赋值
  int num = 20;
  int num2 = num;
  print(num);
  print(num2);

  // 判断变量是否为空,为空才赋值,不为空则不赋值
  int n = 6;
  n ??= 23;   // 如果n为空,就赋值23,否则就不给n赋值
  print(n);    // 6

  int n = null;
  n ??= 23;   // 如果n为空,就赋值23,否则就不给n赋值
  print(n);  // 23
}

5.2 复合赋值
void main(){

    // 赋值运算符
    // 2\. 复合赋值运算符
    // 普通赋值
    double num = 30.0;
    int num2 = 20;

    //   += 加等于
    //   num += num2;
    //   print(num);    // 50
    //   print(num2);   // 20

    //   -= 减法等于
    //   num -= num2;
    //   print(num);    // 10
    //   print(num2);   // 20

    //   *= 乘等于
    //   num *= num2;
    //   print(num);    // 600
    //   print(num2);   // 20

    //   /=  除等于
    //   num /= num2;
    //   print(num);    // 1.5
    //   print(num2);   // 20

    //   %= 取模等于
    //   num %= num2;
    //   print(num);    // 10
    //   print(num2);   // 20

    int result = 30;

    //   ~/= 取整等于
    //   result ~/= num2;
    //   print(result);    // 1
    //   print(num2);   // 30

}

6 条件表达式

condition ? expr1 : expr2 三目运算符

expr1 ?? expr2 返回其中不为空的表达式执行结果

6.1 三目运算符
void main(){

  // 三目运算符怒
  bool flag = false;
  String c;
  // if(flag){
  //   c = "我是true";
  // }else{
  //   c = "我是false";
  // }

  // print(c);

  // 三目写法
  c = flag ? "我是true": "我是false";
  print(c);
}

6.2 ?? 运算符

返回其中不为空的表达式执行结果

void main(){

  // ?? 运算符 (有点类似于默认值的感觉)
  int num;
  int num2 = num ?? 23;  // num的值为空,所以将23赋值给num2
  print(num2); // 23

  int a = 10;
  int b = a ?? 23; // a的值不为空,所以将a的值赋值给b
  print(b);   // 10

}

7 .. 联级运算符

..:级联操作符 .. 可以在同一个对象上 连续调用多个函数以及访问成员变量。使用级联操作符可以避免创建临时变量,并且写出来的代码看起来更加流畅。

class Person{
    // 属性
    String name ="小明";
    int age = 18;
    String sex = "男";

    void getInfo(){
        print("${this.name}:${this.age}:${this.sex}");
    }

}

void main(){
    Person student = new Person() ;
    student.getInfo();  // 小明:18:男

    // 修改属性值
    // student.name = "小红";
    // student.age = 14;
    // student.sex = "女";
    // student.getInfo();   // 小红:14:女

    // 修改多个属性值可以使用联级调用
    // 结果完全一样
    student..name = "小红"
        ..age = 14
        ..sex = "女";
    student.getInfo();   // 小红:14:女
}

如果class类不太明白的话也不要紧,后面会继续讲解.

8 类型判定运算符

asis, 和 is! 运算符用于在运行时处理类型检查:
as:类型转换
is:如果对象是指定的类型返回 True
is!:如果对象是指定的类型返回 False
具体例子参考面向对象的总结

9 其他操作符

  1. ():使用方法。代表调用一个方法
  2. []:访问 List。访问 list 中特定位置的元素
  3. .:访问成员(属性)。访问元素,例如 foo.bar 代表访问 foo对象 的 bar 成员
  4. ?.:条件成员访问。和 . 类似,但是左边的操作对象不能为 null,例如
  5. foo?.bar 如果 foonull 则返回 null,否则返回 bar 成员
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容