hello,本篇内容是Dart语言的运算符和分支结构的介绍,如果你想对Dart基础数据类型有所了解,请点击这里。
在Dart语言中,运算符大致分这几种类型:
1. 关系运算符:==(等于)、 !=(不等于)、>(大于)、 <(小于)、 >=(大于等于)、 <=(小于等于)
2. 逻辑运算符:&&(逻辑与)、 ||(逻辑或)、 !(逻辑非)
3. 算术运算符:+(加)、 -(减)、 *(乘)、 /(除)、 ~/(取整)、 %(取余)
4. 赋值运算符:=、+=、-=、*=、/=、~/=、%=、??=
一、运算符
- 关系运算符:==、 !=、>、 <、 >=、 <=
由关系运算符组成的式子叫做关系表达式,表达式一定会返回值,关系表达式的返回值只有两种: 真 或者 假,注意: 一个等号表示赋值,两个等号表示判断是否相等,并且中间不能有空格。
int b = 10, c = 22;
//大于
bool result = b > c;
print(result); //false
//小于等于
result = b <= c;
print(result); //true
//不等于
result = b != c;
print(result); //true
//等于
result = b == c;
print(result); //false
- 逻辑运算符:&&(逻辑与)、 ||(逻辑或)、 !(逻辑非)
由逻辑运算符组成的式子叫做逻辑表达式,逻辑表达式的返回值只有两种: 真 或者 假,
int i = 2, j = 7, k = 9;
//1. 逻辑与&& : 只有当运算符两侧同时为真,该式子才为真,否则为假 (一假则假)
bool res = (i < j) && (i == k);
print(res); //false
res = (j >= i) && (j <= k);
print(res); //true
//2. 逻辑或|| : 只有当运算符两侧同时为假,该式子才为假,否则为真(一真则真)
res = (j == k) || (j >= i);
print(res); //true
//3. 逻辑非 ! : 取反,真变假, 假变真
res = !(j == k);
print(res); //true
//逻辑短路
int d = 0;
//逻辑与短路现象,逻辑与只要左侧表达式为假时,就不在执行右侧的表达式
res = (i > k) && (++d) == 0;
print(d); //0,i>k不成立,右侧++d不执行
//逻辑或短路现象,逻辑或只要左侧表达式为真时,就不在执行右侧的表达式
res = (i + j) >= k || (++d) == 0;
print(d); //0, (i + j) >= k成立,右侧++d不执行
- 算术运算符:+(加)、 -(减)、 *(乘)、 /(除)、 ~/(取整)、 %(取余)
由
算术运算符组成的式子叫做算术表达式,算术表达式的返回值为num类型数据
int a=13;
int b=5;
print(a + b); //18,加
print(a - b); //8,减
print(a * b); //65,乘
print(a / b); //2.6,除
print(a % b); //3,取余
print(a ~/ b); //2,取整
- 赋值运算符:=、??=、+=、*=、/=、%=、~/=
由
赋值运算符组成的式子叫做赋值表达式,赋值表达式是把赋值运算符右侧的值赋给运算符左侧
var x = 10;
print("x = 10 -> ${x}"); // x = 10 -> 10,赋值运算
x += 15;
print("x += 15 -> ${x}"); // x += 15 -> 25,相加并赋值运算
x -= 10;
print("x -= 10 -> ${x}"); // x -= 10 -> 15,相减并赋值运算
x *= 10;
print("x *= 10 -> ${x}"); // x *= 10 -> 150,相乘并赋值运算
double y = 10;
y /= 2;
print("y /= 2 -> ${y}"); // y /= 2 -> 5.0,相除并赋值运算
x ~/= 5;
print("x /= 5 -> ${x}"); // x /= 5 -> 30,取整并赋值运算
x %= 7;
print("x %= 7 -> ${x}"); // x %= 7 -> 2,取余并赋值运算
特殊赋值语句说明:??= 、 ??
a ??= b;表示如果a的值为空,将b的值赋值给a,示例如下:
var temp1;
temp1 ??= "hello";
print(temp1); // hello
var temp2 = "dart";
temp2 ??= "world";
print(temp2); // dart
c = a ?? b;表示如果a的值不为空,就把a赋值给c,如果a的值为空,就把b的值赋值给c,示例如下:
var temp3 = "dart";
var temp4 = temp3 ?? "flutter";
print(temp4); // dart
var temp5;
var temp6 = temp5 ?? "flutter";
print(temp6); // flutter
二、Dart分支语句
语句是组成程序的最小单元,Dart语句的基本结构基本遵守:顺序结构、分支结构、循环结构
- 顺序结构: 程序从Main函数进入后,代码从上往下,依次执行;
- 分支结构: 当程序执行到某个位置的时候,进行条件判断,根据判断的结果来执行不同的操作;
- 循环结构: 程序执行到某个位置时,反复执行某段代码.
- if分支结构
//第一种if分支结构,格式:
if(条件表达式)
{
语句;
}
示例1:有两个数a和b,如果a>b,输出“a>b”
int a = 3, b = 2;
if (a > b) {
print("a>b"); // a>b
}
示例2:有一个整数c,判断如果这个数是偶数,就输出这个数的二倍
int c = 4;
if (c % 2 == 0) {
print(c * 2); //8
}
//注意:判断一个数是否是偶数,可以直接用系统提供函数isEven,即上述:c % 2 == 0可以改为:c.isEven
//第二种if分支结构,格式:
if(条件表达式)
{
语句1;
}else
{
语句2;
}
执行顺序: 先判断条件表达式是否成立,如果成立,执行语句1,否则执行语句2
示例3:求出x,y中的最大值,并赋值给max,将max进行输出
int x = 10, y = 20;
int max;
if (x > y) {
max = x;
} else {
max = y;
}
print(max);
示例4:判断一个整数能不能被2和3整除,如果能输出"该数可以被2和3整除",否则 输出"不能整除"
int x = 12;
if (x % 2 == 0 && x % 3 == 0) {
print("该数可以被2和3整除");
} else {
print("不能整除");
}
示例5:判断年份是否是闰年?如果是闰年,则输出该年是闰年,否则输出该年不是闰年。注意:闰年是能被400整除或者(能被4整除,但是不能被100整除)
int year = 2023;
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
print("该年是闰年");
} else {
print("该年不是闰年");
}
//第三种if分支结构,格式:
if(条件表达式1){
语句1;
}else if(条件表达式2){
语句2;
}else{
语句3;
}
执行顺序: 如果条件表达式1成立,执行语句1,否则判断条件表达式2,如果条件表达式2成立,执行语句2,否则执行语句3,注意:一旦某个语句执行,该分支结构执行完毕
示例6:判断学生的成绩,如果成绩在80-100之间,则输出优秀,如果成绩在60-80之间,则输出中等,否则输出不及格
int score = 85;
if (score < 0 || score > 100) {
print("你咋这么厉害呢");
} else if (score >= 80) {
print("优秀");
} else if (score >= 60) {
print("中等");
} else {
print("不及格");
}
- switch分支结构
日常开发中,单个条件判断使用if...else是最简单方便的。有时还会遇到多个判断条件的情况,我们使用switch...case会比if...else更加高效,也可以避免在维护代码的时候遇到if判断地狱。
示例7:判断一个整数,如果为1~4,对应打出春夏秋冬的英语单词,否则输出:该数不合法
int num = 3;
switch (num) {
case 1:
print("Spring");
break;
case 2:
print("Summer");
break;
case 3:
print("Autumn");
break;
case 4:
print("Winter");
break;
default:
print("该数不合法");
break;
}
注意事项:
1. switch后的表达式类型要与case后的 值的类型保持一致
2. case后面必须是常量或者常量表达式,不能用变量
3. case后面只要有语句,必须加上break,break用于跳出当前操作
4. default语句可有可无,如果有的话只能有一个
5. switch后的表达式只允许比较整型或字符串这类常量。
6. switch中多个case可以执行同一条语句