JavaRush /Blog Java /Random-PL /Przerwa kawowa #150. Przeanalizujmy przykłady wyrażeń lam...

Przerwa kawowa #150. Przeanalizujmy przykłady wyrażeń lambda w Javie. 7 najbardziej niedocenianych funkcji IntelliJ IDEA

Opublikowano w grupie Random-PL

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. Przerwa kawowa #150.  Przeanalizujmy przykłady wyrażeń lambda w Javie.  7 najbardziej niedocenianych funkcji IntelliJ IDEA — 1

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:
  1. Parametry wejściowe
  2. strzałka operatora
  3. 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ę. Przerwa kawowa #150.  Przeanalizujmy przykłady wyrażeń lambda w Javie.  7 najbardziej niedocenianych funkcji IntelliJ IDEA — 2

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. Przerwa kawowa #150.  Przeanalizujmy przykłady wyrażeń lambda w Javie.  7 najbardziej niedocenianych funkcji IntelliJ IDEA — 3Teraz 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. Przerwa kawowa #150.  Przeanalizujmy przykłady wyrażeń lambda w Javie.  7 najbardziej niedocenianych funkcji IntelliJ IDEA — 4

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. Przerwa kawowa #150.  Przeanalizujmy przykłady wyrażeń lambda w Javie.  7 najbardziej niedocenianych funkcji IntelliJ IDEA — 5

4. Edycja wielowierszowa

Być może korzystałeś już z tej funkcji w Sublime Text Editor. Przerwa kawowa #150.  Przeanalizujmy przykłady wyrażeń lambda w Javie.  7 najbardziej niedocenianych funkcji IntelliJ IDEA — 6

5. Wróć/Dalej

Właściwie często wracam do miejsca, w którym byłem wcześniej, naciskając przyciski Wstecz lub Dalej. Przerwa kawowa #150.  Przeanalizujmy przykłady wyrażeń lambda w Javie.  7 najbardziej niedocenianych funkcji IntelliJ IDEA - 7Przejdź 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ć. Przerwa kawowa #150.  Przeanalizujmy przykłady wyrażeń lambda w Javie.  7 najbardziej niedocenianych funkcji IntelliJ IDEA - 8Aby 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. Przerwa kawowa #150.  Przeanalizujmy przykłady wyrażeń lambda w Javie.  7 najbardziej niedocenianych funkcji IntelliJ IDEA - 9Nowy 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.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION