Avec le signe égal:
object HelloWorld {
def main(args: Array[String]) = {
println("Hello!")
}
}
Sans signe égal:
object HelloWorld {
def main(args: Array[String]) {
println("Hello!")
}
}
Les deux programmes ci-dessus s'exécutent de la même manière. Dans le billet de blog Choses que je n'aime pas dans Scala, j'ai lu que lorsque le signe égal est manquant, la méthode retournera Unit
(identique à celle de Java void
), donc les méthodes qui retournent une valeur doivent utiliser le signe égal. Mais les méthodes qui ne retournent pas de valeur peuvent être écrites de toute façon.
Quelle est la meilleure pratique pour utiliser le signe égal dans les méthodes Scala qui ne renvoient pas de valeur?
MISE À JOUR: à partir de Scala-2.10, l'utilisation du signe égal est préférable. Ancienne réponse:
Les méthodes qui retournent
Unit
doivent toujours utiliser la syntaxe non égale. Cela évite d'éventuelles erreurs de mise en œuvre dans l'API. Par exemple, vous pourriez avoir accidentellement fait quelque chose comme ceci:object HelloWorld { def main(args: Array[String]) = { println("Hello!") 123 } }
Exemple trivial bien sûr, mais vous pouvez voir comment cela pourrait être un problème. Étant donné que la dernière expression ne retourne pas
Unit
, la méthode elle-même aura un type de retour autre queUnit
. Ceci est exposé dans l'API publique et pourrait causer d'autres problèmes ultérieurement. Avec la syntaxe non égale, peu importe quelle est la dernière expression, Scala corrige le type de retour commeUnit
.C'est aussi deux personnages plus propres. :-) J'ai aussi tendance à penser que la syntaxe non égale rend le code un peu plus facile à lire. Il est plus évident que la méthode en question renvoie
Unit
plutôt qu'une valeur utile.Dans le même ordre d'idées, il existe une syntaxe analogue pour les méthodes abstraites:
trait Foo { def bar(s: String) }
La méthode
bar
a une signatureString=>Unit
. Scala fait cela lorsque vous omettez l'annotation de type sur un membre abstrait. Encore une fois, c'est plus propre et (je pense) plus facile à lire.la source
Vous devez utiliser des déclarations d'appel de signe égal à l'exception des définitions renvoyant Unit.
Dans ce dernier cas, vous pouvez renoncer au signe égal. Cette syntaxe peut cependant être obsolète, il vaut donc mieux l'éviter. L'utilisation du signe égal et la déclaration du type de retour fonctionnera toujours.
la source
Pour les méthodes, Scala Style Guide recommande la syntaxe égale par opposition à la syntaxe de procédure
// don't do this def printBar(bar: Baz) { println(bar) } // write this instead def printBar(bar: Bar): Unit = { println(bar) }
la source
Une chose: imaginez la dernière instruction d'une méthode qui devrait retourner Unit ne retourne pas Unit. Utiliser la syntaxe non égale est alors très pratique, j'espère que cela ne sera pas obsolète car je vois plusieurs cas d'utilisation pour cela
la source
Au fil du temps, le style par défaut a changé, et cela a été mentionné dans de nombreux commentaires aux réponses, il est recommandé dans le guide de style officiel d'utiliser la
=
syntaxe pour les déclarations de fonctions.la source
pour les méthodes qui n'ont pas de valeur de retour, un moyen d'exprimer de telles méthodes consiste à omettre le type de résultat et le signe égal, en suivant la méthode avec un bloc entre accolades. Sous cette forme, la méthode ressemble à une procédure, une méthode qui n'est exécutée que pour ses effets secondaires.
la source