simbolos - ¿Cuándo usar el signo igual en una declaración de método Scala?
signo parentesis (7)
A medida que avance el estilo predeterminado ha cambiado, y esto se ha mencionado en muchos de los comentarios a las respuestas, se recomienda en la guía de estilo oficial usar la sintaxis =
para las declaraciones de funciones.
Con el signo igual:
object HelloWorld {
def main(args: Array[String]) = {
println("Hello!")
}
}
Sin signo igual:
object HelloWorld {
def main(args: Array[String]) {
println("Hello!")
}
}
Ambos programas anteriores se ejecutan de la misma manera. En la entrada del blog Cosas que no me gustan en Scala , leí que cuando falta el signo igual, el método devolverá la Unit
(lo mismo que el void
de Java), por lo que los métodos que devuelven un valor deben usar el signo igual. Pero los métodos que no devuelven un valor se pueden escribir de cualquier manera.
¿Cuál es la mejor práctica para usar el signo igual en los métodos Scala que no devuelven un valor?
ACTUALIZACIÓN: a partir de Scala-2.10, se prefiere el uso del signo igual. Respuesta anterior:
Métodos que regresan La Unit
siempre debe usar la sintaxis no igual. Esto evita posibles errores en la implementación de la API. Por ejemplo, podrías haber hecho algo como esto accidentalmente:
object HelloWorld {
def main(args: Array[String]) = {
println("Hello!")
123
}
}
Ejemplo trivial, por supuesto, pero se puede ver cómo esto podría ser un problema. Como la última expresión no devuelve Unit
, el método en sí tendrá un tipo de devolución que no sea Unit
. Esto está expuesto en la API pública, y podría causar otros problemas en el futuro. Con la sintaxis no igual, no importa cuál sea la última expresión, Scala corrige el tipo de devolución como Unit
.
También es dos personajes más limpios. :-) También tiendo a pensar que la sintaxis no igual hace que el código sea un poco más fácil de leer. Es más obvio que el método en cuestión devuelve la Unit
lugar de algún valor útil.
En una nota relacionada, hay una sintaxis análoga para los métodos abstractos:
trait Foo {
def bar(s: String)
}
La bar
método tiene signature String=>Unit
. Scala hace esto cuando omite la anotación de tipo en un miembro abstracto. Una vez más, esto es más limpio y (creo) más fácil de leer.
Para los métodos, la Guía de estilo de Scala recomienda la sintaxis igual a la sintaxis de procedimiento
Sintaxis del procedimiento
Evite la sintaxis del procedimiento, ya que tiende a ser confusa con muy poca ganancia en brevedad.
// don''t do this
def printBar(bar: Baz) {
println(bar)
}
// write this instead
def printBar(bar: Bar): Unit = {
println(bar)
}
Realmente estoy en desacuerdo bastante fuerte con Daniel. Creo que la sintaxis no igual nunca debe ser utilizada. Si su método está siendo expuesto como una API y le preocupa que accidentalmente devuelva el tipo incorrecto, agregue una anotación de tipo explícito:
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello!")
123
}
}
La sintaxis no igual es más corta y podría parecer "más limpia", pero creo que solo agrega la posibilidad de confusión. A veces me olvidé de agregar un signo igual y creía que mi método estaba devolviendo un valor cuando en realidad estaba regresando la Unidad. Debido a que las sintaxis de tipo no inferible e igual a inferido son visualmente similares, es fácil pasar por alto este problema.
Aunque me cuesta un poco más de trabajo, prefiero las anotaciones de tipo explícito cuando importan (es decir, interfaces expuestas).
Una cosa: imagine la última declaración de un método que debería regresar. La unidad no devuelve la unidad. Usar la sintaxis no igual es muy conveniente, espero que esto no se desaproveche ya que veo varios casos de uso para él
para el método que no tiene un valor de retorno, una forma de expresar dichos métodos es omitir el tipo de resultado y el signo de igual, siguiendo el método con un bloque encerrado entre llaves. De esta forma, el método parece un procedimiento, un método que se ejecuta solo por sus efectos secundarios.
Debe utilizar el signo igual en declaraciones de llamadas, excepto las definiciones que devuelven la unidad.
En este último caso, puede renunciar al signo igual. Sin embargo, esta sintaxis puede ser obsoleta, por lo que es mejor evitarla. Usar el signo igual y declarar el tipo de retorno siempre funcionará.