Główna zawartość
Kurs: Podstawy informatyki - program rozszerzony > Rozdział 3
Lekcja 6: ProceduryProcedury 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));
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.
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;
};
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