[dart学习]第五篇:操做符

前言:本系列内容假设读者有必定的编程基础,如了解C语言、python等。python

本节一块儿来学习dart的操做符,直接拷贝官网的操做符描述表以下:express

Description Operator
unary postfix expr++    expr--    ()    []    .    ?.
unary prefix -expr    !expr    ~expr    ++expr    --expr   
multiplicative *    /    %  ~/
additive +    -
shift <<    >>    >>>
bitwise AND &
bitwise XOR ^
bitwise OR |
relational and type test >=    >    <=    <    as    is    is!
equality ==    !=   
logical AND &&
logical OR ||
if null ??
conditional expr1 ? expr2 : expr3
cascade ..
assignment =    *=    /=   +=   -=   &=   ^=   etc.

上表中列出的操做符的前后顺序,是和各操做符的优先级对应的。例如:乘法运算符 * 的优先级高于加法运算符 +。编程

同其余编程语言同样,建议你们在写表达式时不要吝啬使用括号,这样可使代码更易读。如 a*b+3==c*f,建议写成 ((a*b)+3) == (c*f) 的形式。编程语言

这里指出一点:对于双元操做符,如加法运算符+,若是操做符左右两边的参数类型不一致,则以左边的参数类型为准。如: 3.14+6=9.14,使用浮点型的加法运算。ide

下面详细来看各类类型的运算符。post

(一)算术运算符学习

+ Add(加法运算符)
Subtract(减法运算符)
-expr Unary minus, also known as negation (reverse the sign of the expression) (负数表达)
* Multiply (乘法运算符)
/ Divide (除法运算符)
~/ Divide, returning an integer result (返回整型的除法运算符)
% Get the remainder of an integer division (modulo) (取模、取余运算符)

算术运算符比较简单,下面经过几个例子伪代码来讲明:ui

3 + 2  == 5;
6 - 2 == 4;
2 - 9 == -7;
3 * 5 == 15;
5 % 2 == 1;
// 注意如下两个运算符
5 / 2 == 2.5;    //结果是浮点型
5 ~/ 2 == 2;    //结果是整型  

另外,dart还支持++和--(自增、自减)运算,依然看例子:spa

var a,b;

a=0;
b=++a;             // a先自增1,再赋值给b
assert(a==b);    // 1 == 1    

a=0;
b=a++;            // a先赋值给b,而后a再自增1
assert(a!=b);    // 1 != 0;

// --运算同理

(二)关系操做符code

Operator Meaning
== Equal;  (判断相等)
!= Not equal  (判断不相等)
> Greater than  (大于)
< Less than  (小于)
>= Greater than or equal to (大于或等于)
<= Less than or equal to (小于或等于)

这个也比较简单,只需注意如下几点:

      null == null 是正确的,返回true,若其中一个操做数是null,另外一个是非null,则返回false;

          若是须要判断两个操做数是不是相同的类型,可以使用 identical() 接口。

(三)类型检查运算符

Operator Meaning
as Typecast (also used to specify library prefixes)  (用于类型强转)
is True if the object has the specified type  (用于判断变量是否属于某种类型)
is! False if the object has the specified type   (用于判断变量是否不属于某类型)

 依然看官网的例子:

// 例句1
if (emp is Person) { // Type check emp.firstName = 'Bob'; }

// 例句2
(emp as Person).firstName = 'Bob';

上例中,例句1检查emp变量是不是Person类型的实例,若是是,则赋值名称元素Bob,若是不是,则什么也不操做;

例句2将emp强转为Person类型,并尝试对firstname赋值。若是emp不是Person类型,则本句话会抛出异常。

(四)赋值运算符

这个就很是常见了,咱们在其余语言中也是使用最多的就是 = 赋值运算符。dart有一个特例,支持 ??= 赋值运算符。咱们看例子:

// 将value赋值给变量a
a = value;
// 若是b是null,则将value赋值给b; 不然b保持原值
b ??= value;  

dart一样也支持复合赋值运算符,例如: +=、-=、*=、/=、~/=、%=、<<=、>>=、&=、|=、^=  。  具体用法例如 a += 2 表示 a = a + 2;   再也不细述。

(五)逻辑运算符

可使用逻辑运算符反转或组合bool表达式。这个就再也不举例使用了,直接看下表:

Operator Meaning
!expr inverts the following expression (changes false to true, and vice versa)  (逻辑非)
|| logical OR  (逻辑或)
&& logical AND  (逻辑与)

(六)位运算符

这个对于像博主这样搞嵌入式的人来讲再熟悉不过了吧 ^_^

Operator Meaning
& AND  (位与)
| OR    (位或)
^ XOR   (位异或)
~expr Unary bitwise complement (0s become 1s; 1s become 0s)  (位取反)
<< Shift left  (左移)
>> Shift right  (右移)

位运算通常应用于整型数字,这个也属于比较基本的,就也再也不举例了

(七)条件运算符

熟悉C语言的朋友应该知道C语言里边的一个三目运算符 ?:  ,这种运算符可以简化代码(固然,可读性会降低)。dart支持两个条件运算符:

condition ? expr1 : expr2
//若是condition是true,则执行expr1并返回; 不然执行expr2并返回

expr1 ?? expr2
//若是expr1是非空,则执行expr1并返回; 不然执行expr2并返回

咱们看一下第二种运算符的一个例子吧

// Slightly longer version uses ?: operator.
String playerName(String name) => name != null ? name : 'Guest';

// Very long version uses if-else statement.
String playerName(String name) {
  if (name != null) {
    return name;
  } else {
    return 'Guest';
  }
}

// 以上两段代码的做用是等价的

(八)其余运算符

dart还支持一些比较不经常使用或不宜用的运算符(我的观点),好比 级联运算符,本人以为使用这样的运算符会致使代码及其不易读且容易出错。这里就再也不一一列举了,你们能够去官网了解。(附地址: https://dart.dev/guides/language/language-tour#cascade-notation-)

 

Game over.

相关文章
相关标签/搜索