Dart语言第四章简单入门
一.各类逻辑运算符
描述 | 运算符 |
---|---|
一元后缀 | expr++ 、 expr– 、 () 、 [] 、 . |
一元前缀 | -expr 、 !expr 、 ~expr 、 ++expr 、 –expr |
乘法 | *** 、 / 、 % 、 ~/ |
加法 | + 、 - |
移位 | << 、 >> |
按位与 | & |
按位或 | | |
关系和类型判断 | >= 、 > 、 <= 、 < 、 as 、 is 、 is! |
相等 | == 、 != |
逻辑与 | && |
逻辑或 | || |
条件式 | expr1 ? expr2 : expr3 |
级联 | … |
赋值 | = 、 = 、 /= 、 ~/= 、 %= 、 += 、 -= 、 <<= 、 >>= 、 &= 、 ^= 、 |= |
以上是dart语言的运算符展示表,其中有我们常用的数学运算符,也有计算机语言相通提供的逻辑运算符。我们重点了解一下其中不常用或是大家不熟悉的几种表达式:
1.一元后缀与一元前缀:
expr++与expr–,其中的expr我们可以看作一个数值的表示,没有什么其他的含义。你可以把他理解为a++和a–,那么他们的区别和含义在哪里呢?
粗略的说:
- a++是当前值计算表达式,然后将变量a的值+1;
- 而++a是先将a的值+1,然后使用新的值来计算表达式。
从结果的角度来看,他们两者并无区别,但是在程序运行中,牵扯到程序执行的效率
- 前缀运算符:(程序员自定义)将值+1,然后返回结果;
- 后缀运算符:首先复制一个副本,将其值+1,然后将复制的副本返回;
如果把一个占用内存较大的类作为循环量对其使用递增(递减)运算符时,我们就应当使用前缀运算符++a(–a)
2.条件式:
expr1 ? expr2 : expr3
这个是条件表达式,表示如果expr1为真,则表达式值为expr2,如果a为假,则表达式值为expr3
举个例子:
条件语句:
if(a>b) max=a;
else max=b;
可用条件表达式写为
max=(a>b)?a:b;
执行该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max.
使用条件表达式时,还应注意以下几点:
-
条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符.
因此
max=(a>b)?a:b
可以去掉括号而写为
max=a>b?a:b -
条件运算符?和:是一对运算符,不能分开单独使用.
-
条件运算符的结合方向是自右至左.
例如:
a>b?a:c>d?c:d
应理解为
a>b?a:(c>d?c:d)
3.级联
后面再填坑,目前不好解释
二.数学运算符
运算符 | 意义 |
---|---|
+ | 加法 |
- | 减法 |
-expr | 取反,或称否定(反向表达式) |
* | 乘法 |
/ | 除法 |
~/ | 整除 |
% | 模运算,取整除后的余 |
数学运算,不做过多解释。
assert函数:
可理解为判定函数,如果它的条件返回错误,则终止程序执行
实例:
main() {
assert(2 + 3 == 5);
assert(2 - 3 == -1);
assert(2 * 3 == 6);
assert(5 / 2 == 2.5);
assert(5 ~/ 2 == 2);
assert(5 % 2 == 1);
}
这是运算正确的情况,程序可以正常输出
main() {
assert(2 + 3 == 4);//此处进行了修改2+3==4了
assert(2 - 3 == -1);
assert(2 * 3 == 6);
assert(5 / 2 == 2.5);
assert(5 ~/ 2 == 2);
assert(5 % 2 == 1);
}
程序输出异常:Failed assertion: line 2 pos 10: ‘2 + 3 == 4’: is not true.
我们可利用assert函数来进行判错
三.相等与关系运算符
运算符 | 意义 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
assert(2 == 2);
assert(2 != 3);
assert(3 > 2);
assert(2 < 3);
assert(3 >= 3);
assert(2 <= 3);
四.流程控制语句
流程控制语句注意分5类,现在我们逐个介绍:
1.if和else
if和else是最常用的流程控制语句,我们来举例说明:
main() {
String today = 'Monday';
if (today == 'Monday') {
print('周一');
} else if (today == 'Tuesday') {
print('周二');
} else {
print('周末');
}
}//输出周一
另一种情况:
main() {
String today = 'Tuesday';
if (today == 'Monday') {
print('周一');
} else if (today == 'Tuesday') {
print('周二');
} else {
print('周末');
}
}//输出周二
2.for循环
下面是一个简单的for循环
main() {
for (var i = 0; i < 5; i++) {
print('哈');
}
} //输出: 哈
// 哈
// 哈
// 哈
// 哈
由循环体及循环的判定条件两部分组成,其表达式为:
for(单次表达式;条件表达式;末尾循环体){
中间循环体
}
循环的单次表达式可作为某一变量的初始化赋值语句,用来给循环控制变量赋初值, 也可用来计算其它与for循环无关但先于循环部分处理的一个表达式。,条件表达式是一个关系表达式,其为循环的正式开端,当条件表达式成立时执行中间循环体。执行末尾循环体后将再次进行条件判断,若条件还成立,则继续重复上述循环,当条件不成立时则跳出当下for循环。
3.while循环
以下是一个简单的while循环:
main() {
var temp = 0;
while (temp < 5) {
print("太极马保国");
temp++;
//break;
}
}
//输出:太极马保国
//太极马保国
//太极马保国
//太极马保国
//太极马保国
while循环里while旁边括号内为循环执行条件,不满足条件时循环停止
任何一种循环都可以用break;打断循环
4.switch选择结构
main() {
String today = 'Monday';
switch (today) {
case 'Monday':
print('周一');
break;
case 'Tuesday':
print('周二');
break;
}
}//周一
main() {
String today = 'Tuesday';
switch (today) {
case 'Monday':
print('周一');
break;
case 'Tuesday':
print('周二');
break;
}
}//周二
满足case条件后将执行此分支结构