3.Android Compose 基础系列:在 Kotlin 中创建和使用函数
在之前的内容中,我们学习了 Kotlin 的基本语法与变量。现在,让我们来认识函数——Kotlin 的核心组成部分。
函数能让你把代码拆分成可复用的部分,让程序结构更清晰、可维护性更高。
1. 什么是函数
函数是执行特定任务的一段代码。Kotlin 用 fun 关键字定义函数。
fun main() {
println("Hello, world!")
}
main() 是程序入口函数。println() 是 Kotlin 内置函数,用于输出文本。
2. 定义并调用函数
你可以定义自己的函数,让代码更简洁、更易读,函数语法如下:

fun main() {
birthdayGreeting()
}
fun birthdayGreeting() {
println("Happy Birthday, Rover!")
println("You are now 5 years old!")
}
运行结果:
Happy Birthday, Rover!
You are now 5 years old!
3. 从函数返回值
函数可以返回数据,而不仅仅是输出文本。
fun main() {
println(birthdayGreeting())
}
fun birthdayGreeting(): String {
val nameGreeting = "Happy Birthday, Rover!"
val ageGreeting = "You are now 5 years old!"
return "$nameGreeting\n$ageGreeting"
}
输出:
Happy Birthday, Rover!
You are now 5 years old!
4. 添加形参(参数)
让函数更灵活,接受输入值:
fun main() {
println(birthdayGreeting("Rover"))
}
fun birthdayGreeting(name: String): String {
val nameGreeting = "Happy Birthday, $name!"
val ageGreeting = "You are now 5 years old!"
return "$nameGreeting\n$ageGreeting"
}
你可以用不同的参数调用函数:
println(birthdayGreeting("Rex"))
5. 多个形参
一个函数可以有多个参数:
fun main() {
println(birthdayGreeting("Rover", 5))
println(birthdayGreeting("Rex", 2))
}
fun birthdayGreeting(name: String, age: Int): String {
return "Happy Birthday, $name!\nYou are now $age years old!"
}
输出:
Happy Birthday, Rover!
You are now 5 years old!
Happy Birthday, Rex!
You are now 2 years old!
6. 使用具名实参
调用函数时,可以明确指定参数名称,提高可读性或改变顺序:
println(birthdayGreeting(name = "Rex", age = 2))
println(birthdayGreeting(age = 5, name = "Rover"))
输出保持一致,Kotlin 会根据名称匹配参数。
7. 默认参数
为参数设置默认值,让函数调用更灵活:
fun main() {
println(birthdayGreeting(age = 5))
println(birthdayGreeting("Rex", 2))
}
fun birthdayGreeting(name: String = "Rover", age: Int): String {
return "Happy Birthday, $name! You are now $age years old!"
}
输出:
Happy Birthday, Rover! You are now 5 years old!
Happy Birthday, Rex! You are now 2 years old!
8. 小结
使用 fun 定义函数。
函数可以有参数和返回值。
参数在函数定义中声明,调用时传入实参。
可以使用具名实参或默认值简化调用。
函数让代码更简洁、可重用、易维护。
引用与版权说明
- 本文内容部分参考自 Kotlin 官方文档 及 Android Developers 官方指南,并结合作者的实战经验进行讲解与整理。
- 文中图片(如代码结构示意图)来源于官方图床或官方文档示例,仅用于教学与学习目的。
- 代码示例均为原创或根据官方示例改写,遵循 Apache License 2.0 协议。
- 若涉及版权问题或引用不当,请联系作者进行处理。
3.Android Compose 基础系列:在 Kotlin 中创建和使用函数的更多相关文章
- Android总结篇系列:Activity中几个主要函数详解
Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又 ...
- python基础系列教程——Python中的编码问题,中文乱码问题
python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...
- Kotlin中的“忍者”函数 —— 理解泛型的能力(KAD 12)
作者:Antonio Leiva 时间:Feb 8, 2017 原文链接:https://antonioleiva.com/generic-functions-kotlin/ Kotlin的一些特性组 ...
- 2018-02-17 中文代码示例[译]Scala中创建隐式函数
前言: 学习Scala时, 顺便翻译一下自己有兴趣的文章. 代码中所有命名都中文化了(不是翻译). 比如原文用的是甜甜圈的例子. 原文: Scala Tutorial - Learn How To C ...
- Go基础系列:Go中的方法
Go方法简介 Go中的struct结构类似于面向对象中的类.面向对象中,除了成员变量还有方法. Go中也有方法,它是一种特殊的函数,定义于struct之上(与struct关联.绑定),被称为struc ...
- Android提升篇系列:Activity recreate(Activity 重新创建/自我恢复)机制(一)
注:本文中的recreate是指当内存不足时,Activity被回收,但再次来到此Activity时,系统重新恢复的过程.例如:当Activity A到Activity B时,如果内存不足,A被回收, ...
- Spring基础系列--AOP织入逻辑跟踪
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9619910.html 其实在之前的源码解读里面,关于织入的部分并没有说清楚,那些前置.后 ...
- SpringBoot基础系列之自定义配置源使用姿势实例演示
[SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...
- 【Xamarin开发 Android 系列 7】 Android 结构基础(下)
原文:[Xamarin开发 Android 系列 7] Android 结构基础(下) *******前期我们不打算进行太深入的东西,省的吓跑刚进门的,感觉门槛高,so,我们一开始就是跑马灯一样,向前 ...
- 【Xamarin开发 Android 系列 6】 Android 结构基础(上)
原文:[Xamarin开发 Android 系列 6] Android 结构基础(上) 前面大家已经熟悉了什么是Android,而且在 [Xamarin开发 Android 系列 4] Android ...
随机推荐
- iPaaS集成平台与ESB在应用场景上的区别
在当今企业数字化转型的浪潮中,集成平台的重要性日益凸显.谷云科技作为企业集成平台技术厂商,在与客户的交流过程中,一个频繁被提及的问题是:ESB与iPaaS到底有何区别? 今天就让我们深入探讨一下这两者 ...
- SciTech-Mathmatics-Probability+Statistics-VI-Statistics:Quantifing Uncertainty+Regression Analysis(回归分析)
SciTech-Mathmatics-Probability+Statistics-V-Statistics:Quantifing Uncertainty RA的Kernel Goal的是Predic ...
- Win11正式版ipv6无网络访问权限的问题
一些深度官网的用户,在最新版win11正式版使用ipv6网络的时候,出现无法正常上网,如何处理这个问题呢?本文中,深度系统小编带来详细的解决方法,有需要的用户可以看看学习一下. 当 Win11 出现 ...
- 2.4 rt-thread实操-使用scons向工程中添加分组和文件
1.我的工程目录当前是这样 2. 现在想向工程中添加hello分组和hello.c.hello.h文件,并使用soncs自动生成到工程hello分组中,并可通过menuconfig去配置宏,进行打开是 ...
- 如何基于动态关系进行ORM关联查询,并动态推断DTO?
在上一篇文章(Prisma不能优雅的支持DTO,试试Vona ORM吧)中,我们基于静态关系实现了目录树的关联查询,并且动态推断生成了DTO(用于Swagger元数据).在这篇文章我们探讨动态关系的用 ...
- 1007 CCPC Training Class
http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1007&cid=909 CCPC Training Class Time ...
- MySQL 27 主库出问题了,从库怎么办?
基本的一主多从结构: 图中,A和A'互为主备,从库BCD指向主库A.一主多次的设置,一般用于读写分离,主库负责所有的写入和一部分读,从库负责其他的读请求. 当主库发生故障,主备切换: 一主多从结构在切 ...
- https://github.com/skulpt/skulpt/issues/685
https://github.com/skulpt/skulpt/issues/685 Yes, you need to pass in your own function during the co ...
- MySQL Binlog Digger 4.28 【mysql日志分析工具】
https://blog.csdn.net/bournetai?type=blog https://blog.csdn.net/bournetai/article/details/122864293? ...
- Chrome 允许浏览器使用多达 80% 的总磁盘空间。一个来源最多可以使用总磁盘空间的 60%。
https://web.dev/storage-for-the-web/#check https://web.dev/storage-for-the-web/#:~:text=Chrome%20all ...