web-dev-qa-db-fra.com

Dois-je utiliser Unit ou laisser de côté le type de retour pour ma méthode scala?

Je ne sais pas quelle est la différence entre spécifier Unit comme type de retour de ma méthode scala ou laisser de côté le type de retour. Quelle est la différence?

Quelqu'un peut-il s'il vous plaît conseiller?

50
balteo

Type de retour implicite Unit:

def f() {println("ABC")}

Type de retour explicite Unit:

def g(): Unit = {println("ABC")}

Type de retour déduit de la dernière expression de méthode, toujours Unit car il s'agit du type de println, mais déroutant:

def h() = println("ABC")

Toutes les méthodes ci-dessus sont équivalentes. Je préférerais f() car le manque d'opérateur = Après la signature de la méthode seule me suffit. Utilisez : Unit Explicite lorsque vous souhaitez documenter davantage la méthode. La dernière forme prête à confusion et est en fait traitée comme un avertissement dans intellij-idea .

L'opérateur = Est crucial. S'il est présent, cela signifie: " veuillez renvoyer ce que la dernière instruction renvoie " dans le corps de la méthode. De toute évidence, vous ne pouvez pas utiliser cette syntaxe pour les méthodes abstract. Si ce n'est pas le cas, Unit est supposé.

53
Tomasz Nurkiewicz

La syntaxe spéciale pour les procédures (méthodes retournant nit) était une erreur. Ne l'utilisez pas. C'est déroutant et dangereux pour les débutants avec un fond Java/C (++). Et c'est un traitement spécial inutile. Utilisez toujours le signe égal, avec et sans inférence de type (ce dernier ne doit être utilisé que pour les membres privés):

def foo(): Unit = someCodeReturningUnit()

private def bar() = someCodeReturningUnit()
14
Heiko Seeberger

La communauté Scala est divisée à ce sujet. D'une part, ne pas utiliser de types de retour explicites signifie que vous pouvez facilement oublier le = signe, ce qui entraîne des erreurs souvent gênantes à suivre. D'un autre côté, Unit- renvoyant des méthodes ayant une syntaxe différente les place dans une catégorie distincte, ce qui plaît à certaines personnes.

Personnellement, je préfère que cette syntaxe disparaisse - les erreurs résultant du manque de =sont ennuyeux à suivre. Mais il n'est même pas obsolète, je préfère donc en profiter plutôt que de simplement souffrir des problèmes de son existence.

Alors, utilisez ce que vous voulez. Il y aura des gens qui critiqueront votre choix de toute façon, et des gens qui en feront l'éloge de toute façon.

6
Daniel C. Sobral