Flutter学习笔记(5)--Dart运算符
如需转载,请注明出处:Flutter学习笔记(5)--Dart运算符
先给出一个Dart运算符表,接下来在逐个解释和使用。如下:
| 描述 | 运算符 |
| 一元后缀 | expr++ expr-- () [] . ?. |
| 一元前缀 | -expr !expr ~expr ++expr --expr |
| 乘法类型 | * / % ~/ |
| 加法类型 | + - |
| 移位运算符 | << >> |
| 与位运算 | & |
| 异或位运算 | ^ |
| 或位运算 | | |
| 关系和类型测试 | >= <= > < as is is! |
| 等式 | == != |
| 逻辑与 | && |
| 逻辑或 | || |
| 条件 | expr1?expr2:expr3 |
| 级联 | .. |
| 赋值 | = *= /= ~/= %= += -= <<= >>= &= ^= |= ??= |
注:在上面的运算符表中,操作符的优先级由上到下逐个减小,上面行内的操作符优先级大于下面行内的操作符;
一.算数运算符
int a = ;
int b = ;
print(a + b); //
print(a - b); //8
print(a * b); //
print(a / b); //5.0 这个不是整除,值是duoble类型的
print(a ~/ b);//5 整除,余数部分舍弃取整
print(a % b);//0 去余数 var++,var--,++var,--var
前缀的递增或递减和后缀的递增或递减和java中是一样的;
int a = ;
int b = a++;//先赋值,再自增
print(b+','+a);//2,3 int a = ;
int b = a--;//先赋值,再自减
print(b+','+a);//2,1 int a = ;
int b = ++a;//再自增,先赋值
print(b+','+a);//3,3 int a = ;
int b = --a;//再自减,先赋值
print(b+','+a);//1,1
二.关系运算符
int a = ;
int b = ;
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 << ) == 0x220); // 左移
assert((value >> ) == 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学习笔记(5)--Dart运算符的更多相关文章
- Flutter学习笔记(4)--Dart函数
如需转载,请注明出处:Flutter学习笔记(4)--Dart函数 Dart是一个面向对象的语言,所以函数也是对象,函数属于Function对象,函数可以像参数一样传递给其他函数,这样便于做回调处理: ...
- Flutter学习笔记(8)--Dart面向对象
如需转载,请注明出处:Flutter学习笔记(7)--Dart异常处理 Dart作为高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式,基于mixin的继承方式是指:一个类可以继承自多 ...
- Flutter学习笔记(3)--Dart变量与基本数据类型
一.变量 在Dart里面,变量的声明使用var.Object或Dynamic关键字,如下所示: var name = ‘张三’: 在Dart语言里一切皆为对象,所以如果没有将变量初始化,那么它的默认值 ...
- Flutter学习笔记(6)--Dart异常处理
如需转载,请注明出处:Flutter学习笔记(6)--Dart异常处理 异常是表示发生了意外的错误,如果没有捕获异常,引发异常的隔离程序将被挂起,并且程序将被终止: Dart代码可以抛出并捕获异常,但 ...
- Flutter学习笔记(6)--Dart流程控制语句
如需转载,请注明出处:Flutter学习笔记(5)--Dart流程控制语句 条件语句:if.if...elseif.if...elseif...else ; ) { print('优秀'); } &g ...
- Flutter学习笔记(9)--组件Widget
如需转载,请注明出处:Flutter学习笔记(9)--组件Widget 在Flutter中,所有的显示都是Widget,Widget是一切的基础,我们可以通过修改数据,再用setState设置数据(调 ...
- Flutter学习笔记(10)--容器组件、图片组件
如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...
- Flutter学习笔记(11)--文本组件、图标及按钮组件
如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 文本组件 文本组件(text)负责显示文本和定义显示样式,下表为text常见属性 Text组件属性及描述 属性名 类型 默认 ...
- Flutter学习笔记(12)--列表组件
如需转载,请注明出处:Flutter学习笔记(12)--列表组件 在日常的产品项目需求中,经常会有列表展示类的需求,在Android中常用的做法是收集数据源,然后创建列表适配器Adapter,将数据源 ...
随机推荐
- IIS运行WCF服务报错
试图加载格式不正确的程序 image 解决方法 image HTTP 错误 500.19 image 解决方法在控制面板————>程序————>启用或关闭windows功能—— ...
- aravel 之父 Taylor Otwell :我是如何工作的
知名 PHP Web 开发框架 Laravel 之父 Taylor Otwell 发文描述了自己的日常工作状态:全职做 Laravel ,朝八晚五,使用 Sublime Text 3 写代码,终端使用 ...
- python3 提示No module named _sqlite3
yum install sqlite-devel 下载python3.6.3 重新编译安装 ./configure --enable-loadable-sqlite-extensions & ...
- Qt SizePolicy 属性(每个控件都有一个合理的缺省sizePolicy。QWidget.size()默认返回值是(640, 480),QWidget.sizeHint()默认返回值是(-1, -1))
控件的sizePolicy说明控件在布局管理中的缩放方式.Qt提供的控件都有一个合理的缺省sizePolicy,但是这个缺省值有时不能适合 所有的布局,开发人员经常需要改变窗体上的某些控件的sizeP ...
- Qt中事件处理的顺序
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息.原文链接.原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途. 谢谢合作.原文链接:Qt中事件处理的顺序 文章内容主要来自 ...
- Resolve conflict using "MERGE_HEAD (origin/HEAD)"
Git进行同步的时候,经常会出现冲突,有时候冲突的选项会有图示中的三种选项: 1.Resolved:直接把文件标识为冲突已经解决,一般是自己手动查看并解决完冲突以后使用. 2.Resolve conf ...
- Android零基础入门第77节:Activity任务栈和启动模式
通过前面的学习,Activity的基本使用都已掌握,接下来一起来学习更高级的一些内容. Android采用任务栈(Task)的方式来管理Activity的实例.当启动一个应用时,Android就会为之 ...
- 使用Chart控件进行实时监控
Chart作为微软提供绘制图表的控件,在刚开始使用时非常的迷茫,因为功能强大,涉及到的知识多, 一开始难以接收过来,但后天经过查找资料,耐心学习,终于还是有了一定的收获. Chart相当于一个大的图纸 ...
- 【Qt】一劳永逸解决UAC问题(修改mkspecs\win32-msvc2012\qmake.conf)
如果你的程序跑在一个开启了UAC保护的系统中,而你的程序又没有"盾牌"的话,程序总是会受到各种阻挠的,比如读写文件,写注册表等. 有了"盾牌"的话就不会出现一些 ...
- OpenSSL所有版本的变化,从1.1开始架构有所变化,生成的lib名称也有所不同了,以及对Qt的影响
The complete explanation is that 1.0.x and 1.1.x do not have the same naming conventions for the gen ...