Nauka przykładów wyrażeń lambda w Javie
Źródło:
Medium W tym artykule przyjrzymy się wyrażeniom lambda, będącym podstawą programowania funkcjonalnego w Javie.
Składnia wyrażenia lambda
Składnia wyrażeń lambda jest intuicyjna, łatwa do zrozumienia i łatwa w użyciu. Wyrażenie lambda składa się z:
- Parametry wejściowe
- strzałka operatora
- blok wyrażeń/oświadczeń
Ogólny format to:
<input-params> -> <function-code>
Przykłady wyrażeń lambda
Wyrażenia lambda najlepiej zrozumieć na przykładach, więc przyjrzyjmy się niektórym z nich.
1. Nie akceptuje danych wejściowych i nie zwraca danych wyjściowych
Proste wyrażenie lambda nie pobiera żadnych danych wejściowych i nie zwraca żadnych wyników — to dosłownie po prostu blok kodu uruchamiany bez żadnego kontekstu.
() -> System.out.println("Here I am!");
Określenie
() na początku w pozycji parametrów wejściowych oznacza, że nie są przekazywane żadne parametry (jak w przypadku pustych nawiasów, które występują po metodzie, która nie ma parametrów).
2. Akceptuje pojedyncze wejście, nie zwraca żadnego wyjścia
Aby wyrażenie lambda przyjmowało parametr, umieszczamy go na pozycji parametrów wejściowych:
name -> System.out.println("Here you are too, " + name + "!");
NOTATKA : Jeśli mamy jeden parametr wejściowy, możemy pominąć nawiasy. Możemy również określić (nazwa), jest to całkowicie dopuszczalne.
3. Akceptuje wiele wejść, nie zwraca żadnych wyników
Kiedy przekazujemy wiele parametrów wejściowych do wyrażenia lambda, musimy:
- ująć parametry w nawiasy
- użyj przecinka, aby je rozdzielić
(name, food) -> System.out.println("So " + name + " enjoys eating " + food + "... interesting!");
4. Zawiera wiele instrukcji w sekcji kodu
Przechowywanie wyrażeń lambda w instrukcjach jednowierszowych jest uważane za dobrą praktykę. Ale możesz także użyć wielu linii:
() -> {
System.out.println("The owl and the pussycat went to sea");
System.out.println("in a beautiful pea green boat");
}
5. Typy zwrotów nigdy nie są określone
Jak zapewne zauważyłeś, podczas definiowania wyrażenia lambda nie określa się żadnych typów zwracanych wartości. Oto przykład:
() -> System.out.println("I don't return anything!")
I jeszcze jeden:
() -> "I return this String!"
Obydwa przykłady kodu są prawie takie same, ale druga lambda zwraca ciąg znaków. Należy o tym pamiętać podczas korzystania z nich. Oczywiście kompilator zrozumie różnicę między nimi poprzez warunkowe użycie deskryptorów funkcji.
6. Jeśli to możliwe, wnioskowanie o typie jest stosowane automatycznie
Aby określić typ, kompilator użyje wnioskowania o typie. W tym celu sprawdza kontekst wykonania wyrażenia lambda. Dla programisty oznacza to, że nie będzie musiał się martwić o rzutowanie na konkretny typ.
7. Notacja deskryptora funkcji
Kiedy zastanawiamy się do jakiego typu można przypisać wyrażenie lambda, bardzo przydatne jest użycie deskryptorów funkcji. Uchwyt funkcji jest zasadniczo sygnaturą metody udostępnianą przez wyrażenie lambda (lub metodę). Jego składnia jest prawie taka sama jak wyrażeń lambda, z tą różnicą, że zamiast sekcji kodu znajduje się sekcja typu wyjściowego. Oto przykład:
<input-parameter-types> -> <output-parameter-type>
Przykłady deskryptorów funkcji
Oto kilka przykładów deskryptorów funkcji:
() -> () Metoda, która nie przyjmuje parametrów wejściowych i nie zwraca wartości.
(String) -> () Metoda akceptująca parametr wejściowy i nie zwracająca wartości.
() -> (int, float) Metoda, która nie przyjmuje parametrów wejściowych i zwraca
int oraz
float(int[]) -> .
(SortedMap<Character, Integer>) Metoda pobierająca tablicę
int i zwracającą
SortedMap z
Character na
Integer . Posiadanie deskryptorów funkcji ułatwia ocenę zgodności typów przy rozważaniu, jakich typów docelowych możemy użyć w wyrażeniu lambda.
Wniosek
Jak widać, wyrażenia lambda są schludnym i prostym sposobem enkapsulacji zachowania. Jest to jeden z fundamentów paradygmatu programowania funkcjonalnego wprowadzonego w Javie wraz z wydaniem JDK 8.
7 najbardziej niedocenianych funkcji IntelliJ IDEA
Źródło:
Better Programming Trudno w to uwierzyć, ale wiele lat później wciąż spotykam ludzi, którzy nie wiedzą o tych wspaniałych funkcjach IntelliJ IDEA.
1. Znajdź cokolwiek
Dość trudno jest zapamiętać każdą kombinację klawiszy i śledzić wszystko, co potrafi IntelliJ IDEA. Dlatego często korzystam z wyszukiwania w IntelliJ IDEA. Pomaga mi to znaleźć w jednym miejscu elementy menu, narzędzia, ustawienia, a nawet pliki, których potrzebuję.
2. Wiedz, gdzie jesteś
Zanim znalazłem tę funkcję, użyłem przycisku „Wybierz otwarty plik”, aby wyświetlić aktualnie edytowany plik w drzewie projektu.
Teraz IntelliJ IDEA robi to za mnie. Nie jest to opcja domyślna, dlatego należy ją ustawić dla każdego nowego lub istniejącego projektu.
3. Optymalizacja SQL
Czy wiesz, że domyślna wtyczka bazy danych w Twoim IDE to coś więcej niż prosty executor SQL? Biorąc pod uwagę fakt, że warstwa trwałości (I/O) jest zawsze najwolniejszą częścią aplikacji, podczas pracy z relacyjnymi bazami danych zawsze upewniam się, że moje zapytania SQL mają dobry plan wykonania.
4. Edycja wielowierszowa
Być może korzystałeś już z tej funkcji w Sublime Text Editor.
5. Wróć/Dalej
Właściwie często wracam do miejsca, w którym byłem wcześniej, naciskając przyciski Wstecz lub Dalej.
Przejdź do tyłu/do przodu: ⌥⌘+strzałka w lewo/prawo (Ctrl+Alt+strzałka w lewo/prawo dla Win/Linux). Aby otworzyć ostatnie pliki, naciśnij ⌘E (Ctrl+E w przypadku systemu Windows/Linux).
6. Zakładki
Zaznaczam ważne fragmenty kodu, aby w każdej chwili móc do nich szybko zajrzeć.
Aby przejść do zakładki, naciśnij ⌃+<numer> (Ctrl+<numer> w systemie Windows/Linux). Od razu powiem, że nie używam więcej niż trzech zakładek na raz, bo wtedy trudno mi zapamiętać, do czego służą.
7. Jeden edytor do wszystkiego
Kiedyś otwierałem inne edytory tekstu, takie jak Visual Studio Code lub Sublime, aby zapisywać części kodu, JSON, XML, a następnie łączyć się z nimi. Ale to nie jest część bazy kodu (projektu), a IntelliJ IDEA wyraźnie przypomina ci o tym, gdy próbujesz stworzyć lub edytować coś takiego. Potem zobaczyłem, jak jeden z moich kolegów używa Snippets i zdałem sobie sprawę, jakie to genialne.
Nowy plik fragmentu: ⇧⌘N (Shift+Ctrl+N dla Win/Linux). Fragmenty są dostępne i synchronizowane we wszystkich oknach Twoich projektów. Często używam ich do sprawdzania i formatowania plików JSON lub SQL, które otrzymałem gdzie indziej.
Mój sekretny przepis
Wisienką na torcie jest funkcja, która pozwala mi każdego dnia zaoszczędzić mnóstwo czasu na pisaniu:
Tabnine to wtyczka JetBrains służąca do kompilowania kodu Intellij IDEA opartego na sztucznej inteligencji. Na razie jest za darmo, ale spieszcie się, myślę, że to nie potrwa długo.
GO TO FULL VERSION