在之前的内容中,我们学习了 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 中创建和使用函数的更多相关文章

  1. Android总结篇系列:Activity中几个主要函数详解

    Activity作为Android系统中四大基本组件之一,包含大量的与其他的各大组件.intent.widget以及系统各项服务等之间的交互的函数.在此,本文主要选取实际项目开发中常用的,但完全理解又 ...

  2. python基础系列教程——Python中的编码问题,中文乱码问题

    python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...

  3. Kotlin中的“忍者”函数 —— 理解泛型的能力(KAD 12)

    作者:Antonio Leiva 时间:Feb 8, 2017 原文链接:https://antonioleiva.com/generic-functions-kotlin/ Kotlin的一些特性组 ...

  4. 2018-02-17 中文代码示例[译]Scala中创建隐式函数

    前言: 学习Scala时, 顺便翻译一下自己有兴趣的文章. 代码中所有命名都中文化了(不是翻译). 比如原文用的是甜甜圈的例子. 原文: Scala Tutorial - Learn How To C ...

  5. Go基础系列:Go中的方法

    Go方法简介 Go中的struct结构类似于面向对象中的类.面向对象中,除了成员变量还有方法. Go中也有方法,它是一种特殊的函数,定义于struct之上(与struct关联.绑定),被称为struc ...

  6. Android提升篇系列:Activity recreate(Activity 重新创建/自我恢复)机制(一)

    注:本文中的recreate是指当内存不足时,Activity被回收,但再次来到此Activity时,系统重新恢复的过程.例如:当Activity A到Activity B时,如果内存不足,A被回收, ...

  7. Spring基础系列--AOP织入逻辑跟踪

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9619910.html 其实在之前的源码解读里面,关于织入的部分并没有说清楚,那些前置.后 ...

  8. SpringBoot基础系列之自定义配置源使用姿势实例演示

    [SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...

  9. 【Xamarin开发 Android 系列 7】 Android 结构基础(下)

    原文:[Xamarin开发 Android 系列 7] Android 结构基础(下) *******前期我们不打算进行太深入的东西,省的吓跑刚进门的,感觉门槛高,so,我们一开始就是跑马灯一样,向前 ...

  10. 【Xamarin开发 Android 系列 6】 Android 结构基础(上)

    原文:[Xamarin开发 Android 系列 6] Android 结构基础(上) 前面大家已经熟悉了什么是Android,而且在 [Xamarin开发 Android 系列 4] Android ...

随机推荐

  1. iPaaS集成平台与ESB在应用场景上的区别

    在当今企业数字化转型的浪潮中,集成平台的重要性日益凸显.谷云科技作为企业集成平台技术厂商,在与客户的交流过程中,一个频繁被提及的问题是:ESB与iPaaS到底有何区别? 今天就让我们深入探讨一下这两者 ...

  2. SciTech-Mathmatics-Probability+Statistics-VI-Statistics:Quantifing Uncertainty+Regression Analysis(回归分析)

    SciTech-Mathmatics-Probability+Statistics-V-Statistics:Quantifing Uncertainty RA的Kernel Goal的是Predic ...

  3. Win11正式版ipv6无网络访问权限的问题

    一些深度官网的用户,在最新版win11正式版使用ipv6网络的时候,出现无法正常上网,如何处理这个问题呢?本文中,深度系统小编带来详细的解决方法,有需要的用户可以看看学习一下. 当 Win11 出现 ...

  4. 2.4 rt-thread实操-使用scons向工程中添加分组和文件

    1.我的工程目录当前是这样 2. 现在想向工程中添加hello分组和hello.c.hello.h文件,并使用soncs自动生成到工程hello分组中,并可通过menuconfig去配置宏,进行打开是 ...

  5. 如何基于动态关系进行ORM关联查询,并动态推断DTO?

    在上一篇文章(Prisma不能优雅的支持DTO,试试Vona ORM吧)中,我们基于静态关系实现了目录树的关联查询,并且动态推断生成了DTO(用于Swagger元数据).在这篇文章我们探讨动态关系的用 ...

  6. 1007 CCPC Training Class

    http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1007&cid=909 CCPC Training Class Time ...

  7. MySQL 27 主库出问题了,从库怎么办?

    基本的一主多从结构: 图中,A和A'互为主备,从库BCD指向主库A.一主多次的设置,一般用于读写分离,主库负责所有的写入和一部分读,从库负责其他的读请求. 当主库发生故障,主备切换: 一主多从结构在切 ...

  8. 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 ...

  9. MySQL Binlog Digger 4.28 【mysql日志分析工具】

    https://blog.csdn.net/bournetai?type=blog https://blog.csdn.net/bournetai/article/details/122864293? ...

  10. Chrome 允许浏览器使用多达 80% 的总磁盘空间。一个来源最多可以使用总磁盘空间的 60%。

    https://web.dev/storage-for-the-web/#check https://web.dev/storage-for-the-web/#:~:text=Chrome%20all ...