[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; } 的简短写法,同样,这种写法个人也不太推荐,我们还是要注意函数定义的易读性。
函数的入参可以是必须的,也可以是可选择的,类似于带有默认值的参数,可选择的参数必须放在必须的参数之后。
<一> 可选参数
可选参数可以是位置参数或者命名参数。当定义函数的时候,可以使用 {param1, param2, …} 这种形式去指定命名参数,其实就是下边这种形式:
调用的时候可以这样调用:
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学习]第四篇:函数和操作符(本篇未完待续)的更多相关文章
- CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)
目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
- Day4-内置函数--未完待续,慢慢写
内置函数:https://docs.python.org/3/library/functions.html?highlight=built#ascii 未完待续....
- 学习OpenCV——BOW特征提取函数(特征点篇)
没日没夜的改论文生活终于要告一段落了,比起改论文,学OpenCV就是一件幸福的事情.OpenCV的发展越来越完善了,已经可以直接使用BOW函数来进行对象分类了. 简单的通过特征点分类的方法: ...
- Python学习笔记(四)Python函数的参数
Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: ...
- javascript学习第四课函数
函数也是一种数据类型:function类型 所以函数也可当作一个数据作参数传递 三种函数的声明示例: 一般来讲,声明方式一和声明方式二比较常用,方式三比较少. 常用函数方式示例: 注意:虽然函数支持嵌 ...
- scala 学习笔记四 匿名函数
1.介绍 Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体. 使用匿名函数后,我们的代码变得更简洁了. 下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数: var ...
- python学习第四天-函数
函数 def开头 函数参数 其中name.age.sex为形参,'王锦时',21,'男'为实参 函数返回值 默认参数 关键字参数 收集参数 相当于把所有实参存在一个元组当中 收集参数和关键字参数的混 ...
- 快速傅里叶变换(FFT)学习笔记(未完待续)
目录 参考资料 FFT 吹水 例题 普通做法 更高大尚的做法 定义与一部分性质 系数表达式 点值表达式 点值相乘??? 卷积 复数 单位根 DFT IDFT 蝴蝶迭代优化 单位根求法 实现.细节与小优 ...
随机推荐
- Wireshark简单使用教程1——附视频
目录 Wireshark的简介 Wireshark面向的用户 Wireshark的下载安装 Wireshark抓取一个流量包 内容 1.Wireshark的简介 Wireshark(前称Etherea ...
- 【管理篇】用户故事STORY
项目管理中,常常听说story,用户故事 “一开始就做对系统”纯属神话,反之,我们应该去实现今天的用户故事,然后重构,明天再拓展系统.实现新的用户故事.这就是迭代和增量敏捷的精粹所在.
- javascript的数组之join()
join()方法将一个数组(或一个类数组对象)的所有元素根据传入的参数连接成一个字符串,并返回这个字符串. var elements = ['Fire', 'Wind', 'Rain']; conso ...
- java基础 第六章课后习题
1.说明循环结构中break语句和continue语句的区别. 在循环结构中 break语句 是结束程序运行. continue语句是结束本句程序 不是结束程序. 2.使用for循环结构实现,从键盘 ...
- MyOD-Linux od命令的实现
MyOD 一.设计思路 确定MyOD的要求 根据需求可知MyOD需要实现类似Linux下 od -tx -tc XXX的功能,于是先去网上查找了一下od命令的-tx以及-tc参数的作用,经查找后了解到 ...
- 防止enter提交表单
如何防止回车(enter)键提交表单,其实很简单,就一句话.onkeydown="if(event.keyCode==13)return false;"把这句写在from标签里面就 ...
- Digest of Overview of Linux Kernel Security Features
Linux kernel Security: I. DAC: Discretionary Access Control, the core security model of UNIX. II. PO ...
- 2019年5款你必须知道的顶级ASO优化工具
仅仅几年前,品牌一直在挣扎着进入顶级榜单的时候.但随着时代的变迁,以及技术承担着市场的每一个噱头,一切都发生了变化,包括市场的传播,消费者行为和品牌影响.今天,品牌不仅仅局限于广告和促销,而且品牌的影 ...
- LeetCode 242 Valid Anagram 解题报告
题目要求 Given two strings s and t , write a function to determine if t is an anagram of s. 题目分析及思路 给出两个 ...
- Linux系统中存储设备的两种表示方法
转:https://blog.csdn.net/holybin/article/details/38637381 一.对于IDE接口的硬盘的两种表示方法: 1.IDE接口硬盘,对于整块硬盘的两种表示方 ...