算术运算符:
- 加减乘除、取整、取余:+、-、*、/、~/、%
- 递增递减:++var、var++、--var、var--
int a = 10;
int b = 5;
print('a+b = ${a+b}');//加
print('a-b = ${a-b}');//减
print('a*b = ${a*b}');//乘
print('a/b = ${a/b}');//除
print('a~/b = ${a~/b}');//取整
print('a%b = ${a%b}');//取余
print(a++);//先执行打印a再加1赋值给a
print(++a);//先执行a加1赋值给a再打印a
print(a--);//先执行打印a再减1赋值给a
print(--a);//先执行a减1赋值给a再打印a
关系运算符:
- 运算符:==、!=、>、<、>=、<=
- 判断内容是否相同使用 ==
void main(){
int a = 10;
int b = 5;
print(a == b);//是否等于
print(a != b);//不等于
print(a > b);//大于
print(a < b);//小于
print(a >=b);//大于或者等于
print(a <= b);//小于或者等于
String str1 = "aaaa";
String str2 = 'bbbb';
print(str1 == str2);//Dart中判断字符串内容是否相等是用‘==’号,而Java中是使用equals()方法
}
逻辑运算符:
- 运算符:!、&&、||
- 针对布尔类型运算
void main(){
bool isTrue = true;
print(!isTrue);//取反
bool isFalse = false;
print(isTrue && isFalse);//并且,只有同时为真的时候才是真
print(isTrue || isFalse);//或,只要有一个为真就为真
}
赋值运算符:
- 运算符:=、??=
- 复合运算符:+=、-=、*=、/=、%=、~/=
void main(){
int a = 10;
double b = 5.0;
a ??= 5;//'??='如果a没有被赋值,则赋值5,如果已经赋值10或者其他,则‘??=’后面的值无效
print(a);
a += 2;//实际上是等同于a = a + 2;
a -= 2;//实际上是等同于a = a - 2;
a *= 2;//实际上是等同于a = a * 2;
b /= 2.0;//实际上是等同于b = b / 2.0;
a ~/= 2;//实际上是等同于a = a ~/ 2;
a %= 2;//实际上是等同于a = a % 2;
}
条件表达式:
- 三目运算符:condition?expr1:expr2
- ??运算符:expr1??expr2
void main(){
int a = 0;
String str = a == 0?'Java':'Dart';//先判断a是否等于0如果为真那么str = 'Java',如果为假那么str = 'Dart'
print(str);
String str1 ;
String str2 = 'hello';
String str3 =str1 ?? str2;//先判断str1是否有值,有的话就等于str1,没有的话就取str2的值
print(str3);
}
条件语句:
- if语句
- if...else if语句
- if...else if...else语句
void main(){
int score = 95;
if(score >= 90){//判断score是否大于或者等于90分
if(score == 100){//当score大于或者等于90分后再判断是否等于100分
print("满分");
}else{
print("优秀");
}
}else if(score > 60){//如果score小于90分再判断是否大于60分
print("良好");
}else if(score == 60){//如果score小于60分,判断是否等于60分
print("及格");
}else{//以上条件都不满足则不及格
print("不及格");
}
}
循环语句:
- for循环
- for...in循环
void main(){
var list = [1,2,3,4];
for(var index =0;index<list.length;index++){//循环4次,每次循环打印出当前下标在List里面的元素
print(list[index]);
}
for(var item in list){//将List里面的元素赋值给item,然后打印出来
print(item);
}
}
while语句:
- while循环
- do...while循环
void main(){
int count = 0;
while(count < 5){//当count小于5时就打印count,执行完打印后count自增
print(count++);
}
do{
print(count--);//先执行一次打印count,再判断while的条件
}while(count>0 && count<5);
}
break和continue:
- 终止循环:break
- 跳出当前循环:continue
void main(){
var list = [1,2,3,4,5,6,7];
for(var item in list){
if(item == 3){
continue;//跳过当前循环
}else if(item == 6){
break;//终止离它最近的循环
}
print(item);
}
}
switch...case语句:
- 比较类型:num、String、编异常量、对象、枚举
- 非空case必须有一个break
- default处理默认情况
- continue跳转标签
void main(){
String language = 'Dart';
switch(language){//寻找Item中是否有和language对应的内容的Item,做相应的逻辑处理,没有默认处理为default。
case 'Java':
print('Java');
break;
case 'Dart':
print('Dart');
break;
case 'C++':
print('C++');
break;
default:
print('None');
}
}
方法定义:
- 返回类型 方法名(参数1,参数2,....) {方法体......return 返回值}
void main(){
print(getPerson("aaaa", 18));//由于返回值是String类型我们可以直接打印
}
String getPerson(String name ,int age){//定义了一个返回类型为String的getPerson方法,参数有两个分别是String name和int age
return 'name = $name,age = $age';//这是return的值
}
方法特性:
- 方法也是对象,并且有具体类型Function
- 返回值类型、参数类型都可省略
- 箭头语法:=>expr 是{return expr;}缩写。只适用于一个表达式
- 方法都有返回值。如果没有指定,默认return null最后一句执行
void main(){
print(getPerson("aaaa", 18));//由于返回值是String类型我们可以直接打印
}
getPerson( name , age) => 'name = $name,age = $age';//省略返回值类型和参数类型,使用了箭头语法
可选参数:
- 可选命名参数:{param1,param2,....}
- 可选位置参数:[param1,param2,....]
- 如果存在具体参数,可选参数声明,必须在参数后面
void main(){
getPerson("aaa");
getPerson("aaa",sex: 'man');
getPerson("aaa",age: 20);
getPerson("aaa",age: 20,sex: "man");
getPerson1('bbb');
getPerson1('bbb',18);
getPerson1('bbb',18,'womem');
}
//可选命名参数
getPerson(String name,{int age,String sex}){//使用可选命名参数时需要指定字段,跟前后位置无关
print("name = $name,age = $age,sex = $sex");
}
//可选位置参数
getPerson1(String name,[int age,String sex]){//使用可选位置参数时不需要指定字段,只跟定义时的位置有关
print("name = $name,age = $age,sex = $sex");
}
默认参数:
- 使用 = 在可选参数指定默认值
- 默认值只能是编异常量
void main(){
print(getPerson('aaa'));//调用时没有传入可选命名参数则会使用默认值
}
String getPerson(String name,{int age = 18 ,String sex = 'man'}){//age和sex都是可选命名参数,在定义的时候使用 = 号赋值默认值
return 'name = $name,age = $age,sex = $sex';
}
方法对象:
- 方法可作为对象赋值给其它变量
- 方法可作为参数传递给其它方法
void main(){
var func = printHello;//方法作为对象赋值给其它变量
Function function = printHello;//也可以写成这样的形式
func();//通过变量名+()进行调用
function();
var list = ['h','e','l','l','o'];
print(listWord(list, getThirdWord));//listWord方法作为参数传递给print函数
}
void printHello(){
print("hello dart");
}
List listWord(List list,String func(String str)){//定义了一个返回值是List的函数,参数为List类型和一个返回值是String类型的方法
for(var index = 0;index<list.length;index++){
list[index] = func(list[index]);
}
return list;
}
String getThirdWord(String str){//定义了一个String类型返回值的函数,作用是把传入的参数*3再返回
return str*3;
}
匿名方法:
- 匿名方法定义:(参数1,参数2,....){方法体....return 返回值 }
- 可赋值给变量,通过变量进行调用
- 可在其他方法中直接调用或传递给其他方法
void main(){
var func = (String str){//可赋值给变量
print('hello $str');
};
func('dart');//通过变量进行调用
((String str){//也可以通过整体加上()调用
print('hello $str');
})('Java');
var list = ['h','e','l','l','o'];
var list1 = ['d','a','r','t'];
print(listWord(list, (String str){return str*3;}));//匿名方法作为参数进行传递
print(listWord1(list1));//通过变量进行调用
}
List listWord(List list,String func(String str)){//匿名方法作为参数进行传递
for(var index = 0;index<list.length;index++){
list[index] = func(list[index]);
}
return list;
}
List listWord1(List list){//通过匿名方法赋值给变量,通过变量进行调用
var func = (String str){
return str*3;
};
for(var index = 0;index<list.length;index++){
list[index] = func(list[index]);
}
return list;
}
闭包:
- 闭包是一个方法(对象)
- 闭包定义在其它方法内部
- 闭包能够访问外部方法内的局部变量,并持有其状态
void main(){
var func = printCount();//printCount方法调用返回值是个方法
func();//所以再调用一次
func();//一直调用会发现count会一直自增
func();
}
printCount(){
int count = 0;
Count(){//在方法内部定义了一个闭包并持有count的状态
print(count ++ );
}
return Count;
}
原创:https://blog.csdn.net/weixin_40600325/article/details/97660269