Flutter学习笔记(5)--Dart运算符
如需转载,请注明出处:Flutter学习笔记(5)--Dart运算符
先给出一个Dart运算符表,接下来在逐个解释和使用。如下:
描述 | 运算符 |
一元后缀 | expr++ expr-- () [] . ?. |
一元前缀 | -expr !expr ~expr ++expr --expr |
乘法类型 | * / % ~/ |
加法类型 | + - |
移位运算符 | << >> |
与位运算 | & |
异或位运算 | ^ |
或位运算 | | |
关系和类型测试 | >= <= > < as is is! |
等式 | == != |
逻辑与 | && |
逻辑或 | || |
条件 | expr1?expr2:expr3 |
级联 | .. |
赋值 | = *= /= ~/= %= += -= <<= >>= &= ^= |= ??= |
注:在上面的运算符表中,操作符的优先级由上到下逐个减小,上面行内的操作符优先级大于下面行内的操作符;
一.算数运算符
int a = 10; int b = 2; print(a + b); //12 print(a - b); //8 print(a * b); //20 print(a / b); //5.0 这个不是整除,值是duoble类型的 print(a ~/ b);//5 整除,余数部分舍弃取整 print(a % b);//0 去余数 var++,var--,++var,--var 前缀的递增或递减和后缀的递增或递减和java中是一样的; int a = 2; int b = a++;//先赋值,再自增 print(b+','+a);//2,3 int a = 2; int b = a--;//先赋值,再自减 print(b+','+a);//2,1 int a = 2; int b = ++a;//再自增,先赋值 print(b+','+a);//3,3 int a = 2; int b = --a;//再自减,先赋值 print(b+','+a);//1,1
二.关系运算符
int a = 2; int b = 3; print(a == b);//false print(a != b);//true print(a >= b);//false print(a <= b);//true print(a > b);//false print(a < b);//true
三.类型测试操作符
as,is和is!操作符在运行时用于检查类型非常方便,和java中的用法相同,含义如下所示:
操作符 | 含义 |
as | 类型转换 |
is | 当对象是相应类型时返回true |
is! | 当对象不是相应类型时返回true |
if(mClassType is User){ //相同类型,处理一些操作 mClassType.name = 'hello word!'; }
四.赋值操作符
赋值运算没有什么好说的,这里就只强调一下??=的用法吧;
//一般赋值操作,将value赋值给某一变量 a = value; //??=,这个赋值操作符仅在变量为null的时候才会进行赋值 b ??= value;//如果b为null,则将value的值赋给b,否则,b保持不变 //前面我们有说过,在Dart里面,变量如果没有初始化赋值的话,默认值就是null,这个时候,使用??=给b赋值是可以的,如果初始化的时候就给了b一个值,那么再使用??=进行赋值,b的值是不会变的;
五.逻辑运算符
操作符 | 含义 |
!expr | 反转表达式(将false更改为true,反之亦然) |
|| | 逻辑或 |
&& | 逻辑与 |
六.位运算符
final value = 0x22; final bitmask = 0x0f; assert((value & bitmask) == 0x02); // 与 assert((value & ~bitmask) == 0x20); // 与非 assert((value | bitmask) == 0x2f); // 或 assert((value ^ bitmask) == 0x2d); // 异或 assert((value << 4) == 0x220); // 左移 assert((value >> 4) == 0x02); // 右移
七.条件表达式
在Dart里,和java一样有三元运算
var result = isTrue ? 'result1' : 'result2'; //这种是通过布尔类型进行判断,如果条件为真,返回result1,反之条件为false,则返回result2; //还有一种就是判断条件是否为空,如果数据1不为空,就返回数据1,反之,如果数据1为空,则返回数据2; String playerName(String name) => name ?? 'Guest'; //如果name的值不为空,返回name的值,如果name的值为空,返回‘Guest’;
八.级联操作
级联操作用两个点(..)表示(严格来说的话,级联的双点符号不是运算符,这这是Dart语法的一部分),可对同一对象执行一系列操作,类似Java语言里面的点点点处理,级联操作主要目的是为了简化代码,示例如下:
querySelector('#btnOk)//获取一个id为btnOk的按钮对象 ..text = '确定'//给按钮设置文本为'确定' ..classes.add('ButtonOKStyle')//给这个按钮添加一个叫'ButtonOKStyle'的样式 ..onClick.listen((e) => window.alert('确定'));//设置监听事件,事件弹出一个显示‘确定’的alert //这样的操作相当于如下操作: var button = querySelector('#btnOk); button.text = '确定'; button.classes.add('ButtonOKStyle'); button.onClick.listen((e) => window.alert('确定'));
下一章节:Flutter学习笔记(6)--Dart流程控制语句
标签:
Flutter学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】