I was reading the Kotlin Reference Guide and one part said:
In Kotlin, unlike Java or C#, classes do not have static methods. In most cases, it’s recommended to simply use package-level functions instead.
How does one create a package-level function?
Package-level functions are also known as top-level functions. They are declared directly inside a file without creating any class for them.
To reuse your code, create a package using the package keyword. The package statement must be the first non-comment statement in the file. You can name the source-code file anything you like, unlike Java which requires the file name to be the same as the class name.
A Kotlin project is structured into packages. A package contains one or more Kotlin files, with files linked to a package using a package header. A file may contain exactly one or zero package headers, meaning each file belongs to exactly one package.
From the reference:
All the contents (such as classes and functions) of the source file are contained by the package declared.
So simply by creating a source file like so:
package my.pkg
fun f0()=0
fun f1()=1
We can declare functions named f0
and f1
directly visible to the my.pkg
package. These functions may then be imported and used similarly to classes:
import my.pkg.f0
import my.pkg.f1
Alternatively, using the *
syntax:
import my.pkg.*
Package-level functions are also known as top-level functions. They are declared directly inside a file without creating any class for them. They are often utility functions independent of any class:
UserUtils.kt
package com.app.user
fun getAllUsers() { }
fun getProfileFor(userId: String) { }
Usage:
import com.app.user.getProfileFor
val userProfile = getProfileFor("34")
You don't need to manually write the import
statement, just type the function name and the auto-import will do its job.
When the functions are somewhat related to a class, define them just above the class, in the same file:
User.kt
package com.app.user
fun getAllUsers() { }
fun getProfileFor(userId: String) { }
data class User(val id: String, val name: String)
Usage:
import com.app.user.getAllUsers
val userList = getAllUsers()
companion object
When the functions are closely related to a class, define them inside a companion object
:
User.kt
data class User(val id: String, val name: String) {
companion object {
fun getAll() { }
fun profileFor(userId: String) { }
}
}
Usage:
import com.app.user.User
val userProfile = User.profileFor("34")
That's it!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With