Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create package-level functions?

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?

like image 752
Berry Avatar asked Aug 04 '16 23:08

Berry


People also ask

What is package level functions in Kotlin?

Package-level functions are also known as top-level functions. They are declared directly inside a file without creating any class for them.

How do I create a kotlin package?

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.

What is a package in Kotlin?

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.


2 Answers

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.*
like image 122
Ryan Hilbert Avatar answered Sep 19 '22 06:09

Ryan Hilbert


Package-level functions

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.


Package-level functions with a class

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!

like image 35
Yogesh Umesh Vaity Avatar answered Sep 19 '22 06:09

Yogesh Umesh Vaity