美文网首页Dart
Dart语言基础(四)之函数方法(Function)

Dart语言基础(四)之函数方法(Function)

作者: 枫叶无处漂泊 | 来源:发表于2019-03-20 21:04 被阅读0次

方法定义

  • 方法包含:返回类型、方法名、传入参数、方法体、返回值

      返回类型 方法名(参数1,参数2...) {
          
          方法体...
          return 返回值
      }
    

方法特性

  • 方法也是对象,并且有具体类型的Function

  • 方法没有返回值。如果没有指定,默认return null

  • main方法,没有返回值一个参数

      void main(List<String> args) {
          print(args); //[]
      }
    
  • 有返回值、多个参数

      String getStudent(String name, int age) {
    
          return 'name=$name,age=$age';
      }
      
      void main(List<String> args) {
          
          String stu = getStudent('张三',30);
          print(stu);//name=张三,age=30
      } 
    
  • 返回类型、参数类型都可以省略

      getStudent(name,age) {
          return ('name=$name,age=$age');
      }
      void main() {
    
          String stu = getStudent('张三',30);
          print(stu);//name=张三,age=30
      } 
    
  • 箭头语法:=>expr是{return expr;}缩写。只是用一个表达式

      //返回类型string 简写 
      getPerson(name,age) =>'name=$name, age=$age';
      
      void main() {
          
          print(getPerson('李四', 30));;//name=李四,age=30
      } 
    

可选参数

  • 可选命名参数:{param1,param2}

  • 可选命名参数可以不传值

      //可选命名参数,后面两个参数可以不传
      printOptionParams(String name,{int age, String gender}) {
          print('name=$name,age=$age,gender=$gender');
       }
      
      void main() {
                  
          printOptionParams('王五'); //name=王五,age=null,gender=null 
          
          //可选参数的条用param:value
          printOptionParams('王五',age: 20); //name=王五,age=20,gender=null
          
          printOptionParams('王五',age: 20,gender: '男'); //name=王五,age=20,gender=男
          
          printOptionParams('王五',gender: '男',age: 20); //name=王五,age=20,gender=男
      } 
    
  • 可选位置参数:[param1,param2]

  • 可选位置参数可以不传,但是参数的位置不能变

//可选位置参数,后面两个参数可以不传 age gender位置不能互换
 printOptionParams(String name,[int age, String gender]) {

        print('name=$name,age=$age,gender=$gender');
    }   
 
 void main(List<String> args) {
            
        printOptionParams('王五'); //name=王五,age=null,gender=null 
        
        //可选参数的条用param:value
        printOptionParams('王五',20); //name=王五,age=20,gender=null
        
        printOptionParams('王五',20,'男'); //name=王五,age=20,gender=男
        
        //必须按照位置来传参数,int String不能调用位置
        printOptionParams('王五','男', 20); //报错
}
  • 如果存在具体参数,可选参数必选在具体参数的后面

      //可选位置参数在具体参数前面
      printOptionParams([int age, String gender],String name) {
          
          print('name=$name,age=$age,gender=$gender');
      } //方法调用的时候会报错
      //可选命名参数在具体参数前面 
      printOptionParams({int age, String gender},String name]) {
          
          print('name=$name,age=$age,gender=$gender');
      } //方法调用的时候会报错
    

默认参数

  • 使用 = 在可选参数指定默认值

  • 默认值只能是编译器的常量

  • 默认参数,方法调用没给可选参数赋值话,赋值默认值

      printOptionParams(String name,{int age=30, String gender='女'}) {
          print('name=$name,age=$age,gender=$gender');
       }
      
      void main() {
                  
          printOptionParams('王五'); //name=王五,age=30,gender=女 
          
          //可选参数的条用param:value
          printOptionParams('王五',age: 20); //name=王五,age=20,gender=女
          
          printOptionParams('王五',age: 20,gender: '男'); //name=王五,age=20,gender=男
          
          printOptionParams('王五',gender: '男',age: 20); //name=王五,age=20,gender=男
      } 
      
      //默认参数,方法调用没给位置参数赋值话,赋值默认值
      printOptionParams(String name,[int age=30, String gender = '女']) {
          print('name=$name,age=$age,gender=$gender');
       }
      
      void main() {
                  
          printOptionParams('王五'); //name=王五,age=30,gender=女 
          
          //位置参数赋值的顺序不能变
          printOptionParams('王五', 20); //name=王五,age=20,gender=女
          
          printOptionParams('王五', 20, '男'); //name=王五,age=20,gender=男
      } 
    

方法对象

  • 方法可作为对象赋值给其他变量

      void printHello() {
          print('hello');
      }
      
      void main() {
          var func = printHello;
          //也可以用Function 来声明
          //Function func = printHello;
          func(); //hello
      }
    
  • 方法可作为参数传递给其他方法

      // times方法
      String times(str) {
          return str*3;
      }
      
      //把times方法当做参数,返回的也是一个
      List listTimes (List list, String times(str)) {
          for (var i = 0; i < list.length; i++) {
              
              list[i] = times(list[i]);
              print(list[i]);
          }
      }
    
      void main() {
          
          var list = ['h','i'];
          //方法作为参数时候不应该有()
          listTimes(list,times); 
          /*
              hhh
              iii
          */
      }
    

匿名方法

  • 匿名方法定义

      (参数1,参数2) {
          
          方法体...
          return 返回值
      }
    
  • 可赋值给变量,通过变量进行调节

  • 匿名方法不能放在外面单独声明,要是方法内声明

      var fuc = (str) {
          print(str);
      };
      fuc(30); 
    
  • 可在其他方法中直接调用或者传递给其他方法

      List listTimes (List list, String times(str)) {
          for (var i = 0; i < list.length; i++) {
              list[i] = times(list[i]);
              print(list[i]);
          }
      }
    
      void main() {
          
          var list = ['h','i'];
          //方法作为参数时候不应该有()
          listTimes(list,(str){return str*3}); 
          /*
              hhh
              iii
          */
      }
    

闭包

  • 闭包是一个方法也是对象(dart中一切都是对象)
  • 闭包定义在其他方法内部
  • 闭包能够访问外部方法内的局部变量,并持有其状态(这是闭包最大的作用,可以通过闭包的方式,将其暴露出去,提供给外部访问)
        void main() {
            //func持有count的状态
            var func = a();
            //每次调用count并没有每次初始化为0
           //从打印结果来看,func持有count的状态
          //我们无法直接通过操作count来改变,可以通过闭包的方式,将其暴露出去,使得外部可以访问
            func(); //1
            func(); //2
            func(); //3
        }

        // 声明一个无返回值类型、无参数的函数
        a() { 
            //count是a的局部变量
            int count = 0;
          // 内部声明一个函数 : 闭包
            printCount()  {
            // 内部可以访问外部方法内的局部变量 count
                count += 1;
                print(count);
            }
              // 返回闭包
            return printCount;
        }

闭包的要素:

  • 首先声明一个无返回值、无参数的函数

  • 其次在函数内有局部变量

  • 然后在声明一个闭包函数,闭包函数调用局部变量并且持有局部变量的状态

  • 返回闭包

结尾

[下一篇讲述Dart语言基础(五)之面向对象基础特性](https://www.jianshu.com/p/c3b801de7584

相关文章

  • Dart语言基础(四)之函数方法(Function)

    方法定义 方法包含:返回类型、方法名、传入参数、方法体、返回值 返回类型 方法名(参数1,参数2...) { ...

  • Dart之旅03:函数

    函数声明 dart是一个面向对象语言,所有的方法,都是Function的一个对象。下面是一个dart的函数声明: ...

  • Dart小知识-可选参数了解一下?

    函数(Function) Dart是面向对象的语言,所以 函数也是对象,并且拥有一个类型,叫 Function。这...

  • Dart 知识点 -- 函数(Function) &&a

    函数(Function) Dart是面向对象的语言,所以 函数也是对象,并且拥有一个类型,叫 Function。这...

  • Dart(2.2) - 函数(Functions)

    函数(Functions) Dart是一个真正的面向对象语言,方法也是对象并且具有一种类型 Function。 这...

  • Dart语言基础之函数

    原文:https://www.dartlang.org/guides/language/language-tour...

  • dart入门潜修系列教程

    dart入门潜修基础篇之基本语法和内置类型dart入门潜修基础篇之方法dart入门潜修基础篇之操作符dart入门潜...

  • (三)Dart Functions(方法)

    Dart方法概述 Dart 是一个真正的面向对象语言,方法也是对象并且具有一种 类型, Function。 这意味...

  • Functions——Dart

    Functions——Dart Dart是一个完全面向对象的语言,它的方法也是对象,对应的类型为Function。...

  • Dart 函数

    Dart是面向对象的语言,函数也是对象(属于Function对象),可以作为参数传递给其它函数,方便做回调处理下面...

网友评论

    本文标题:Dart语言基础(四)之函数方法(Function)

    本文链接:https://www.haomeiwen.com/subject/pbwnmqtx.html