学过其他计算机语言的一般会接触各种各样的运算符,掌握了基础,那学习Dart相关运算符就可以得心应手。了解这些有什么意义呢?在实际工作中这些场景会经常用到运算符,例如商城项目计算商品价格(主要用到算术运算符),商品满打折(用到算术运算符,关系运算符),优惠券在有效期内,购物总价格超过阈值可以使用(用到逻辑运算符,算术运算符,关系运算符)。理解这些运算符含义再 实际工作中是有非常待帮助。Dart语言常用运算符有如下这些算术运算符,关系运算符,类型判定运算符,赋值运算符,逻辑运算符,按位和移位运算符,级联运算符。
1算术运算符 +(加), –(减) ,*(乘), /(除),~/(除后返回整数),%(取余)
示例
void testOperatorAdd(){ var num=1; var num2=2; print("num=1 num2=2 num+num2=${num+num2}"); print("num=1 num2=2 num~/num2=${num~/num2}"); print("num=1 num2=2 num/num2=${num/num2}"); print("num=1 num2=2 num-num2=${num-num2}"); print("num=1 num2=2 num*num2=${num*num2}"); print("num=1 num2=2 num%num2=${num%num2}"); } 结果 num=1 num2=2 num+num2=3 num=1 num2=2 num~/num2=0 num=1 num2=2 num/num2=0.5 num=1 num2=2 num-num2=-1 num=1 num2=2 num*num2=2 num=1 num2=2 num%num2=1
关系运算符 ==, !=, > , <, >=,<=
示例
testRelationship(){ var num=1; var num2=2; print("num num2 ${num}==${num2} 结果 ${num==num2} "); print("num num2 ${num}!=${num2} 结果 ${num==num2} "); print("num num2 ${num}>${num2} 结果 ${num>num2} "); print("num num2 ${num}<${num2} 结果 ${num<num2} "); print("num num2 ${num}>=${num2} 结果 ${num>=num2} "); print("num num2 ${num}<=${num2} 结果 ${num<=num2} "); } 结果 num num2 1==2 结果 false num num2 1!=2 结果 false num num2 1>2 结果 false num num2 1<2 结果 true num num2 1>=2 结果 false num num2 1<=2 结果 true
2类型判定运算符as(强制类型转换),is,is!
示例
void testLogical(){ bool result=false; bool result1=true; print("result=false result1=true result||result1 结果 ${result||result1}"); print("result=false result1=true result&&result1 结果 ${result&&result1}"); print("result=false result1=true !result结果 ${!result}"); } 结果 result=false result1=true result||result1 结果 true result=false result1=true result&&result1 结果 false result=false result1=true result&&result1 结果 true
3赋值运算符=, –= , /=,%=,>>=,^=,+=,*=,~/=,<<=,&=,|=
示例
testSetVal(){ var num=1.1; var num2=2; print("num=1.1 num2=2 num–=num2 相当于num=num-num2 结果${num-=num2}"); print("num=1.1 num2=2 num+=num2 相当于num=num+num2 结果${num+=num2}"); print("num=1.1 num2=2 num*=num2 相当于num=num*num2 结果${num*=num2}"); print("num=1.1 num2=2 num/=num2 相当于num=num/num2 结果${num/= num2}"); print("num=1.1 num2=2 num~/=num2 相当于num=num~/num2 结果${num2=num2~/=1}"); print("num=1.1 num2=2 num%=num2 相当于num=num%num2 结果${num%= num2}"); print("num=1.1 num2=2 num<<=num2 相当于num=num<<num2 结果${num2= num2<<1}"); print("num=1.1 num2=2 num>>=num2 相当于num=num<<num2 结果${num2= num2>>1}"); bool resu1t=true; bool result1=false; print("resu1t=true result1=false resu1t&=result1 相当于resu1t=resu1t&result1 结果${resu1t&=result1}"); print("resu1t=true result1=false resu1t^=result1 相当于resu1t=resu1t^result1结果${resu1t^=result1}"); print("resu1t=true result1=false resu1t|=result1 相当于resu1t=resu1t|result1结果${resu1t|=result1}"); } 结果 num=1.1 num2=2 num–=num2 相当于num=num-num2 结果-0.8999999999999999 num=1.1 num2=2 num+=num2 相当于num=num+num2 结果1.1 num=1.1 num2=2 num*=num2 相当于num=num*num2 结果2.2 num=1.1 num2=2 num/=num2 相当于num=num/num2 结果1.1 num=1.1 num2=2 num~/=num2 相当于num=num~/num2 结果2 num=1.1 num2=2 num%=num2 相当于num=num%num2 结果1.1 num=1.1 num2=2 num<<=num2 相当于num=num<<num2 结果4 num=1.1 num2=2 num>>=num2 相当于num=num<<num2 结果2 resu1t=true result1=false resu1t&=result1 相当于resu1t=resu1t&result1 结果false resu1t=true result1=false resu1t^=result1 相当于resu1t=resu1t^result1结果false resu1t=true result1=false resu1t|=result1 相当于resu1t=resu1t|result1结果false
4逻辑运算符 !expr, ||, &&
示例
void testBit(){ var num=1; var num1=2; print("num=1 and num1=1 num&num1 结果 ${num&num1}"); print("num=1 and num1=1 num&~num1 结果 ${num&num1}"); print("num=1 and num1=1 num|num1 结果 ${num|num1}"); print("num=1 and num1=1 num^num1 结果 ${num^num1}"); print("num=1 and num1=1 num<<num1 结果 ${num<<num1}"); print("num=1 and num1=1 num>>num1 结果 ${num>>num1}"); } 结果 void testBit(){ var num=1; var num1=2; print("num=1 and num1=2 num&num1 结果 ${num&num1}"); print("num=1 and num1=2 num&~num1 结果 ${num&num1}"); print("num=1 and num1=2 num|num1 结果 ${num|num1}"); print("num=1 and num1=2 num^num1 结果 ${num^num1}"); print("num=1 and num1=2 num<<num1 结果 ${num<<num1}"); print("num=1 and num1=2 num>>num1 结果 ${num>>num1}"); }
5位运算符 &(与 ),|(或),^(异或 两个位相同为0,相异为1),~expr(取反,例如0取反为1),<<(左移),>>(右移)
这种是这样计算的 当1 与2 进行与位运算 首先底层会将1和2转成64位二进制再与运算
00...........01
&
00...........10
_____________
00...........00 最后为0
示例
void testBit(){ var num=1; var num1=2; print("num=1 and num1=1 num&num1 结果 ${num&num1}"); print("num=1 and num1=1 num&~num1 结果 ${num&num1}"); print("num=1 and num1=1 num|num1 结果 ${num|num1}"); print("num=1 and num1=1 num^num1 结果 ${num^num1}"); print("num=1 and num1=1 num<<num1 结果 ${num<<num1}"); print("num=1 and num1=1 num>>num1 结果 ${num>>num1}"); } 结果 num=1 and num1=1 num&num1 结果 0 num=1 and num1=1 num&~num1 结果 0 num=1 and num1=1 num|num1 结果 3 num=1 and num1=1 num^num1 结果 3 num=1 and num1=1 num<<num1 结果 4 num=1 and num1=1 num>>num1 结果 0
6级联运算符可以实现对同一个对像进行一系列的操作。 除了调用函数, 还可以访问同一对象上的字段属性。
示例
TestType()..result=false ..testBit(); 相当于TestType testType=new TestType(); testType.result=false; result=false
下一讲(待续) 7-Flutter应用开发语言Dart语法类定义