下面我就讲一下dart的算数运算符,基本上任何语言的算数运算符大同小异,每个语言或许有一些特殊的算数运算符,dart语言也有。
算数运算符
-
加减乘除整除取余: +、-、*、/、~/、% //上一章节讲过,
int a = 10; int b = 2; print(a + b); //12 print(a - b); //8 print(a * b); //20 print(a / b); //5.0 这个不是整除,值是duoble类型的 print(a ~/ b);//整除,余数部分舍弃取整 5 print(a % b);//去余数 0
-
递增递减:++var、var++、--var、var--, 前++、-- 和后 ++、--的区别,大家已经看到,特别容易混淆,我就详细的讲一下
- var++、var-- 是先赋值再++、--
- ++var、--var 是先++、--再赋值
int a = 10; print(a++); //10 先赋值再++ print(++a); //12 这个时候a就是11了先++在赋值所以是12 print(a--); //12 先赋值再--,所以还是12 print(--a); //10 这个时候a值就是11了,然后先--再赋值 int b = 10; int c = b ++; //先赋值在++ print(b); //11 已经赋完值了b这时候就是11 print(c); //10 因为是先赋值,c就是10 int d = ++b; //先++在赋值 print(b); //12 print(d); //12 int e = b--; int f = --d; print(e); //12 print(f); //11
关系运算符
运算符:==、!=、>、<、>=、<=
-
判断内容是否相同使用==
int a = 2; int b = 5; print(a == b); //false print(a != b); //true print(a > b); //false print(a < b); //true print(a >= b); //false print(a <= b); //true String str1 = 'dart'; String str2 = 'java'; print(str1 == str2); //false (==表示内容相等)
逻辑运算符
运算符:!、&&、|| (取非、与、或)
&&两边取值都是为真才为真、||两边只要有一个为真就为真
-
针对布尔类型运算
bool isTrue = true; print(!isTrue); //false bool b1 = false; bool b2 = true; print(isTrue && b1); //false print(isTrue && b2); //true print(isTrue || b1); //true print(isTrue || b2); //true print(!isTrue||b1); //false
赋值运算符
-
基础运算符:=、??=(当变量没有赋值的情况赋值,有值就不赋值了)
int b; b ??= 10; print(b); //10 b没有被赋值 b ??= 5; print(b); //10 已经有值了就不赋值了 int c = 20; c ??= 10; print(c); //20 初始化c的时候已经赋值 var str = 'java'; str ??= 'dart'; print(str); //java 已经赋值java var str1; str1 ??= 'dart'; print(str1); //dart 初始化没有赋值
-
复合运算符:+=、-=、*=、/=、~/=、%=
int a = 10; a += 2; print(a); //12 a=a+2 a -= 2; print(a); //10 a=a-2 a *= 2; print(a); //20 a=a*2 a ~/= 2; print(a); //10 a=a~/2 a %= 2; print(a); //0 a=a%2 a /= 2; //会报错,a=a/2 a是int a/2是double类型。 //声明变量是double就可以了 double b = 5.0; b /= 2; print(b); //2.5 b=b/2 //声明变量是num类型也可以,num包含int num类型 num c = 10; c /= 2; print(c); //5.0
条件表达式
-
三目运算符:condition ? expr1 : expr2
int a = 3; int b = (a == 3 ? 4 : 5); //a==3为真执行4,不为真执行5 print(b); //4 String str = (a == 3 ? '执行条件为真' : '执行条件为非真'); print(str); //执行条件为真
-
c=a??b,a值不为空返回a,a值为空执行返回b值。
int a; int b = 10; int c = a??b; print(c); //10; a为空,返回的b值 String strA; String strB = 'java'; String strC = strA??strB; print(strC); //java
控制流语句
-
条件语句:if、if...elseif、if...elseif...else
int score = 90; if (score >=90) { print('优秀'); } else if (80>=score && score<90) { print('良'); } else if (60>=score && score<80) { print('及格'); } else { print('不及格'); } //优秀
-
循环语句:for、forin
//使用for循环 var list = [1,2,3]; for(var i=0; i<list.length; i++) { print(list[i]); } //使用forin循环 for (var item in list) { print(item); } /* 1 2 3 */
*循环语句:while循环、do...while循环
//while 先判断条件在执行
int i = 0;
while (i < 2) {
print(i++);
};
/*
0,
1
*
//这时候i=2
//do...while 先执行一次在判断条件,至少执行一次
do {
print(i--);
} while (i > 0 && i < 3);
/*
2,
1
*/
-
终止当前循环:break 终止离break最近的循环,只能终止一层循环
//当i==2时候已经终止循环了 for (var i = 0; i < 4; i++) { if (i == 2) { break; } print(i); } /* 0, 1 */ //break终止的只是当前循环,只能终止一层循环 for (var i = 0; i < 2; i++) { for (var j = 0; j < 4; j++) { if (j == 1) { break; } print('[$i,$j]'); }; }; /* [0,0] [1,0] */
-
跳出当前循环:continue 跳出当前循环并且只能跳出一层循环
//当i==2时候已经跳出循环,执行下一次循环 for (var i = 0; i < 4; i++) { if (i == 2) { continue; } print(i); } /* 0, 1, 3 */ //contiue跳出的只是当前循环,只能跳出一层循环 for (var i = 0; i < 2; i++) { for (var j = 0; j < 4; j++) { if (j == 1) { continue; } print('[$i,$j]'); }; }; /* [0,0] [0,2] [0,3] [1,0] [1,2] [1,3] */
switch...case语句
比较类型可以有:num、String、编译期常量、对象、枚举
非空case必须有一个默认情况
default 处理默认情况
-
continue 跳转标签
//language 也可以是num、String、编译期常量、对象、枚举这几种类型 String language = 'java'; switch(language) { case 'dart': print('dart language'); break; case 'java': print('java language'); break; case 'python': print('python language'); break; default: print('none'); } //java language /* 用continue跳转到位置执行最近的case TopTest名字可以随便起 */ switch(language) { case 'dart': print('dart language'); break; case 'java': print('java language'); continue TopTest //break; case 'python': print('python language'); break; TopTest: default: print('none'); } /* java language none */
assert 中断代码流
如果一个布尔条件值为false,使用assert语句来中断正常执行的代码
Assert语句仅仅只能在调试模式下使用,在生产模式下没有任何作用。
在assert语句后面的括号中,你可以加入任何表示布尔值或者函数的表达式。
-
如果表达式的值或者函数返回值true,则assert语句成功并继续执行代码。如果值为false,则assert语句失败并抛出一个异常
//确保这个变量不为空值. assert(text != null); //确保这个变量小于100. assert(number < 100); //确保它是一个https协议类型的URL. assert(urlString.startsWith(‘https’));