Funkcje Scala wyższego rzędu

Funkcje Scala wyższego rzędu
Gdy funkcja akceptuje inną funkcję jako parametr lub zwraca inną funkcję jako wyjście, jest określana jako funkcja wyższego rzędu. Odnosi się to do funkcji, które oddziałują z innymi funkcjami. Należy zauważyć, że tę funkcję wyższego rzędu może być używana z funkcjami i metodami, które zwracają funkcje jako wyniki lub podejmują funkcje jako parametry. Jest to wykonalne, ponieważ kompilator Scala zezwala na konwersję metod na funkcje. Idea funkcji wyższego rzędu w Scala w Ubuntu 20.04 jest wyjaśnione w tym artykule.

Znaczenie funkcji wyższego rzędu

Jeśli chodzi o funkcje wyższego rzędu, niektóre kluczowe punkty obejmują:

    • Funkcje wyższego rzędu są możliwe, ponieważ język programowania Scala traktuje funkcje jako wartości pierwszej klasy. Oznacza to, że podobnie jak inne wartości, funkcje mogą być dostarczane jako parametry lub wyniki, co jest przydatne w zapewnieniu elastycznego sposobu pisania programów.
    • Podczas konstruowania składu funkcji, w której funkcje mogą być tworzone z innych funkcji, jest to korzystne. Metoda składu znana jako „skład funkcji” obejmuje użycie dwóch wcześniej skomponowanych funkcji do utworzenia pojedynczej funkcji.
    • Funkcje Lambda i funkcje anonimowe mogą być również tworzone z pomocą. Funkcje bez nazwy, ale mimo to funkcje jako funkcje są znane jako funkcje anonimowe.
    • Jest stosowany do programów, a także ograniczenia liczby bezsensownych linii kodu.

Przykład 1: Korzystanie z funkcji do przejęcia innej funkcji jako argumentu

Rozważmy pierwszy przykład funkcji wyższego rzędu. Podajemy funkcję w danej funkcji jako parametr.


Tutaj obiekt jest oznaczony jako „MyObject”. Następnie, w głównej definicji obiektu, nazwaliśmy funkcję „FUNC”. Funkcja „FUNC” przyjmuje wartość liczbową i funkcję „mnożąTher” jako wejście. Ponownie powołaliśmy się do funkcji „FUNC”, aby wydrukować wartość „x”, która jest przekazywana jako wejście wewnątrz „F”. Na koniec ustawiamy operację „x*3” w funkcji „mnożą”.

Gdy przekazaliśmy funkcję „mnożąTeTher” w drugiej funkcji „FUNC”, funkcja „FUNC” wyświetla wynik funkcji „mnożąTeTher” w następujący sposób:

Przykład 2: Korzystanie z funkcji anonimowej jako lambda

Anonimowa funkcja nie ma nazwy, ale wykonuje tę samą funkcję. Kiedy nie zamierzasz powtarzać funkcji później, tworzenie anonimowej wersji jest dobrym pomysłem. W Scala operatorzy dzikich kart „=>” i podkreślenie „_” mogą być używane do generowania funkcji anonimowych.
Oto ilustrujący:


W głównej metodzie obiektu „myDemo” utworzyliśmy dwie zmienne. Zmienne są deklarowane jako „RES1” i „RES2”. Zmienna „RES1” jest inicjowana z funkcją anonimową za pomocą operatora „=>”. Funkcja anonimowa jest ustawiona z parametrami x i y oraz po prawej stronie operatora rakiety „=>” ustawiamy równanie „x+y”. Następnie mamy kolejną anonimową funkcję, która jest zatrudniona z wieloznaczną kartą „_”. W ramach metody println nazwaliśmy odpowiednio „res1” i „res2” i przypisaliśmy im dwie wartości.

Wyniki obu funkcji anonimowych są generowane w następujący sposób:

Przykład 3: Korzystanie z wyrażenia multiline

Termin „wyrażenie multiline” odnosi się do wyrażeń obejmujących wiele linii. Podczas korzystania z wyrażeń wielopoziomowych w Scali, zachowaj ostrożność. Aby uniknąć problemów związanych z wyrażeniem wielopoziomowym, możesz użyć następujących metod:


Obiekt „MyTest” ma definicję trzech funkcji. Pierwsza funkcja jest definiowana jako „sum1”, która przyjmuje parametry „i” i „j”. Wartości wejściowe „I” i „J” są ustawione jako „i+j” wewnątrz bloku funkcji „sum1”. Następnie mamy inną funkcję jako „sum2”, która również przyjmuje wartości wejściowe, a także ustawia operację „i+j”. Następnie zdefiniowaliśmy główną metodę, w której zadeklarowane są dwie zmienne „wynik1” i „wynik2”. Zmienne te są nazywane funkcjami „sum1” i „sum2” dla przekazywania wartości w stosunku do „i” i „j”.

Wyjście uzyskane przez obie funkcje „sum1” i „sum2” mają te same wyniki.

Przykład 4: Korzystanie z funkcji noszenia

Metoda w Scali może mieć liczne listy parametrów. Funkcja, która akceptuje listy brakujących argumentów jako argumenty, gdy funkcja jest wywoływana z mniejszą liczbą list parametrów, niż wymaga. Innymi słowy, jest to metoda zmiany funkcji, która akceptuje kilka parametrów na jedną, która akceptuje tylko jedną.


Tutaj stworzyliśmy funkcję „dodaj”, która pobiera dwa argumenty osobno. „P” jest pierwszym argumentem, a „Q” jest drugim argumentem. Następnie zadeklarowaliśmy zmienną „wynik1” w głównej metodzie. Zmienna „wynik1” nazywana jest funkcją „Dodaj” i ustawia wartości dla „P” i „Q”. Ponadto przekazaliśmy pojedynczy argument dla funkcji „dodaj”, która jest wywoływana w zmiennej „Dodaj wartości”. Dodatki przyjmują również wartości argumentów liczby.

Wyniki poprzedniego kodu po kompilacji są następujące:

Przykład 5: Korzystanie z funkcji zagnieżdżonej

Będąc językiem funkcji pierwszej klasy, Scala umożliwia przekazanie funkcji, zwracanie funkcji, komponowanie funkcji, korzystanie z zagnieżdżonych funkcji i innych. Definicja i wywołanie funkcji zagnieżdżonych pokazano w poniższym przykładzie:


W ramach funkcji „sub1” zdefiniowaliśmy inną funkcję „sub2”, która ocenia różnicę między „A-B”. Poza funkcją Sub2 nazwaliśmy „sub2”, która przyjmuje wartość argumentu „x” i „sub2 (y, z)”. Następnie zadeklarowaliśmy zmienną „wynik”, który jest nazywany funkcją sub1 i przekazaliśmy wartość liczbową do oceny dla różnych operacji.

Poniżej znajduje się inny wynik operacji generowany przez poprzedni kod:

Przykład 6: Za pomocą funkcji o parametrach o zmiennej długości

Możesz zdefiniować funkcje o parametrach o zmiennej długości w Scala. Każdą ilość argumentów można przekazać podczas wywoływania funkcji.


Do funkcji „dodaj” ustawiamy zmienną „mysum”, która początkowo jest zerowa. Następnie mamy do pętli, która iteruje liczby i przyrosty przez mysum. Wewnątrz głównej nazwaliśmy funkcję dodawania i przekazaliśmy do niej wartości numeryczne.

Długość zmiennej „MySum” jest wydrukowana na ekranie.

Wniosek

Z wyżej wymienionego artykułu odkryliśmy, że użycie funkcji wyższego rzędu w Scala może sprawić, że baza kodu jest prosta i łatwa do zrozumienia dla operacji. Funkcje wyższego rzędu to te, które akceptują lub zwracają dane wejściowe z innych funkcji. Zbadaliśmy również przykłady pokazujące różne zastosowania dla tych funkcji wyższego rzędu. Dodatkowo nauczyliśmy się przekazać funkcje anonimowe jako funkcje wysokiego rzędu.