Wątek przeniesiony 2016-11-02 15:50 z C# i .NET przez DibbyDum.

instrukcja if-else a wartosc zwracana

0

Witam Forumowiczow!

Zapewne ktos z Was zmagal sie z problemem, na ktory natknalem sie dzisiaj produkujac kod sprawdzajacy warunek dotyczacy liczb calkowitych (int). Mianowicie instrukcja:

if (value < 0)
{
    return 1;
}
else if (value == 0)
{
    return 2;
}
else if (value > 0)
{
    return 3;
}

nie kompiluje sie, a komunikat mowi, ze nie wszystkie sciezki wykonania aplikacji zwracaja wartosc. Zakladajac, ze value to parametr (int), a prezentowany kod stanowi CALE CIALO FUNKCJI, co pominalem? :)

1

zamiast

else if (value > 0)

wystarczy

else

Bo to co masz to

if (warunek1)
else if (warunek2)
else if (warunek3)

czyli brakuje jeszcze jednego else na samym końcu, żeby pokryć wszystkie ścieżki. A że warunek1, warunek2 i warunek3 razem pokrywają wszystko to kompilator już nie musi wiedzieć.

1

Nic nie pominąłeś. Po prostu kompilator "nie wie", że te trzy warunki to jedyne dostępne opcje i inna sytuacja jest niemożliwa.

Zobacz na taki kod:

if(a == "Kot"){
return 1;
} else if (b == "Pies") {
return 2;
}
// Co jeśli "Wydra"?

Możliwe, że inne wartości niż Kot i Pies w kodzie nigdy się nie pojawią, ale kompilator się upomni o jednak dodanie wykonania dla pozostałych przypadków. Żeby twoje działało kompilator musiałby obliczyć wartość tej funkcji dla wszystkich możliwych intów i sprawdzić czy zawsze z niej wychodzi, a to trochę by trwało.

0

Dziękuję za wyczerpujące odpowiedzi.

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