2011-09-29 26 views
29

Duplicar posible:
Functions vs methods in Scala
What is the difference between def foo = {} and def foo() = {} in Scala?diferencia entre la función con paréntesis y sin

en Scala podemos definir

def foo():Unit = println ("hello") 

o

def foo:Unit = println ("hello") 

Sé que no son lo mismo, pero ¿cuál es la diferencia, y cuál debe usarse cuándo?

Si esto ha sido respondido antes, por favor dirígeme a ese enlace.

+0

@MatthewFarwell No creo que la pregunta vinculada responda a la pregunta de parens. –

+0

Y vea también http://stackoverflow.com/questions/6939908/scala-functions-with-no-arguments –

+1

Pregunta http://stackoverflow.com/questions/7409502/what-is-the-difference-between-def -foo-and-def-foo-in-scala es exactamente lo mismo. – paradigmatic

Respuesta

37

Se puede definir un método Scala de 0-arity con o sin paréntesis (). Esto se usa para indicar al usuario que el método tiene algún tipo de efecto secundario (como imprimir para eliminar o destruir datos), a diferencia del que está fuera, que luego se puede implementar como val.

Ver Programming in Scala:

Tales métodos sin parámetros son bastante comunes en Scala. Por el contrario, los métodos definidos con paréntesis vacíos, como def height(): Int, se llaman métodos empty-paren. La convención recomendada es usar un método sin parámetros siempre que no haya parámetros y el método accede al estado mutable solo leyendo los campos del objeto que lo contiene (en particular, no cambia el estado mutable).

Esta convención es compatible con el principio de acceso uniforme [...]

En resumen, se animó estilo en Scala para definir métodos que tengan ningún parámetro y no tienen efectos secundarios como métodos sin parámetros, es decir, dejando fuera de la paréntesis vacíos. Por otro lado, nunca debe definir un método que tenga efectos secundarios sin paréntesis, porque las invocaciones de ese método se verían como una selección de campo.

+0

¿Puede ampliar la definición de "efectos secundarios"? – Jus12

+2

@ Jus12 esa será toda una pregunta más, que puede descubrir o ver Wikipedia - http://en.wikipedia.org/wiki/Side_effect_(computer_science) –

Cuestiones relacionadas