Return a System.out.println ?

0

Hej jestem zielony w programowaniu. Czy mógłby mi ktoś wytłumaczyć na czym polega różnica między return, a System.out.println ?
Pytam bo robiłem jedno zadanko na codewars. Zadanie brzmiało tak "Create a function that takes an integer as an argument and returns "Even" for even numbers or "Odd" for odd numbers.".

Mój kod wyglądał tak:

public class EvenOrOdd {
    public static String even_or_odd(int number) {
      
      system.out.println number % 2 == 0 ? "Even" : "Odd";
        
    }
}

i nie wypalił. Dopiero zmiana na return zadziałała. Wyjaśni mi ktoś dlaczego nie może tam być System.....?

1
system.out.println number % 2 == 0 ? "Even" : "Odd";

Ta linijka jest niepoprawna składniowo, więc nie dziwne, że program „nie wypalił”.

println to metoda wyświetlająca dane na ekranie – argumenty do wyświetlenia podaje się w nawiasach. return natomiast umożliwia przerwanie działania metody i zwrócenie wartości.


Tak więc aby zwrócić wartość należy użyć return w taki sposób:

public static String even_or_odd(int number) {
  return number % 2 == 0 ? "Even" : "Odd";
}

a jeśli chcesz wyświetlić dane na ekranie to raczej w taki sposób:

public static void even_or_odd(int number) {
  system.out.println(number % 2 == 0 ? "Even" : "Odd");
}

Jednak jeśli metoda ma zwracać wartość, to powinieneś ją zwrócić, a nie wyświetlać jej na ekranie.

1
System.out.println([String])

Wyświetla wyświetla tekst w konsoli.

Zadanie prosi cię o zwrócenie wartości (nie pokazanie), tu jak sam zauważyłeś używa się słówka kluczowego return.

Dzięki zwracaniu Stringa możemy zrobić coś takiego:

int number = 5;
String result = even_or_odd(number); // Zwrócony tekst przez Twoją funkcję trafia do zmiennej result
System.out.println("Number 5 is " + result);
0
gerczak napisał(a):

Return a System.out.println ?

You can't return a System.out.println.

1

To ja pozwolę sobie trochę inaczej niż @furious programming opisał. W Javie każda metoda coś zwraca. Czasami jest to wartość, a czasami void, czyli taka specjalna wartość oznaczająca NIC. Uwaga nie mylić z null, które jest w pewnym sensie wartością. void, czyli próżnia. I teraz patrzymy na System.out.println. Zwraca void, ale wykonuje pewną operację, którą nazywamy efektem ubocznym. Wypisuje coś na konsole. Powtórne wywołanie tej metody doda nam napis w konsoli. A teraz popatrzmy co robi return. Otóż return zwraca pewną wartość albo void, ale co do zasady nie ma efektów ubocznych.

Jeżeli pamiętasz ze szkoły czym są funkcje, to można je podzielić na dwie grupy. Pierwsze to te bez efektów. Omawiane w szkole, bo są proste. Funkcja dodawania zawsze zwróci ten sam wynik dla podanych argumentów niezależnie ile razy ją wywołasz. Czasami nazywa się je czystymi (ang. pure). Drug grupę stanowią funkcje, które dla każdego wywołania powodują pewne nieodwracalne zmiany w otaczającym świecie np. wypisują coś do konsoli, albo zapisują do bazy danych (nie ważne).

Wracamy do Javy. System.out.println należy do tej drugiej grupy zwraca void (nie jest to ważne), ale ma efekt uboczny, którego nie kontrolujesz. Oraz, co ważne nie jesteś wstanie w prosty sposób ogarnąć w swoim kodzie (fun fact można uruchomić javę z przekierowaniem &1 > &0, co daje ciekawe wyniki). Mówiąc prościej jeżeli chcesz poznać wynik działania metody w swoim kodzie, to używasz return. Jeżeli chcesz go wypisać, ale nie zależy ci na nim w programie, to możesz użyć System.out.println.

1 użytkowników online, w tym zalogowanych: 0, gości: 1