Kotlin基础教程之Run,标签Label,函数Function-Type
发布时间 - 2026-01-11 01:25:34 点击率:次Kotlin基础教程之Run,标签Label,函数Function-Type

在Java中可以使用{}建立一个匿名的代码块,代码块会被正常的执行,除了改变了作用域之外,似乎并没有什么其他的作用。然而在Kotlin中却不能这么做,这是为什么呢?
其实,我们都知道一个函数一定与一个内存地址相关,而一个匿名的代码块其实也相当于是一个匿名的函数。在Kotlin中一般使用run函数来运行一段匿名代码块。
如下:
在Kotlin中使用标识符后跟@符号来定义一个标签,使用@后跟标识符来引用一个标签,run函数的语法初看起来似有一些怪异,其实run函数以一个函数作为参数,而一个匿名的代码块就可以是一个匿名函数,当我们在IntelliJ IDEA中把鼠标光标放到匿名代码块的大括号上时,会显示出匿名代码块对应的函数签名
local final fun <anonymous> ():Int defined in com.kotlin_learn.control_flow.fun_run
如图:
local代表作用域,定义在函数内部,作用域仅为local,final代表不可变,<anonymous>即为匿名,()是参数列表,Int是返回值,com.kotlin_learn.control_flow.fun_run是函数定义位置的完整路径。
由此可见,run函数的参数,那段匿名代码块被编译器转换为了一个匿名函数是毫无疑问的。
当然run函数是可以有返回值的,所以匿名代码块也可以是有返回值的匿名函数。
每一个函数都与一个或多个地址相对应,而每一个标签Label也是与一个或多个地址相对应,所以函数本身即是标签。
所以可以使用return@run之类的语法。
匿名函数虽然没有函数名,然而我们可以定义一个具名标签来代表这个函数,于是可以使用return@outer 2将2返回给i。
也许有人会有疑问,为什么不直接使用return 2呢,原因是return 将会从fun_run函数返回,而不是从匿名函数返回。
关于return和函数嵌套定义的问题下面还会说。
这段代码的运行结果如下:
接下来说一说forEach函数,与其他语言中不同,在Kotlin中forEach并不是一种语法,而是一类函数,forEach是iterator的函数,任何实现了iterator的类都可以使用forEach。forEach函数的参数也是一个函数,其参数是一个模板函数,可以是具名函数,匿名函数,lambda。forEach会对iterator迭代的每一个元素都调用一次传入的函数。
之所以讲到forEach,是为了熟悉标签的用法和return的用法。
如下:
别忘了infix function call。
运行结果如下:
接下来说一说function type,讨论一下函数。
对程序员来说,函数是很熟悉的,然而我们对函数就真的那么熟悉么?
函数也可以是类型,可以是变量,甚至常量。
如下:
在这段代码中我们定义了几个函数类型的变量和常量,并且在之间进行赋值等操作,其实和C++中的函数指针很相似,但是也有独特的地方。比如嵌套函数定义,函数标签的引用以及带标签的返回值等等。我们也看到了在一个匿名函数(end1代表的那个)中如何使用lambda表达式定义函数的参数列表和自动判断的返回类型。
这段代码运行结果如下:
刚才我们提到了函数嵌套定义,这是一个需要小心的地方。
看如下的代码:
从Java/C++一系出身的程序员(比如我:))很容易把这里的嵌套函数定义看成是匿名代码块的嵌套,以为程序会从外往内执行。从Pascal/PL一系出身的程序员就不会有这种问题,千万记住,函数虽然可以嵌套定义,但是如果没有调用是不会从外向内执行的。
所以输出很简单:
我们也看到了return的用法,这里的f1,f2,f3虽然是内部定义的函数,但是依然可以作为标签使用。
可见Kotlin是一种集大成的语言,甚至借鉴了古老的unix脚本和Pascal的语法,借鉴了很多语言的特性,再加上强大的编译器(Kotlin编译器会帮你做很多东西,远比其他语言做的多得多),使Kotlin的代码非常简洁优雅而且编程相当灵活高效。
在Kotlin中,太多的功能都是通过使用函数作为参数来实现,有的已经不能叫做语法,然而函数嵌套,infix function call,lambda,函数参数,可变参数列表,灵活的标签,强大的return,自动类型判断,Range,iterator,操作符重载,省略,模板...这些太多的功能,导致Kotlin的语法眼花缭乱,虽然有时看起来很优雅,但是也可能给人阅读代码带来巨大的困难。
最后以一段没什么用的代码结束本篇。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Kotlin 教程
# 标签Label
# 函数Function-Type
# 是一个
# 可以使用
# 这段
# 返回值
# 太多
# 多个
# 一个函数
# 也看
# 相对应
# 说一说
# 都是
# 这是
# 有什么
# 几个
# 也有
# 是一种
# 会有
# 是有
# 鼠标
# 将会
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
郑州企业网站制作公司,郑州招聘网站有哪些?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
活动邀请函制作网站有哪些,活动邀请函文案?
如何在企业微信快速生成手机电脑官网?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
JavaScript如何实现错误处理_try...catch如何捕获异常?
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Laravel如何处理异常和错误?(Handler示例)
移动端脚本框架Hammer.js
Laravel如何实现事件和监听器?(Event & Listener实战)
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
开心动漫网站制作软件下载,十分开心动画为何停播?
青岛网站建设如何选择本地服务器?
如何在橙子建站中快速调整背景颜色?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
如何在云服务器上快速搭建个人网站?
香港服务器选型指南:免备案配置与高效建站方案解析
浅谈redis在项目中的应用
JS去除重复并统计数量的实现方法
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Python数据仓库与ETL构建实战_Airflow调度流程详解
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
制作旅游网站html,怎样注册旅游网站?
如何确认建站备案号应放置的具体位置?
如何在腾讯云服务器上快速搭建个人网站?
中山网站推广排名,中山信息港登录入口?
5种Android数据存储方式汇总
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
想要更高端的建设网站,这些原则一定要坚持!
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
如何快速生成专业多端适配建站电话?
浅述节点的创建及常见功能的实现
JS经典正则表达式笔试题汇总
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
Android利用动画实现背景逐渐变暗
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项

