Funkcje lambda — część 2
Część sekcji Logika i przepływ programu ścieżki GDScript w Coddy. Lekcja 55 z 78.
Jednowierszowa lambda może wybrać swój wynik za pomocą operatora trójargumentowego, value_if_true if condition else value_if_false:
var check_age = func(age): return "Adult" if age >= 18 else "Minor"
print(check_age.call(20)) # DorosłyW przypadku więcej niż dwóch przypadków dodaj kolejny operator trójargumentowy po else albo zapisz lambdę jako blok z użyciem if i elif:
var grade = func(score):
if score == 100:
return "Perfect"
elif score >= 60:
return "Pass"
return "Fail"
print(grade.call(75)) # PassPonieważ lambda jest wartością, możesz przekazać ją do funkcji. Zadeklaruj parametr typu Callable i uruchom ją za pomocą call():
func apply_twice(fn: Callable, value):
return fn.call(fn.call(value))print(apply_twice(func(n): return n + 3, 1)) # 7Funkcję nazwaną można przekazać w ten sam sposób: wpisz jej nazwę bez nawiasów, tak jak w apply_twice(double, 5).
Wbudowane metody również przyjmują funkcje. sort_custom() sortuje tablicę za pomocą lambdy, która otrzymuje dwa elementy i zwraca true, gdy pierwszy element powinien znaleźć się przed drugim:
var scores = [40, 90, 75]
scores.sort_custom(func(a, b): return a > b)
print(scores) # [90, 75, 40]Lambda może odczytywać otaczające ją zmienne lokalne, ale kopiuje ich wartości w chwili utworzenia. Późniejsza zmiana takiej zmiennej nie wpływa na lambdę, a przypisanie do niej wewnątrz lambdy nie zmienia zmiennej na zewnątrz.
Wyzwanie
ŁatwyProgram wczytuje liczbę całkowitą. Utwórz lambdę i przypisz ją do zmiennej o nazwie categorize_number. Przyjmuje jedną liczbę i zwraca:
Positive, jeśli liczba jest większa niż0Zero, jeśli liczba wynosi0Negative, jeśli liczba jest mniejsza niż0
Wywołaj ją z wczytaną liczbą i wypisz wynik. Dla wejścia 10 wynikiem jest:
PositiveSpróbuj swoich sił
extends Node
func _ready():
var number := int(OS.read_string_from_stdin())
# Utwórz tutaj funkcję lambda categorize_number
# Wywołaj ją z argumentem number i wypisz wynik
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Łańcuchy znaków — zagadnienia zaawansowane
Metody łańcuchów znakówWyszukiwanie w łańcuchach znakówZastępowanie i przycinanieDzielenie i łączeniePodsumowanie — sprawdzanie nazwy użytkownika4Słowniki, część 2
Zagnieżdżone słownikiTablice słownikówŁączenie słownikówKopiowanie słownikówPodsumowanie – licznik częstotliwości7Typy wyliczeniowe
Czym jest typ wyliczeniowy?Definiowanie typu wyliczeniowegoWartości typu wyliczeniowegoTypy wyliczeniowe w matchPowtórka – sygnalizacja świetlna10Zaawansowane funkcje
Zwracanie wielu wartościFunkcje lambda — część 1Funkcje lambda — część 2Powtórka — sortowanie za pomocą lambdaFunkcje rekurencyjne — część 1Funkcje rekurencyjne — część 2Powtórka — sumowanie zagnieżdżonej tablicy13System zarządzania zapasami
Omówienie projektuDodawanie produktu2Zaawansowane podejmowanie decyzji
Dopasowanie ze zmiennymiStrażnicy dopasowaniaWzorce tablicWzorce słownikówSprawdzanie przynależnościPowtórka — parser poleceń5Aplikacja książki kontaktów
Wyświetlanie menuDodawanie kontaktu8Menedżer danych studentów
Przegląd projektuDodaj studenta3Tablice wielowymiarowe
Podstawy tablic 2DDostęp do elementów tablic 2DPętle zagnieżdżone z tablicami 2DPodsumowanie — tablice 2DTablice postrzępioneTypowe wzorce tablic 2DPodsumowanie — plansza do gry6Zbiory ze słownikami
Czym jest zbiór?Słownik jako zbiórDodawanie i usuwanieSuma i część wspólnaRóżnica zbiorówPowtórka – usuwanie duplikatów9Zaawansowana agregacja danych
Sumowanie wartościZnajdowanie minimum i maksimumSortowanie niestandardowePodsumowanie – Sortownik słownikówPoćwicz samodzielnie: Kompilator GDScript online