Wat is het doel van Unit-returning in functies

Uit de Kotlin-documentatie:

Als een functie geen bruikbare waarde retourneert, is het retourtype Eenheid. Eenheid is een type met slechts één waarde: Eenheid.WAARDE. Deze waarde hoeft niet expliciet te worden geretourneerd:

fun printHello(name : String?) : Unit { 
   if (name != null) 
     print("Hello, $name!") 
   else 
     print("Hi there!") 
   // We don't need to write 'return Unit.VALUE' or 'return', although we could 
}

Wat is het doel van Unit-returning in functies? Waarom is WAARDE daar? Wat is deze WAARDE?


Antwoord 1, autoriteit 100%

Het doel is hetzelfde als de voidvan C of Java. Alleen Eenheid is een juist type, dus het kan worden doorgegeven als een generiek argument enz.

  1. Waarom we het geen “Void” noemen: omdat het woord “void” “niets” betekent, en er is een ander type, Nothing, dat gewoon “helemaal geen waarde” betekent “, dat wil zeggen dat de berekening niet normaal is voltooid (voor altijd doorgelust of een uitzondering heeft gegenereerd). We konden ons de botsing van betekenissen niet veroorloven.

  2. Waarom Eenheid een waarde heeft (d.w.z. is niet hetzelfde als Niets): omdat generieke code dan soepel kan werken. Als u Unit doorgeeft voor een generieke parameter T, verwacht de code die voor elke T is geschreven een object en moet er een object zijn, de enige waarde van Unit.

  3. Hoe toegang te krijgen tot die waarde van Unit: aangezien het een singleton-object is, zeg je gewoon Unit


Antwoord 2, autoriteit 14%

De belangrijkste reden waarom Eenheid bestaat, is vanwege generieke redenen.
Laten we het voorbeeld uit de Kotlin-documenten gebruiken.

class Box<T>(t: T) {
    var value = t
}

We kunnen hebben

var box = Box(Unit)

Dit is de reden waarom Unit een waarde retourneert zodat de Kotlin deze kan afleiden uit het type dat is doorgegeven aan de klasse-initialisatie. Je kunt het natuurlijk ook expliciet zo schrijven,

var box = Box<Unit>(Unit)

maar toch moet het een retourwaarde hebben.
Het voidzoekwoord in Java in Kotlin is nu Nothing. Nietsis het op één na laatste type in de typehiërarchie in Kotlin, met als laatste Niets?(Nullable Niets). Dit levert helemaal geen waarde op. Omdat het helemaal geen waarde retourneert, kunnen we het niet als een type doorgeven in de bovenstaande code.

var box = Box(Nothing) //This will return an Error

Antwoord 3, autoriteit 6%

UNITbevat eigenlijk waardevolle informatie, het betekent eigenlijk gewoon “KLAAR”. Het retourneert gewoonde informatie aan de beller dat de methode is voltooid. Dit is een echt stukje informatie, dus het kan worden gezien als de retourwaardevan een methode.

Other episodes