天天看点

Dart基础语法入门(二)

算术运算符:

  • 加减乘除、取整、取余:+、-、*、/、~/、%
  • 递增递减:++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