If you're seeing this message, it means we're having trouble loading external resources on our website.

Jeżeli jesteś za filtrem sieci web, prosimy, upewnij się, że domeny *.kastatic.org i *.kasandbox.org są odblokowane.

Główna zawartość

Procedury z wartościami zwracanymi

Procedury mogą obliczać wartości dla pozostałej części programu do wykorzystania poprzez wysyłanie wartości zwrotnych.

Potrzeba wartości zwrotnych

Do tej pory wszystkie nasze przykładowe procedury miały "skutki uboczne". Oznacza to, że miały one pewien wpływ na swoje środowisko, jak na przykład sposób, w jaki println() wyświetla wynik na ekranie.
var score  = (numCorrect/30) * 100;
println(score);
Często zdarza się, że nie chcemy od razu wyświetlać wartości na ekranie. Zamiast tego, chcemy zapamiętać wynik obliczeń i jakoś go wykorzystać w przyszłości. W takim przypadku mówimy procedurze, aby zwróciła wartość do kodu, który ją wywołał.
W języku JavaScript możemy zwracać wartości z funkcji, wpisując return, po którym następuje wyrażenie zwracające.
var calcScore = function(numCorrect) {
   var score  = (numCorrect/30) * 100;
   return score;
};
Teraz gdy funkcja zwraca wartość, możemy przechowywać jej wyniku w zmiennej, takiej jak ta:
var sallyScore = calcScore(27);
var wilburScore = calcScore(24);
Możemy również bezpośrednio wywołać tę funkcję wewnątrz innych funkcji:
println(calcScore(27));
println(calcScore(24));
Albo możemy wywołać funkcję wewnątrz większego wyrażenia:
println("Sally earned: " + calcScore(27));
println("Wilbur earned: " + calcScore(24));
📝 Zobacz podobny kod w: App Lab | Snap | Python
Nasze wywołanie calcScore() zawsze zwraca wartość, więc możemy użyć jej w dowolnym miejscu, które oczekuje wartości. To sporo miejsc!
W rzeczywistości używaliśmy już wielu wbudowanych procedur, które zwracają wartości, np. dla operacji matematycznych i łańcuchowych:
var maxNum = Math.max(33, 100);
var firstName = "Harry Potter".substr(0, 5);
var yell = "im hungry".toUpperCase();`
Teraz wiemy, jak zdefiniować własne procedury z wartościami zwrotnymi i możemy zbudować bibliotekę użytecznych procedur, które obliczają wartości dla potrzeb naszego programu.
✏️ Poniższy program oblicza, ile "mnie" musiałoby być ułożonych na kupie, aby osiągnąć pewną wysokość, jak na przykład księżyc czy posąg wolności. Zmień parametry, aby obliczyć liczbę "ciebie" i dodaj inny obiekt, np. Mount Everest lub Słońce.
📝 Zobacz podobny kod w: App Lab | Snap | Python

Uważaj na za wczesne zwracanie

Następujący fragment kodu ma błąd:
var calcLineSlope = function(x1, y1, x2, y2) {
    var yDiff = y2 - y1;
    var xDiff = x2 - x1;
    return slope;
    var slope = yDiff / xDiff;
};
Widzisz, gdzie jest błąd? Oto wskazówka: za każdym razem, gdy komputer wykonuje instrukcje return, natychmiast wychodzi z funkcji. Po wyjściu z funkcji, nie wykona więcej kodu wewnątrz funkcji.
To znaczy, że komputer wykonuje tylko ten kod:
var calcLineSlope = function(x1, y1, x2, y2) {
    var yDiff = y2 - y1;
    var xDiff = x2 - x1;
    return slope;
};
Nigdy nie dociera do linii obliczającej nachylenie, więc zwraca niezdefiniowaną wartość każdemu, kto ją wywoła. Linia kodu po niej jest "martwym kodem", kodem, który nigdy nie zostanie wykonany.
W poprawnej wersji kodu instrukcja return jest ostatnim wierszem w funkcji:
var calcLineSlope = function(x1, y1, x2, y2) {
    var yDiff = y2 - y1;
    var xDiff = x2 - x1;    
    var slope = yDiff / xDiff;
    return slope;
};
📝 Zobacz podobny kod w: App Lab | Snap | Python

Wartości zwracane w pseudokodzie

Ten pseudokod reprezentuje procedurę, która pobiera dwa parametry nazwane parameter1 i parameter2, zawiera instrukcje programowania, a także zwraca wartość expression.
PROCEDURE name (parameter1, parameter2)
{
     <instructions>
    RETURN (expression)
}
Oto pseudokod dla procedury calcLineSlope i wywołania:
PROCEDURE calcLineSlope (x1, y1, x2, y2) 
{
    yDiff ← y2 - y1
    xDiff ← x2 - x1    
    slope ← yDiff / xDiff
    RETURN slope
}

slope1 ← calcLineSlope(1, 2, 4, 5)
slope2 ← calcLineSlope(0, -1, 3, 10)

Chcesz dołączyć do dyskusji?

Na razie brak głosów w dyskusji
Rozumiesz angielski? Kliknij tutaj, aby zobaczyć więcej dyskusji na angielskiej wersji strony Khan Academy.