JavaScript · lekcja 16
Funkcje w JavaScript 1/4:własna funkcja
0–2 min: czytam plan tematu, dziś pierwsza z czterech godzin o funkcjach
2–5 min: rozgrzewka o obiektach z poprzednich lekcji
5–11 min: funkcja jako maszynka, powrót do squareArea z PHP
11–17 min: definicja PHP obok JavaScript, parametr i argument
17–21 min: jedna definicja, trzy wywołania, pokaz w konsoli
21–25 min: cztery zapisy funkcji, rozpoznajemy błędny
25–28 min: dwa pytania z egzaminu
28–45 min: piętnaście minut ćwiczenia, pytania kontrolne, produkcja
Plan tematu (4 godziny):
Godzina 1 (dziś): własna funkcja - definicja, parametry, wywołanie
Godzina 2: funkcja wywołana przez przycisk
Godzina 3: co widzi funkcja - zmienne lokalne
Godzina 4: parseFloat, Math - powtórka funkcji
Rozgrzewka · 3 minuty
Rozgrzewka: obiekty z poprzedniej lekcji
Pytam o trzy rzeczy z obiektów z poprzednich lekcji: obiekt, metoda, this
Odsłaniam odpowiedź kliknięciem po jednym głosie z sali
To ostatnie spojrzenie na obiekty przed przejściem do funkcji
Gra dla chętnych, gdy jest czas: szkola.cupial.eu/games/js-output · telefon albo komputer
Gra „Co wypisze JavaScript?”: trzy minuty, przewidujecie wynik kodu przed uruchomieniem
Co to jest obiekt w JavaScript - czym różni się od tablicy?
Jak nazywa się właściwość, która jest funkcją wewnątrz obiektu?
Do czego służy słowo kluczowe this wewnątrz metody?
Część 1 · Funkcja jako maszynka
Funkcja: maszynka z parametrami i wynikiem
Pokazuję funkcję jako maszynkę: parametry wpadają do środka
Podkreślam: return daje wynik na wyjściu maszynki
Wracam do squareArea z kursu PHP - to ta sama idea
Prowadzę palcem po rysunku: a i b wchodzą, 12 wychodzi
W PHP (kurs PHP, lekcje 08-10) poznaliście już funkcję squareArea. To blok kodu z nazwą, parametrami i instrukcją return, który możecie wywołać dowolną liczbę razy. W JavaScript funkcja działa dokładnie tak samo, to ta sama „maszynka”: parametry wchodzą, ciało liczy, return oddaje wynik.
a = 3
parametr 1
b = 4
parametr 2
ciało funkcji
return a * b;
12
wyjście: return
MDN: Learn_web_development/Core/Scripting/Functions („functions... allow you to store a piece of code that does a single task inside a defined block, and then call that code whenever you need it”); MDN: Learn_web_development/Core/Scripting/Return_values („Return values are just what they sound like - the values that a function returns when it completes”)
Część 2 · Definicja: PHP obok JavaScript
Definicja: niemal to samo, bez znaku $
Stawiam obok siebie squareArea z PHP i squareArea w JavaScript
Podkreślam: jedyna różnica to brak znaku dolara przed nazwami
Tłumaczę: parametr stoi w definicji, argument podajemy przy wywołaniu
Ciekawostkę o wbudowanym obiekcie arguments czytam krótko, na koniec slajdu
PHP · już znacie (lekcja 08 kursu PHP)
function squareArea ($side ) {
$area = $side * $side;
return $area;
}
squareArea(5) → 25
JavaScript · dziś
function squareArea (side ) {
const area = side * side;
return area;
}
squareArea(5) → 25
bez $
Funkcję zaczyna słowo kluczowe function, potem nazwa w camelCase (tu squareArea) i lista parametrów w nawiasach. W wywołaniu squareArea(5) liczba 5 to argument - trafia do parametru side. Jedyna różnica względem PHP: JavaScript nie ma znaku $ przed nazwami zmiennych i parametrów.
Ciekawostka z MDN: gdy wywołacie funkcję z większą liczbą argumentów, niż ma zadeklarowanych parametrów, JavaScript ich nie odrzuca. Każda funkcja ma wbudowany obiekt arguments, w którym siedzą wszystkie podane wartości, nawet te bez własnego parametru.
MDN: Learn_web_development/Core/Scripting/Functions („Parameters are the variables listed in a function definition, while arguments are the values passed to the function... when the function is called”); PHP Manual: functions.user-defined.php
Część 3 · Definicja raz, wywołanie wiele razy
Definicja raz , wywołanie wiele razy
Pokazuję jedną definicję multiply(a, b) wywołaną trzy razy
Idę po rysunku: jedna maszynka, trzy pary liczb, trzy wyniki
Uruchamiam kod w konsoli, żeby zobaczyli 12, 30 i 14
Podkreślam: definiujemy raz, wywołujemy tyle razy, ile chcemy
function multiply
1 definicja, napisana raz
multiply(3, 4) → 12
multiply(5, 6) → 30
multiply(7, 2) → 14
function multiply(a, b) {
return a * b;
}
console.log(multiply(3 , 4 )); // 12
console.log(multiply(5 , 6 )); // 30
console.log(multiply(7 , 2 )); // 14
MDN: Learn_web_development/Core/Scripting/Functions („Every time we want to do that, we can invoke the function like this, rather than having to write all that code out again every time we want to repeat it”)
Część 4 · Rozpoznaj poprawny zapis
Poprawny zapis: rozpoznajcie go wśród podobnych
Pokazuję trzy poprawne zapisy funkcji i jeden błędny
Pytam z sali, który zapis jest zły, zanim odpowiem
Wyjaśniam: new tworzy obiekt z klasy, nie definiuje funkcji
Zapowiadam: dokładnie o to pyta egzamin na następnym slajdzie
Zapis funkcji Poprawny w JavaScript?
function greet(name) { return "Hi " + name; }TAK - forma z tej lekcji
const greet = function (name) { return "Hi " + name; };TAK - funkcja przypisana do zmiennej
function greet (name) { return "Hi " + name; }TAK - spacja przed nawiasem nic nie zmienia
new greet(name) { return "Hi " + name; }NIE - new tworzy obiekt z klasy, nie definiuje funkcji
Egzamin CKE lubi pytać właśnie o to: który z kilku podobnych zapisów naprawdę definiuje funkcję w JavaScript. Zobaczcie sami na kolejnym slajdzie.
MDN: Learn_web_development/Core/Scripting/Functions („This form of creating a function is also known as function expression”)
Egzamin EE.09 / E.14
Tak pytają na egzaminie
Pokazuję dwa pytania CKE: o funkcję fun1 i o poprawną definicję
Daję chwilę na własną odpowiedź, zanim odsłonię
Przy pierwszym liczę parametry na głos: a, b, c
Przy drugim przypominam: słowo function jest wymagane
1.
var x = fun1(3 , 24 , "Mnożymy" );
function fun1(a, b, c) {
return a * b;
}
Które stwierdzenie na temat funkcji fun1 zapisanej w języku JavaScript jest prawdziwe?
Ma trzy parametry wejściowe w tym jeden typu napisowego i zwraca wartość numeryczną.
Ma dwa parametry liczbowe i zwraca wartość typu napisowego.
Zwraca dwie wartości przechowywane w zmiennych a i b.
Przyjmuje trzy parametry, lecz nie zwraca wartości.
2.
Wybierz poprawną definicję funkcji w języku JavaScript.
nazwa_funkcji(argumenty) {instrukcje;}
new nazwa_funkcji(argumenty) {instrukcje;}
function nazwa_funkcji(argumenty) {instrukcje;}
typ_funkcji nazwa_funkcji(argumenty) {instrukcje;}
CKE, EE.09, styczeń 2023, zadanie 9 · CKE, E.14, czerwiec 2019, zadanie 33
Ćwiczenie przy komputerze · 15 minut
Ćwiczenie: funkcja multiply
Włączam piętnaście minut na ćwiczenie i chodzę po sali
Zadanie: function multiply(a, b) { return a * b; }
Potem trzy wywołania z różnymi liczbami, każde w osobnym console.log
Odsłaniam odpowiedzi po kolei, klikając kroki
Bez komputerów: kod na kartkę, zapisujecie spodziewany wynik konsoli
Otwórz script.js z poprzednich lekcji (w folderze swojego projektu).
Napisz function multiply(a, b) { return a * b; }
Wywołaj ją dla trzech par liczb, np. multiply(3, 4), multiply(5, 6), multiply(7, 2) - każdy wynik wypisz osobną linią console.log(...).
Dla chętnych w domu: napisz funkcję half(a), która zwraca połowę liczby, i wywołaj ją dla 10.
Na koniec
Sprawdź się
Zadaję trzy pytania kontrolne ustnie, każde do innej osoby
Pierwsze o różnicę między parametrem a argumentem
Drugie o funkcję bez return, odpowiedź to undefined
Trzecie o liczbę wywołań jednej definicji
Zapowiadam funkcję wywołaną przez przycisk na następną lekcję
Czym różnią się parametry od argumentów?
Co zwróci funkcja, która w ciele nie ma słowa return?
Ile razy możecie wywołać tę samą funkcję po jej zdefiniowaniu?
To tyle na dziś - na następnej lekcji: funkcja wywołana przez przycisk.
Poza szkołą
A jak to wygląda w produkcji?
Pokazuję tabelę produkcyjną i biorę z niej jeden wiersz
Funkcja strzałkowa: krótszy zapis dokładnie tej samej definicji
Moduły import i export zamiast jednego pliku script.js
Testy automatyczne zamiast console.log po każdym wywołaniu
Zapowiadam funkcję wywołaną przez przycisk na następną lekcję
Na lekcji W produkcji Status
function multiply(a, b) { return a * b; }Ta sama definicja, często krótszym zapisem: const multiply = (a, b) => a * b; - funkcję strzałkową poznacie na kolejnych lekcjach. rozszerzane
console.log(result) po każdym wywołaniuWynik trafia do zmiennej i dalej na stronę albo do automatycznego testu funkcji, nie tylko na konsolę. zastępowane
Jedna funkcja w pliku script.js Setki funkcji w osobnych plikach (moduły), wczytywane przez import/export. zastępowane
Nazwa squareArea, multiply po angielsku, camelCase Ten sam standard w każdej firmie korzystającej z JavaScript. nadal w użyciu
MDN: Learn_web_development/Core/Scripting/Functions (wzmianka o skróconym, jednolinijkowym zapisie funkcji z pominięciem słowa return)