Wątek zablokowany 2016-09-01 16:35 przez somekind.

Wątek przeniesiony 2016-08-31 17:31 z Java przez ŁF.

Po co sa metody inne niz void

0

Hej , jestem poczatkujacy , tak jak w temacie
po co w uzywac innej metody niz void? po co ten return ? np,

public static void dodawanie(int a, int b)
{
int res = a+b; System.out.println(res);
}

a w metodzie main np dodawanie (1,3) ;
po co zamieniac np voida na int i return a+b , wyjdzie to saamo co w void , oco chodzi z tym zwracaniem
bardzo prosze o pomoc

5

Ty tak poważnie? A wiesz że czasem chcesz zrobić z wartością cos wiecej niż tylko ja wypisać? Fajnie byloby móc ja sobie gdzieś zapisać. Co prawda niby mógłbyś to zasymulować poprzez przekazanie do metody obiektu na zwracaną wartość, ale to juz lekka przesada i w zasadzie taka ułomna proteza na standardowy mechanizm zwracania wartości.
Ćwiczenie dla ciebie:

  • napisz funkcje która pobiera jedną liczbę int
  • napisz kolejną funkcje która dodaje kilka liczb pobranych tą pierwszą funkcją.
1

@Ro3ert: jak Ci nie pasuje Java która wymaga return, to zainteresuj się Clojure lub Groovy.

3

@Ro3ert w funkcji zwracającej void również możesz użyć return.

1

Może to pomoże w zrozumieniu po co się przydaje return. ;P
http://martinfowler.com/bliki/CommandQuerySeparation.html

2

Załóżmy, że chcesz napisać prosty program, który wczyta liczbę i wypisze sinus tej liczby. Funkcja do wyliczenia sinusa już istnieje, więc kod jest prosty

Scanner scanner = new Scanner(System.in);
double number = scanner.nextDouble();

double sin = Math.sin(number);
System.out.println("sin of " + number + " is " + sin);

Teraz pomyśl o funkcji Math.sin(), przecież ona musi zwrócić wynik, żebyś mógł jej używać w ten sposób. Koncepcyjnie wygląda mniej więcej tak:

static double sin(double inputNumber) {
    double result;
    ...
    return result;
}

Gdyby nic nie zwróciła to byłaby zupełnie bezużyteczna, bo niby jak masz jej używać? Nie możesz modyfikować jej kodu żeby dodać swoje System.out.println(), już nie mówiąc o tym że wyniku możesz potrzebować do wielu innych rzeczy a nie tylko wypisywania.

2

Ten temat to jest perełka.

1

niektórzy użytkownicy dają sobie upust, choć nie wiem czemu...
Najprostsza odpowiedź to taka: bo tak jest i już. Tak został zbudowany język, żeby można było wykorzystywać zarówno void jak i return.
void wpisujesz w metodzie, kiedy nie chcesz, żeby zwracała wartość, tj. Shalom w komentarzu wyżej.
return podajesz w metodzie, jak Twoja metoda coś zwraca. Przykładowo:

public double dodawanie(double a, double b) {
        return a + b;
    } 

ta metoda zwróci sumę dwóch liczb zmiennoprzecinkowych; liczba zwrócona też jest zmiennoprzecinkowa.

public double dodawanie(int a, int b) {
        return a + b;
    } 

Powyższa metoda też zwróci sumę, ale liczby jakie podajemy w parametrze metody to są liczby całkowite, a zwrócona zostanie liczba zmiennoprzecinkowa

public double dodawanie(String a, double b) {
        return a + b;
    } 

Powyższa metoda wywali błąd, bo chcę aby metoda zwróciła double, ale w parametrach przekazuję String i double. Czyli nasz return będzie chciał zwrócić String. Dlaczego String? Ano dlatego, że Javie jak dodajemy jakąkolwiek liczbę do String za pomocą znaku "+", to liczba jest traktowana jak String.

Poza tym pisząc swoje metody niekoniecznie chcę zwracać tylko typy proste. Chcę np. inny obiekt klasy. Przykładowo ten sam kod:

public String dodawanie(String a, String b) {
        return a + " " +  b;
    } 

Podaje 2 Stringi i z powrotem mam 2 wyrazy, które podałem, ale oddzielone spacją. Zwrócony zostanie obiekt String.

To tyle...

1

Moim zdaniem pytanie ma duży potencjał, z którego autor może nie zdaje sobie nawet sprawy, właśnie za sprawą programowania funkcyjnego.

2
abc(2,4) + abc(3,1)

Żeby móc dodawać, trzeba mieć co. A void oznacza, że abc(2,4) niczego nie zwraca, więc to wyrażenie nie daje żadnej liczby, nic. Nie ma czegoś takiego jak zmienna void.
Żeby to wyrażenie oznaczało jakąś liczbę, to funkcja musi właśnie coś zwrócić.

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