文档章节

Dart语言【005】函数

风华神使
 风华神使
发布于 2015/05/25 14:31
字数 809
阅读 175
收藏 1

在前面的教程中,我们已经接触了一些函数,比如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个参数

向可选的参数传值必须指定名字,不能直接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个参数。

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

© 著作权归作者所有

风华神使
粉丝 28
博文 83
码字总数 49006
作品 0
和平
其他
私信 提问
Dart dart:mirrors 库

Dart中的基本反射,支持内省和动态调用。 内省是运行程序可以检查其自身结构的反射子集。例如,一个打印出任意对象的所有成员名称的函数。 动态调用是指在编译时不按字面指定评估代码的能力,...

scooplol
2018/08/28
305
0
Flutter基础(三)Dart快速入门

本文首发于微信公众号「刘望舒」 前言 Dart是Flutter SDK指定的语言,因此要学习Flutter,Dart是必须掌握的。关于Dart可以写一本书了,这里用一篇文章来介绍下Dart的精髓,带你快速入门。和J...

刘望舒
05/23
0
0
为 JavaScript 开发人员准备的 Dart 参考教程

Dart 是 Flutter 主要的开发语言,这一篇文章主要为 JavaScript 开发人员准备的 Dart 教程,我会用很详细的对比来参考,力争 JavaScript 开发人员可以快速的熟练使用 Dart,为使用 Flutter ...

奇舞周刊
01/30
0
0
《Dart 语言导览》发布

旨在改善 web 应用开发过程的 Dart 团队本周发布了《Dart 语言导览》(A Tour of the Dart Language),详细介绍了 Dart 语言的各项功能,是快速入门的极佳读物,也是 Dart 语言用户的便捷参...

红薯
2012/04/23
3.4K
9
Flutter开发之Dart语言基础

Flutter 发展历史 Flutter是Google开发的一款用于帮助开发者在iOS和Android两个平台构建高质量原生应用的全新移动UI框架。说到Flutter,很多同学可能会将它和下面的几个词关联起来:新兴的、...

xiangzhihong
07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
2.7K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
4
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
12
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
69
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部