Dart basis Part VI: Dart of some commonly used functions (anonymous function; arrow function; self-executing function; closure ...)

void main() {

  /**
   * 一、内置函数
   */
  print("这是一个内置函数");
  print("     这也是一个内置函数".trim());


  /**
   * 二、自定义函数:
   *    例如 有参有返回值的方法定义规则:
   *        返回类型 方法名称(参数...){
   *                方法体
   *                return 返回值;
   *         };
   */

  /**
   *1、有参有返回值的方法
   */
  int testReturnParameters(int num1, int num2) {
    return num1 + num2;
  }
  //调用
  print(testReturnParameters(1, 2));

  /**
   * 2、有参无返回值的方法
   */
  void testNotReturn(int num1, int num2) {
    print(num1 + num2);
  }
  //调用
  testNotReturn(1, 2);

  /**
   * 3、无参无返回值的方法
   */
  void testNotReturnNotParameters() {
    print("HelloDart");
  }
  //调用
  testNotReturnNotParameters();

  /**
   * 4、无参有返回值的方法
   */
  int testReturn() {
    return 1 + 1;
  }
  print(testReturn());


  /**
   * 5、可选参数
   * 在方法体内定义[]为可选参数 可不写入
   */
  Map addUser(String userName, int age, [String sex]) {
    return {'userName': userName,
      'age': age,
      'sex': sex != null ? sex : '未知'
    };
  }
  print(addUser('MrWang', 1));

  /**
   * 6、默认参数
   * 在[]可选参数内直接给参数赋一个默认值 当不赋值的时候则显示默认值 就不用在方法体内进行判断 更简单便捷!
   */
  Map addUser2(String userName, int age, [String sex = '未知']) {
    return {'userName': userName, 'age': age, 'sex': sex};
  };
  print(addUser2('MrWang', 2));

  /**
   * 7、命名参数 赋值方法不一样 其他都一样
   */
  Map addUser3(String userName,  {int age,String sex = '未知'}) {
    return {'userName': userName, 'age': age, 'sex': sex};
  };
  print(addUser3('MrWang',age: 3,sex: '男'));


  /**
   * 8、方法当做参数调用
   */
  //(1)先定义了一个function1的方法 输出一句话
  void function1(){
    print("function1");
  }

  //(2)又定义了一个function2的方法 调用function1的方法
  void function2(function1){
    function1();

  }

  //(3)调用function2的方法 将function1的方法当做参数传进去
  function2(function1);

  /**
   * 9、匿名函数
   */
  var anonymousFunction=(){
    print("This is anonymousFunction ");
  };

  anonymousFunction();

  /**
   * 10、箭头函数 类似于java8的Lambda表达式
   */
  List list = ['apple','pear','banana'];
  List list2 = new List();
  list.forEach((value)=>print(value));
  list.forEach((value)=>{
    //方法体 但是只能做一件事
    list2.add(value)
  });
  print(list2);

  /**
   * 11、自执行函数
   */
  (String str){
    print("自执行方法 "+str);
  }('这是参数体');

  /**
   * 12、递归函数
   * 求1-100的和
   */

  var sum = 0;
  fun(n){
   sum+=n;
   if(n==100){
     return;
   }
   fun(n+1);
  };
  fun(1);
  print(sum);

  /**
   * 13、闭包 在方法体内再定义一个方法 不会污染全局 而且变量常驻内存。
   */
   closure(int sum){
    return (){
      print(sum++);
    };

  }

  var a = closure(2);
  a();
  a();







}

 

Published 66 original articles · won praise 36 · views 70000 +

Guess you like

Origin blog.csdn.net/u013600907/article/details/99682643