接着学习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=, int b})
{
return a+b;
}
main() {
var c=testFunc(b:);
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 [, , ],
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 = [, , ];
// Pass printElement as a parameter.
list.forEach(printElement);
}

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

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

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

[dart学习]第四篇:函数和操作符(本篇未完待续)的更多相关文章

  1. CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)

    目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...

  2. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  3. Day4-内置函数--未完待续,慢慢写

    内置函数:https://docs.python.org/3/library/functions.html?highlight=built#ascii 未完待续....

  4. 学习OpenCV——BOW特征提取函数(特征点篇)

    没日没夜的改论文生活终于要告一段落了,比起改论文,学OpenCV就是一件幸福的事情.OpenCV的发展越来越完善了,已经可以直接使用BOW函数来进行对象分类了. 简单的通过特征点分类的方法:     ...

  5. Python学习笔记(四)Python函数的参数

    Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: ...

  6. javascript学习第四课函数

    函数也是一种数据类型:function类型 所以函数也可当作一个数据作参数传递 三种函数的声明示例: 一般来讲,声明方式一和声明方式二比较常用,方式三比较少. 常用函数方式示例: 注意:虽然函数支持嵌 ...

  7. scala 学习笔记四 匿名函数

    1.介绍 Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体. 使用匿名函数后,我们的代码变得更简洁了. 下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数: var ...

  8. python学习第四天-函数

    函数  def开头 函数参数 其中name.age.sex为形参,'王锦时',21,'男'为实参 函数返回值 默认参数 关键字参数 收集参数 相当于把所有实参存在一个元组当中 收集参数和关键字参数的混 ...

  9. 快速傅里叶变换(FFT)学习笔记(未完待续)

    目录 参考资料 FFT 吹水 例题 普通做法 更高大尚的做法 定义与一部分性质 系数表达式 点值表达式 点值相乘??? 卷积 复数 单位根 DFT IDFT 蝴蝶迭代优化 单位根求法 实现.细节与小优 ...

随机推荐

  1. [LeetCode] Rabbits in Forest 森林里的兔子

    In a forest, each rabbit has some color. Some subset of rabbits (possibly all of them) tell you how ...

  2. [LeetCode] Swap Adjacent in LR String 交换LR字符串中的相邻项

    In a string composed of 'L', 'R', and 'X' characters, like "RXXLRXRXL", a move consists of ...

  3. hive高级数据类型

    hive的高级数据类型主要包括:数组类型.map类型.结构体类型.集合类型,以下将分别详细介绍. 1)数组类型 array_type:array<data_type> -- 建表语句 cr ...

  4. RF - selenium - 常用关键字 - 示例

    1. 打开浏览器 Open Browser    http://www.baidu.com    chrome 2. 关闭浏览器 Close Browsers Close All Browser 3. ...

  5. ant安装报错:ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.

    后来发现问题原因是没有设置classpath,或者是\的原因: 正确配置如下:  ANT_HOME:D:\ant\apache-ant-1.10.5 CLASSPATH: %ANT_HOME%\lib ...

  6. Linux 文件系统下的压缩、解压命令

    参考文献:Linux下的tar压缩解压缩命令详解 - 智昕 - 博客园

  7. js初级练习

    知识点:1.for循环的运用:2.this的使用.索引值:3自定义属性 说明:获取到的元素下文用element代替 学习涉及到的知识: 清除元素类名: element.className=" ...

  8. EM(Expectation Maximization )

    概括 看李航老师的<统计学习方法>知道,EM是一个对于有隐含随机变量的概率模型的参数的估计方法,它是一种无监督的算法. 只是有些重要的点并没有给出, 比如没有三硬币例子中直接给出的 u(z ...

  9. mysql-8.0.13在windows上的部署

    1 .下载mysql-8.0.13-x64 官方网站:https://dev.mysql.com/downloads/mysql/ 2.解压到G盘 3.准备my.ini文件保存到解压目录 [mysql ...

  10. python条件表达式:多项分支,双向分支

    # ### 多项分支 ''' if 条件表达式1: code1 code2 elif 条件表达式2: code3 code4 elif 条件表达式3: code5 code6 else: code7 ...