¿Debo usar Unit o omitir el tipo de retorno para mi método scala?


No estoy seguro de cuál es la diferencia entre especificar Unit como el tipo de retorno de mi método scala o dejar fuera el tipo de retorno por completo. ¿Cuál es la diferencia?

¿Alguien puede aconsejar?

Author: balteo, 2012-02-27

3 answers

Implícito Unit tipo de retorno:

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

Explícito Unit tipo de retorno:

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

Devuelve el tipo inferido de la última expresión del método, todavía Unit porque este es el tipo de println, pero confuso:

def h() = println("ABC")

Todos los métodos anteriores son equivalentes. Preferiría f() porque la falta de = operador después de la firma del método por sí sola es suficiente para mí. Utilice explicit : Unit cuando desee documentar el método de forma adicional. La última forma es confusa y en realidad se trata como un advertencia en intellij idea-.

El operador = es crucial. Si está presente significa: " por favor devuelve lo que devuelve la última instrucción" en el cuerpo del método. Obviamente no puede usar esta sintaxis para los métodos abstract. Si no lo es, se asume Unit.

 51
Author: Tomasz Nurkiewicz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-27 13:23:13

La sintaxis especial para procedimientos (métodos que devuelven Unidad) fue un error. No lo uses. Es confuso y peligroso para los principiantes con un fondo Java / C (++). Y es un tratamiento especial innecesario. Utilice siempre el signo igual, con y sin inferencia de tipo (este último solo debe usarse para miembros privados):

def foo(): Unit = someCodeReturningUnit()

private def bar() = someCodeReturningUnit()
 14
Author: Heiko Seeberger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-27 08:55:03

La comunidad Scala está dividida al respecto. Por un lado, no usar tipos de retorno explícitos significa que puede olvidar fácilmente el signo =, lo que resulta en errores que a menudo son molestos de rastrear. Por otro lado, los métodos Unit-returning que tienen una sintaxis diferente los colocan en una categoría separada, lo que agrada a algunas personas.

Personalmente, preferiría que esta sintaxis desapareciera the los errores resultantes de la falta de = son molestos de rastrear. Pero ni siquiera está en desuso, así que Prefiero aprovecharme de él que sufrir los problemas de su existencia.

Entonces, usa lo que quieras. Habrá gente criticando tu elección de cualquier manera, y gente elogiándola de cualquier manera.

 6
Author: Daniel C. Sobral,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-27 13:30:19