乐趣区

dart控制语句和方法

控制语句

4-1if 语句

void main() {
  int score = 100;
  if (score >= 90) {if (score == 100) {print('完美');
    } else {print('优秀');
    }
  } else if (score > 60) {print('良好');
  } else if (score == 60) {print('及格');
  } else {print('不及格');
  }
}

4-2for 语句

void main() {var list = [1, 2, 3, 4, 5];
  // for 循环
  for (var index = 0; index < list.length; index++) {print(list[index]);
  }
  // 不需要使用下标时 可以使用这种方法遍历列表的元素
  for (var item in list) {print(item);
  }
}

4-3while 语句

void main() {
  int c = 0;
  // 当 c <5 时就循环打印 c 打完加 1
  while (c < 5) {print(c++);
  }
// 先执行 do 再进行 while 循环
  do {print(c--);
  } while (c > 0 && c < 5);
}

4-4break 和 continue

void main() {var list = [1, 2, 3];
  for (var i in list) {// if (i != 2) {//   print(i);
    // }
    if (i == 2) {
      // 跳出当前循环
// break;
// 打印 1,3 会跳过当前这种情况继续执行
      continue;
    }
    print(i);
  }
  print('----------');
  var list2 = [4, 5, 6];
  for (var a in list2) {if (a == 5) {
      // 只会终止自己所在的 for 循环 外边还有嵌套的 for 循环 不会终止
      break;
    }
    print(a);
  }
}

4-5switch…case 语句

void main() {
  String lan = 'java';
  // switch case 每个 case 后面要跟一个 break; 默认是 default
  switch (lan) {
    case 'dart':
      print('dart is my fav');
      break;
    case 'java':
      print('java is my fav');
      break;
    default:
      print('none');
  }
  switch (lan) {
    D:
    case 'dart':
      print('dart is my fav');
      break;
    case 'java':
      print('java is my fav');
      // 先执行当前 case 中的 然后跳转到 D 中的 case 继续执行
      continue D;
    // break;
    default:
      print('none');
  }
}

方法

5- 1 方法的定义

// void 是没有返回值的 返回值类型:方法名(参数){return: 返回值}
//"f:\vscodexm\dartlearn\chapter5\function_declaration.dart" 1 'test' true
// 方法也是对象 并且有具体类型的 function
// 返回值类型  参数类型 都可以省略
// 箭头语法简化代码 只适用于一个表达式
// 方法都有返回值 没指定 return null
void main(List args) {print(args);
  print(geta('张三', 18));
  printp('李四', 20);
}

// String geta(String name,int age){
// return 'name=$name,age=$age';
// }
// => 箭头可以表示返回值 箭头后面可以跟表达式
int gender = 2;
geta(name, age) => gender == 1 ? 'name=$name,age=$age' : 'test';

// 返回值类型 和参数类型可以省略 默认为 void
// printp(name,age){//   print('name=$name,age=$age');
// }
void printp(String name, int age) {print('name=$name,age=$age');
}

5- 2 可选参数

// void 是没有返回值的 返回值类型:方法名(参数){return: 返回值}
//"f:\vscodexm\dartlearn\chapter5\function_declaration.dart" 1 'test' true
// 方法也是对象 并且有具体类型的 function
// 返回值类型  参数类型 都可以省略
// 箭头语法简化代码 只适用于一个表达式
// 方法都有返回值 没指定 return null
void main(List args) {print(args);
  print(geta('张三', 18));
  printp('李四', 20);
}

// String geta(String name,int age){
// return 'name=$name,age=$age';
// }
// => 箭头可以表示返回值 箭头后面可以跟表达式
int gender = 2;
geta(name, age) => gender == 1 ? 'name=$name,age=$age' : 'test';

// 返回值类型 和参数类型可以省略 默认为 void
// printp(name,age){//   print('name=$name,age=$age');
// }
void printp(String name, int age) {print('name=$name,age=$age');
}

5- 3 默认参数值

void main() {
  // name=xxx,gender=null,age=null 调用这个方法后两个参数可不传
  printp('xxx');
// name=xxx,gender=male,age=20{} 根据命名来
  printp('xxx', gender: 'male');
  printp('xxx', age: 20);
}

// {int age=30,String gender='female'} 设置默认参数
printp(String name, {int age = 30, String gender = 'female'}) {print('name=$name,gender=$gender,age=$age');
}
### 5- 4 方法对象
void main() {
  var func = printhello;
  Function func1 = printhello;
  func();
  func1();
// 方法作为一个参数进行传递
  var list = [1, 2, 3, 4];
  list.forEach(print);
  var list2 = ['a', 'b', 'c'];
// [aaa, bbb, ccc 一个方法 作为其他方法参数进行传递
  print(listtimes(list2, times));
}

// dart 中方法也都是对象 可以赋值给其他对象或变量
void printhello() {print('hello');
}

List listtimes(List list, String times(str)) {for (var i = 0; i < list.length; i++) {list[i] = times(list[i]);
  }
  return list;
}

String times(str) {return str * 3;}

5- 5 匿名方法

void main() {
  // 匿名方法 可以通过赋值给对象或者方法来调用
  // (){//   print('hello');
  // };
  // 匿名方法也可以传参
  var func = (str) {print('hello----$str');
  };
  func(30);
  // 直接调用匿名方法 不推荐使用
  (() {print('test 不推荐');
  })();
  var list2 = ['a', 'b', 'c'];
  var result = listtimes(list2, (str) => str * 3);
  print(result);
  // listtimes(list2, (str){return str*3;});
}

List listtimes(List list, String times(str)) {for (var i = 0; i < list.length; i++) {list[i] = times(list[i]);
  }
  return list;
}

5- 6 闭包

// 闭包是一个方法(对象)// 闭包定义在其他方法内部
// 闭包能够访问外部方法中的局部变量, 并持有其状态
void main() {var func = a();
  func();
  func();
  func();
  func();}

a() {
  int count = 0;
  //printCount 是一个闭包 可以持有 a 中 count 的状态 也可以使用匿名方法
  // printCount(){//   print(count++);
  // }
  // return printCount;
  // 匿名方法
  return () {print(count++);
  };
}
退出移动版