Czy powinienem użyć Unit czy pominąć Typ powrotu dla mojej metody scala?

Nie jestem pewien, jaka jest różnica między określeniem jednostki jako typu zwrotu mojej metody scala, a pominięciem typu zwrotu w ogóle. Co za różnica?

Czy ktoś może doradzić?

Author: balteo, 2012-02-27

3 answers

Implicit Unit return type:

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

Explicit Unit return type:

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

Typ zwracany z ostatniego wyrażenia metody, nadal Unit ponieważ jest to typ println, ale mylący:

def h() = println("ABC")

Wszystkie powyższe metody są równoważne. Wolałbym f(), ponieważ sam brak = operatora po podpisie metody mi wystarczy. Użyj jawnego : Unit, gdy chcesz dodatkowo udokumentować metodę. Ostatnia forma jest myląca i faktycznie traktowana jako ostrzeżenie w intellij-idea .

Operator = jest kluczowy. Jeśli jest obecny, oznacza to: "proszę zwrócić cokolwiek zwraca ostatnie polecenie "w ciele metody. Oczywiście nie można używać tej składni dla metod abstract. Jeśli tak nie jest, zakłada się 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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-27 13:23:13

Specjalna składnia procedur (metody zwracające jednostkę ) była błędem. Nie używaj go. Jest to mylące i niebezpieczne dla początkujących z tłem Java / C (++). I jest to niepotrzebne specjalne traktowanie. Zawsze używaj znaku równości, z i bez wnioskowania typu (ten ostatni powinien być używany tylko dla członków prywatnych):

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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-27 08:55:03

Społeczność Scali jest podzielona. Z jednej strony, nieużywanie jawnych typów zwrotów oznacza, że można łatwo zapomnieć znak =, co skutkuje błędami, które często są irytujące do śledzenia. Z drugiej strony, Unit - zwracanie metod o innej składni umieszcza je w osobnej kategorii, co podoba się niektórym osobom.

Osobiście wolałbym, żeby ta składnia zniknęła. błędy wynikające z braku = irytujące do śledzenia. Ale nie jest nawet przestarzały, więc Wolę to wykorzystać, niż po prostu cierpieć problemy jego istnienia. Więc używaj, co chcesz. Będą ludzie krytykujący twój wybór tak czy siak, a ludzie chwalący go tak czy siak.
 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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-27 13:30:19