zoukankan      html  css  js  c++  java
  • Dart(四)函数

    Dart(四)函数

     
    https://www.jianshu.com/p/79e444806e1amain函数

    特殊函数,是程序的入口。

    void main(){
     .....
    }
    
    函数声明
     //指定返回值  函数名  参数  函数体
      void test11(){
        print('aa');
      }
      //不指定返回值  也可以
      test12(num a){
        print('bb $a');
      }
      //不指定返回值  也可以
      test15(String c){
        return c+c;
      }
      //如果函数体 只有一个表达式  可以用箭头函数形式
      test13(int c) => print(c);
      //箭头函数 返回一个值
      test14(int c) => c+5;
    
    void test01(){
        test11();
        test12(2);
        test13(3);
        print(test14(5));
        print(test15('a'));
      }
    
    aa
    bb 2
    3
    10
    aa
    
    参数
    • 参数分必要参数和可选参数,可选参数必须在参数列表的最后。
    可选参数
    • 可选参数分为可选位置参数和可选命名参数
    • 二者都可以定义默认值,但是默认值必须是编译时常量。

    可选命名参数

    void test01(){
        test17(a:true,b:3);//指定可选参数名字进行传值,可以不全传值
      }
    //可选参数方法声明,
    //使用{}括起来参数声明 
    //使用冒号:设置默认值  
    //不设置默认值又不传值 则值为null
      void test17({bool a,int b,String c:'ccc'}){
        if(a){
          print(b);
          print(c);
        }else{
          print(b*b);
        }
      }
    

    可选位置参数

    //使用[]将参数括起来,放在参数 列表最后
    //可放多个参数
    //可设置默认值
    String test19(String from, String msg, [String device,bool sex=true]) {
        var result = '$from says $msg';
        if (device != null) {
          result = '$result with a $device $sex';
        }
        return result;
      }
    void test01(){
    //调用时,可选参数的位置和类型要与声明时一致
      String result = test19('from','msg','ccc',false);
      print(result);//from says msg with a ccc false
      }
     
    
    把函数当参数传递
    void test01(){
        //将函数传递进去
        test22(test21,4);
      }
      //参数中有个类型为函数的参数
      void test22(Function f,int p){
        f(p);
      }
      //定义一个函数
      void test21(int a){
        print(a);//4
      }
    
    把函数赋值给变量
    void test01(){
        var t = test24;//将函数赋值给变量
        t(3);//调用函数
      }
    //定义一个函数
      void test24(int a){
        print(a*a);//9
      }
    
    
    所有函数都有返回值,如果没有显示返回,那么默认return null;
    void test01(){
        var result = test26(3);
        print(result);
      }
    //方法体内没有返回值
      test26(int a){
        print(a);//null
      }
    
    
    typedef
    • 在Dart中一切皆对象,那么函数也是对象,既然是对象,那么必然有其类。所有的类都继承自Object,而函数的类是Function。但是Function并不能描述一个具体的函数信息:如返回值、参数个数和参数类型等。
    • typedef就是为一个具体的函数信息声明其类型的。如一个方法
    int sum(int a,int b){ return a+b;}
    

    这是一个具体的方法,也就是一个对象,那么其类型是什么呢?用typedef描述为:

    typedef int FunctionType(int a,int b);
    

    如上描述类函数的特点:返回值int,两个参数ab,参数类型int。那么所有符合该特点的函数,都是该类型的对象,都可以在将函数当作参数时使用该类型。
    如何使用:

    typedef int FunctionType(int a,int b);
    
    int compute(FunctionType fun,a,b){
      return fun(a,b);
    }
    
    int sum(int a,int b){
      return a+b;
    }
    int sub(int a,int b){
      return a-b;
    }
    void main(){
      int sumNum = compute(sum,3,4);
      int subNum = compute(sub,4,5);
    }
  • 相关阅读:
    终于回来了&&邮递员送信
    发射站
    黑匣子
    利维坦——(1)
    预告
    整除(水题)
    BZOJ054_移动玩具_KEY
    BZOJ4034_树上操作_KEY
    树链剖分学习&BZOJ1036
    BZOJ1208_宠物收养所_KEY
  • 原文地址:https://www.cnblogs.com/it-tsz/p/12509883.html
Copyright © 2011-2022 走看看