下面我就講一下dart的算數(shù)運(yùn)算符,基本上任何語(yǔ)言的算數(shù)運(yùn)算符大同小異,每個(gè)語(yǔ)言或許有一些特殊的算數(shù)運(yùn)算符,dart語(yǔ)言也有。
算數(shù)運(yùn)算符
-
加減乘除整除取余: +、-、*、/、~/、% //上一章節(jié)講過(guò),
int a = 10; int b = 2; print(a + b); //12 print(a - b); //8 print(a * b); //20 print(a / b); //5.0 這個(gè)不是整除,值是duoble類型的 print(a ~/ b);//整除,余數(shù)部分舍棄取整 5 print(a % b);//去余數(shù) 0 -
遞增遞減:++var、var++、--var、var--, 前++、-- 和后 ++、--的區(qū)別,大家已經(jīng)看到,特別容易混淆,我就詳細(xì)的講一下
- var++、var-- 是先賦值再++、--
- ++var、--var 是先++、--再賦值
int a = 10; print(a++); //10 先賦值再++ print(++a); //12 這個(gè)時(shí)候a就是11了先++在賦值所以是12 print(a--); //12 先賦值再--,所以還是12 print(--a); //10 這個(gè)時(shí)候a值就是11了,然后先--再賦值 int b = 10; int c = b ++; //先賦值在++ print(b); //11 已經(jīng)賦完值了b這時(shí)候就是11 print(c); //10 因?yàn)槭窍荣x值,c就是10 int d = ++b; //先++在賦值 print(b); //12 print(d); //12 int e = b--; int f = --d; print(e); //12 print(f); //11
關(guān)系運(yùn)算符
運(yùn)算符:==、!=、>、<、>=、<=
-
判斷內(nèi)容是否相同使用==
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 (==表示內(nèi)容相等)
邏輯運(yùn)算符
運(yùn)算符:!、&&、|| (取非、與、或)
&&兩邊取值都是為真才為真、||兩邊只要有一個(gè)為真就為真
-
針對(duì)布爾類型運(yùn)算
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
賦值運(yùn)算符
-
基礎(chǔ)運(yùn)算符:=、??=(當(dāng)變量沒(méi)有賦值的情況賦值,有值就不賦值了)
int b; b ??= 10; print(b); //10 b沒(méi)有被賦值 b ??= 5; print(b); //10 已經(jīng)有值了就不賦值了 int c = 20; c ??= 10; print(c); //20 初始化c的時(shí)候已經(jīng)賦值 var str = 'java'; str ??= 'dart'; print(str); //java 已經(jīng)賦值java var str1; str1 ??= 'dart'; print(str1); //dart 初始化沒(méi)有賦值 -
復(fù)合運(yùn)算符:+=、-=、*=、/=、~/=、%=
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; //會(huì)報(bào)錯(cuò),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
條件表達(dá)式
-
三目運(yùn)算符:condition ? expr1 : expr2
int a = 3; int b = (a == 3 ? 4 : 5); //a==3為真執(zhí)行4,不為真執(zhí)行5 print(b); //4 String str = (a == 3 ? '執(zhí)行條件為真' : '執(zhí)行條件為非真'); print(str); //執(zhí)行條件為真 -
c=a??b,a值不為空返回a,a值為空?qǐng)?zhí)行返回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
控制流語(yǔ)句
-
條件語(yǔ)句:if、if...elseif、if...elseif...else
int score = 90; if (score >=90) { print('優(yōu)秀'); } else if (80>=score && score<90) { print('良'); } else if (60>=score && score<80) { print('及格'); } else { print('不及格'); } //優(yōu)秀 -
循環(huán)語(yǔ)句:for、forin
//使用for循環(huán) var list = [1,2,3]; for(var i=0; i<list.length; i++) { print(list[i]); } //使用forin循環(huán) for (var item in list) { print(item); } /* 1 2 3 */
*循環(huán)語(yǔ)句:while循環(huán)、do...while循環(huán)
//while 先判斷條件在執(zhí)行
int i = 0;
while (i < 2) {
print(i++);
};
/*
0,
1
*
//這時(shí)候i=2
//do...while 先執(zhí)行一次在判斷條件,至少執(zhí)行一次
do {
print(i--);
} while (i > 0 && i < 3);
/*
2,
1
*/
-
終止當(dāng)前循環(huán):break 終止離break最近的循環(huán),只能終止一層循環(huán)
//當(dāng)i==2時(shí)候已經(jīng)終止循環(huán)了 for (var i = 0; i < 4; i++) { if (i == 2) { break; } print(i); } /* 0, 1 */ //break終止的只是當(dāng)前循環(huán),只能終止一層循環(huán) 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] */ -
跳出當(dāng)前循環(huán):continue 跳出當(dāng)前循環(huán)并且只能跳出一層循環(huán)
//當(dāng)i==2時(shí)候已經(jīng)跳出循環(huán),執(zhí)行下一次循環(huán) for (var i = 0; i < 4; i++) { if (i == 2) { continue; } print(i); } /* 0, 1, 3 */ //contiue跳出的只是當(dāng)前循環(huán),只能跳出一層循環(huán) 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語(yǔ)句
比較類型可以有:num、String、編譯期常量、對(duì)象、枚舉
非空case必須有一個(gè)默認(rèn)情況
default 處理默認(rèn)情況
-
continue 跳轉(zhuǎn)標(biāo)簽
//language 也可以是num、String、編譯期常量、對(duì)象、枚舉這幾種類型 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跳轉(zhuǎn)到位置執(zhí)行最近的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 中斷代碼流
如果一個(gè)布爾條件值為false,使用assert語(yǔ)句來(lái)中斷正常執(zhí)行的代碼
Assert語(yǔ)句僅僅只能在調(diào)試模式下使用,在生產(chǎn)模式下沒(méi)有任何作用。
在assert語(yǔ)句后面的括號(hào)中,你可以加入任何表示布爾值或者函數(shù)的表達(dá)式。
-
如果表達(dá)式的值或者函數(shù)返回值true,則assert語(yǔ)句成功并繼續(xù)執(zhí)行代碼。如果值為false,則assert語(yǔ)句失敗并拋出一個(gè)異常
//確保這個(gè)變量不為空值. assert(text != null); //確保這個(gè)變量小于100. assert(number < 100); //確保它是一個(gè)https協(xié)議類型的URL. assert(urlString.startsWith(‘https’));