zoukankan      html  css  js  c++  java
  • [dart学习]第四篇:函数

    接着学习dart的函数。

    1、函数Function

    dart是一种真正的面向对象的语言,通常一个函数也是Function类型的对象,这也就是说可以把函数赋值给一个变量,或者作为另一个函数的入参进行传递。

    我们直接来看一个简单的函数例子吧:

    //定义一个函数,名字叫testFunc,,参数有两个int,返回值也是int
    int testFunc(int a, int b)    
    {
      return a+b;
    }
    main() {
      var c=testFunc(2,4);      //调用刚才定义的函数  
      print('Function test = $c');  //打印函数的返回值,注意:这里不同于C语言的d%用法
    }
    

    函数的运行信息如下图:

     

    附:即便定义的函数没有显式声明函数的返回类型,编译器也能认,但是不建议大家那样做。

    如果函数体只有一句表达式,那么还可以这样简介地定义函数:

    int testFunc(int a, int b) => a+b;
    

     => expr; 语法就是 {return expr; } 的简短写法,同样,这种写法个人也不太推荐,我们还是要注意函数定义的易读性。

    函数的入参可以是必须的,也可以是可选择的,类似于带有默认值的参数,可选择的参数必须放在必须的参数之后。

    <一> 可选参数

    可选参数可以是位置参数或者命名参数。当定义函数的时候,可以使用 {param1param2, …} 这种形式去指定命名参数,其实就是下边这种形式:

      int testFunc({int a, int b})  //注意{}
      {
          return a+b;
      }

    调用的时候可以这样调用:

    main() {
      var c=testFunc(a: 2, b:4);
      print('Function test = $c');
    }

    位置参数看以下例子(有点类似于windows cmd 命令里的可选参数):

    String say(String from, String msg, [String device]) {
      var result = '$from says $msg';
      if (device != null) {
        result = '$result with a $device';
      }
      return result;
    }
    

    以上say函数的前两个参数是必须的,从第三个开始是可选择的参数,这些可选择的参数都被包括在[]符号内。

    这样调用: 

    main() {
      var c=say('Jack','Hello world');
      print(c);
    }

    运行结果为:

    如果我们这样调用:   var c=say('Jack','Hello world','windows');  ,那么,运行结果将变为:

    <二>默认参数

    默认参数类似于C/C++语言的默认参数,dart的默认参数也使用=进行赋值(推荐使用=)。命名参数或位置参数都可以有默认值,如上例可以这样修改:

    int testFunc({int a=7, int b}) 
    {
      return a+b;
    }
    main() {
      var c=testFunc(b:2);
      print('Function test = $c');
    }

    程序的运行结果为:

    这里要特别指出一点:普通C/C++的默认赋值参数只能排在形参的最后,也就是说上例如果在C语言中testFunc函数只能是b有默认值,而a不能有默认值。但是由于我们使用了dart语言的命名参数特性,所以对有默认值形参的位置就没有这些限制了。怎么样,dart还是有自己独特的强大之处吧。

    位置参数的带有默认值的形式就不再赘述了,下边直接贴一段例子大家理解消化一下就行:

    // demo1
    String say(String from, String msg, [String device = 'carrier pigeon', String mood]) { var result = '$from says $msg'; if (device != null) { result = '$result with a $device'; } if (mood != null) { result = '$result (in a $mood mood)'; } return result; } assert(say('Bob', 'Howdy') == 'Bob says Howdy with a carrier pigeon'); //demo2 void doStuff( {List<int> list = const [1, 2, 3], Map<String, String> gifts = const { 'first': 'paper', 'second': 'cotton', 'third': 'leather' }}) { print('list: $list'); print('gifts: $gifts'); }

    <三>main函数

    main函数是dart语言编写的程序的顶层入口函数,返回值为void,并且有一个可选择的list参数。不再细述。

    <四>将函数作为入参传递或赋值

    直接看例子吧:

    void printElement(int element) {
      print(element);
    }
    main()
    {
      var list = [1, 2, 3];
      // Pass printElement as a parameter.
      list.forEach(printElement);  
    }

    再看一个将函数作为变量进行赋值的:

    int main()
    {
      var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';  //复合语句,稍微有点复杂,大家结合前边对  =>  的介绍进行理解
      print(loudify('hello'));
    }

    所有的函数都是有返回值的,如果程序里没有明确指明返回值,如 foo() {}   ,则默认返回 null;

  • 相关阅读:
    mysql安装遇到的坑
    git pull 、git fetch、 git clone
    MD markdown入门
    Libevent:8Bufferevents高级主题
    Libevent:6辅助函数以及类型
    Libevent:5events相关
    Libevent:4event loop
    Libevent:3创建event_base
    Libevent:2设置
    Libevent:1前言
  • 原文地址:https://www.cnblogs.com/gklovexixi/p/10741352.html
Copyright © 2011-2022 走看看