[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 蝴蝶迭代优化 单位根求法 实现.细节与小优 ...
随机推荐
- 3.2station
题意火车进入,然后要求以最大字典序输出 解题思路:先用一个数组储存当前位置之后最大的数字是什么,然后把已经进站的最后一节火车和还没进站的车的最大值,哪个更大,如果已经进站的更大,那么就先出站,否则就先 ...
- Redis 中可以存储的五种基本类型
具体介绍 数字还是字符? String(字符串) 二进制安全 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M --- Hash(字典) 键值对集合,即编程语言中的Map类型 ...
- shell-特殊变量列表
特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n $# 传递给脚本或函数的参数个数. $* 传递给脚本或函数的所有参数.有引号则引号内,作为一个参数传入. $@ 传递 ...
- python联系-迭代器
from collections import Iterable from collections import Iterator import time class Classmate(object ...
- Jumpserver之快速入门
一,系统设置 1.1基本设置 修改 url 的"localhost"为你的实际 url 地址, 否则邮件收到的地址将为"localhost" 也无法创建新用户 ...
- js 第三期 小肩膀 第一段
var 时间戳 = new.Date().getTime();//系统引擎 var 时间戳 = Date.now(); //V8引擎 数据类型 false = underfuned =null = ...
- MYSQL定时任务 触发器
流程: 查看时间调度器是否开启,OFF关闭,ON开启 SHOW VARIABLES LIKE 'event_scheduler' 设置开启 set GLOBAL event_scheduler = 1 ...
- rest_framework 跨域和CORS
跨域和CORS 本节目录 一 跨域 二 CORS 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 跨域 同源策略(Same origin policy)是一种约定, ...
- Python全栈-magedu-2018-笔记4
第三章 - Python 内置数据结构 元组tuple 一个有序的元素组成的集合 使用小括号 ( ) 表示 元组是不可变对象 元组的定义 初始化 定义 tuple() -> empty tupl ...
- 减少xcode错误输出
运行xcrun相关命令如果出现找不到对应模块和工具,要确认一下在xcode中命令行工具是否正确设置了 xcrun simctl spawn booted log config --mode " ...