Kotlin: Funktionen
Willemers Informatik-Ecke
  • Arrays
  • Klassen

  • Funktionen umfassen ein oder mehrere Anweisungen quasi zu einem Befehl zusammen, der von verschiedenen Stellen im Programm aufgerufen werden kann.

    Die Funktion printline wird zwei Mal aufgerufen.
    fun main() {
        printline()
        println("Umrahmter Text")
        printline()
    }
    
    fun printline() {
        for (i in 0..39) {
            print('-')
        }
        println()
    }
    

    Parameter

    Das Hauptprogramm kann einer Funktion auch Parameter übergeben. Hier wurde die Funktion printline ein zweites Mal erstellt, jedoch mit einem Parameter. Funktionen dürfen durchaus den gleichen Namen tragen, sofern sie sich in den Parametern unterscheiden. Der Compiler findet dann heraus, welche gemeint ist. Im Beispiel ruft der erste Aufruf die Funktion mit dem ganzzahligen Parameter, der zweite Aufruf die Funktion ohne Parameter.

    Wenn sich Funktionen nur anhand des Parameters unterscheiden, spricht man vom Überladen.

    fun main() {
        var text = "Umrahmter Text"
        printline(text.length)
        println(text)
        printline()
    }
    
    fun printline() {
        for (i in 0..39) {
            print('-')
        }
        println()
    }
    
    fun printline(anzahl : Int) {
        for (i in 1..anzahl) {
            print('-')
        }
        println()
    }
    

    Rückgabe

    Eine mathematische Funktion liefert genau einen Wert zurück. Das können Sie in Kotlin nachbilden, indem in der Funktion der Befehl return einen Wert bezeichnet, der das Ergebnis der Funktionsberechnung darstellt.

    Am Kopf der Funktion geben Sie hinter der Klammer nach einem Doppelpunkt den Typ an, den die Funktion zurückgeben soll.

    Beim Aufruf wird eine Funktion zu einem Ausdruck und kann darum rechts des Zuweisungsoperators stehen. Das folgende Beispiel zeigt den Aufruf und die Umsetzung einer Summe der Zahlen zwischen 0 und der übergebenen Zahl.

    fun main() {
        val endsumme = 10
        var a = summe(endsumme)
        println("Summe von 1 bis $endsumme: " + a)
    }
    
    fun summe(n : Int) : Int {
        var s = 0
        for (i in 0..n) {
            s += i
        }
        return s
    }
    

    Vorgabeparameter

    Parameter können mit Default-Werten vergeben werden. Beispielsweise kann die Funktion summe zwei Parameter von und bis erhalten. Dabei wird für von der Standardwert 1 vorgegeben.
    fun summe(von: Int = 1, bis : Int) : Int {
        var s = 0
        for (i in von..bis) {
            s += i
        }
        return s
    }
    
    Ruft man die Funktion mit nur einem Parameter aufgerufen, wird der noch nicht vorbelegte Parameter mit dem Aufrufparameter belegt. Werden beide Parameter angegeben, wird die Vorgabe ignoriert.
    val endsumme = 10
    val start = 8
    var a = summe(endsumme)        // 55
    var b = summe(start, endsumme) // 27
    
    Im Beispiel wird die Variable a 55 enthalten, die Variable b dagegen 27.

    Ohne geschweifte Klammern

    Der Block in geschweiften Klammern kann durch einen einfachen Ausdruck ersetzt werden.
    fun quadrat(x: Int) = x * x
    

    Lambda

    Lambda ist eine anonyme Funktion, also eine Funktion ohne Namen. Die Konsequenz ist, dass sie nicht mehrfach aufgerufen werden kann. Lambda wird durch geschweifte Klammern umgeben.
    val summe = {a: Int, b: Int -> a + b}