Quel est le but de l'unité-retour dans les fonctions

De la documentation Kotlin:

Si une fonction ne renvoie aucune valeur utile, son type de retour est Unit. Unit est un type avec une seule valeur-Unit.VALEUR. Cette valeur ne doit pas être retournée explicitement:

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 
}

Quel est le but du retour D'unité dans les fonctions? Pourquoi est la VALEUR de y? Quelle est cette valeur?

44
demandé sur MajesticRa 2014-03-26 12:12:06

3 réponses

Le but est Le même que C ou Java void. Seule unité est un type approprié, donc il peut être passé comme un argument Générique, etc.

  1. Pourquoi nous ne l'appelons pas "Void": parce que le mot "void" signifie "rien", et il y a un autre type, Nothing, cela signifie simplement "aucune valeur du tout", c'est-à-dire que le calcul ne s'est pas terminé normalement (bouclé pour toujours ou jeté une exception). Nous ne pouvions pas nous permettre le choc des significations.

  2. Pourquoi l'Unité a une valeur (c'est à dire n'est pas la même que Rien): parce que le code générique peut fonctionner ensuite. Si vous passez Unit pour un paramètre générique T, le code écrit pour tout T attendra un objet, et il doit y avoir un objet, la seule valeur de Unit.

  3. Comment accéder à cette valeur D'Unité: puisque c'est un objet singleton, dites simplementUnit

92
répondu Andrey Breslav 2016-04-08 15:40:49

La raison principale pour laquelle L'Unité existe est due à des raisons génériques. Utilisons l'exemple des documents Kotlin.

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

Nous pouvons avoir

var box = Box(Unit)

C'est pourquoi Unit renvoie une valeur afin que le Kotlin puisse la déduire du type passé dans l'initialisation de la classe. Bien sûr, vous pouvez aussi l'écrire explicitement comme ceci,

var box = Box<Unit>(Unit)

, Mais tout de même, il doit avoir une valeur de retour. Maintenant, le nul mot-clé à Java Kotlin est Rien. Rien est le dernier, mais d'un type dans la hiérarchie des types de Kotlin avec la dernière Rien? (Nullable Rien). Cela ne renvoie aucune valeur du tout. Parce qu'il ne renvoie aucune valeur du tout, nous ne pouvons pas le transmettre en tant que type dans le code ci-dessus.

var box = Box(Nothing) //This will return an Error
10
répondu Alf Moh 2017-06-23 21:02:14

UNIT contient en fait des informations précieuses, cela signifie simplement "fait". Il suffit de retourne les informations à l'appelant, que la méthode a été terminée. C'est une véritable information, donc elle peut être considérée comme la valeur de retour d'une méthode.

1
répondu spyro 2018-08-24 20:00:46