码迷,mamicode.com
首页 > 编程语言 > 详细

Dart语言【005】函数

时间:2015-05-25 14:56:27      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

在前面的教程中,我们已经接触了一些函数,比如print函数。Dart中的函数与其他常见语言(如C、C#、Java)中的函数非常相像。如

var y = f(x);

表示调用函数f并传递实参x,以它的返回值初始化变量y。


现在比较系统的介绍Dart中函数。


一、定义

1.1 一般方式

定义函数的格式为:

// 伪代码
返回值类型 函数名(参数列表) {
  函数体
}

参数列表的格式为

// 伪代码
T_1 p_1, T_2 p_2, ..., T_i p_i, ..., T_n p_n

诸T_i表示参数的类型,诸p_i表示参数名。如果没有参数,则参数列表为空。

如果函数没有返回值,则返回值类型为void。

// 例1
// 接受2个int,返回int的函数
int Func1(int a, int b) {
  return a + b;
}

// 例2
// 接受1个String,没有返回值的函数
void Func2(String a) {
  print(a);
}

// 例3
// 没有参数,返回String的函数
String Func3() {
  return "Dart引领未来";
}

像许多常见语言一样,关键字return表示函数的返回。

1.2 简洁方式

如果函数f有返回值(此时f必有return语句),且return语句就是全部的函数体,那么可以用=>来定义函数:

int Func1() => 1;
int Func2(int x) => Func1() + x + 5;

这里

=> r;

等价于

{ return r; }

如果函数没有返回值,且函数体只有一条语句,那么也可以用=>来定义函数:

void Func3() => print("Dart了不起");

这里

=> r;

等价于

{ r; }


二、可选参数

2.1 针对参数名称的可选参数

如果我们想编写一个函数PrintComplex,它以复数的实部和虚部为参数,如果不提供虚部,则认为虚部为零,怎么做呢?Dart提供了可选参数。

void PrintComplex(num a, {num b: 0}) {
  print("${a} + ${b}i");
}

用{}括起来的参数是可选的,并且用冒号(:)指定参数的默认值,PrintComplex的参数b的默认值为0。

调用该函数可以采用下面的方式:

PrintComplex(1.2); // 传递1个参数
PrintComplex(35, b: 90.24); // 传递2个参数

向可选的参数传值必须指定名字,不能像C++那样直接PrintComplex(1, 2);。

再举一例:

void main() {
  Func(100, 200);
  Func(1, 2, d: 20); // 提供d,不提供c
  Func(2, 4, c: 10); // 提供c,不提供d
  Func(-1, -2, c: -3, d: -4);
}

void Func(int a, int b, {int c: 20, int d: 25}) {
  print("a = ${a}, b = ${b}, c = ${c}, d = ${d}");
}


2.2 针对参数位置的可选参数

如果把可选参数用[]包括起来,那么这些可选参数就是针对参数位置的可选参数。

void Func(int a, int b, [int c = 20, int d = 25]) {
  print("a = ${a}, b = ${b}, c = ${c}, d = ${d}");
}

在调用Func时,可以传递2或3或4个参数。

void main() {
  Func(20, 21);
  Func(1, 2, 10);
  Func(100, 42, 9078, -1);
}

更一般的,设函数

// 伪代码
void Func(T_1 p_1, T_2 p_2, ..., T_m p_m, [R_1 q_1 = v_1, R_2 q_2 = v_2, ..., R_n q_n = v_n]) {
  // 函数体
}

则可以向Func传递m、m+1、m+2、...、m+n个参数。

提供的实参会从左至右依次传入

Dart语言【005】函数

标签:

原文地址:http://my.oschina.net/jthmath/blog/419599

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!