JavaRush /Java блог /Random UA /Кава-брейк #150. Вивчаємо приклади лямбда-виразів (Lambda...

Кава-брейк #150. Вивчаємо приклади лямбда-виразів (Lambda Expressions) у Java. 7 найбільш недооцінених функцій IntelliJ IDEA

Стаття з групи Random UA

Вивчаємо приклади лямбда-виразів (Lambda Expressions) у Java

Джерело: Medium У цій статті ми розглянемо лямбда-вирази - основу функціонального програмування Java. Кава-брейк #150.  Вивчаємо приклади лямбда-виразів (Lambda Expressions) у Java.  7 найбільш недооцінених функцій IntelliJ IDEA - 1

Синтаксис лямбда-виразів

Синтаксис лямбда-виражень інтуїтивно зрозумілий, простий для розуміння та застосування. Лямбда-вираз складається з:
  1. вхідних параметрів
  2. оператора arrow
  3. блоку виразів/операторів (expression/statements)
Загальний формат такий:
<input-params> -> <function-code>

Приклади лямбда-виразів

Лямбда-вирази найкраще зрозуміти на прикладах, тому розглянемо деякі з них.

1. Не приймає вхідних даних та не повертає вихідних даних

Просте лямбда-вираз не приймає жодних вхідних даних і не повертає жодних вихідних даних - це просто блок коду, який виконується без будь-якого контексту.
() -> System.out.println("Here I am!");
Вказівка ​​() на початку, в позиції вхідних параметрів, означає, що параметри не передаються (як і з порожніми дужками, які йдуть за методом, який не має параметрів).

2. Приймає одиничне введення, повертає без висновку

Щоб лямбда-вираз приймав параметр, ми поміщаємо його у позицію вхідних параметрів:
name -> System.out.println("Here you are too, " + name +  "!");
ПРИМІТКА . Якщо ми маємо один вхідний параметр, ми можемо опустити круглі дужки. Також ми можемо вказати, це цілком допускається.

3. Приймає кілька вхідних даних, не повертає жодних вихідних даних

Коли ми передаємо декілька вхідних параметрів у лямбда-вираз, ми повинні:
  • укласти параметри в круглі дужки
  • використовувати кому для поділу між ними
(name, food) -> System.out.println("So " + name + " enjoys eating " + food + "... interesting!");

4. Містить кілька операторів у розділі коду

Збереження лямбда-виражень в однорядкових операторах вважається гарною практикою. Але можна також застосовувати кілька рядків:
() -> {
  System.out.println("The owl and the pussycat went to sea");
  System.out.println("in a beautiful pea green boat");
}

5. Типи значень, що повертаються, ніколи не вказуються

Як ви, можливо, помітабо, при визначенні лямбда-вираження типи, що повертаються, не вказуються. Ось приклад:
() -> System.out.println("I don't return anything!")
І ще один:
() -> "I return this String!"
Обидва приклади коду майже однакові, але друга лямбда повертає рядок. Врахуйте це під час їх використання. Зрозуміло, що компілятор зрозуміє різницю між ними завдяки умовному використанню дескрипторів функцій.

6. Виведення типу застосовується автоматично, де це можливо

Щоб визначити тип, компілятор використовуватиме висновок типу. І тому він переглядає контекст виконання лямбда-выражения. Для розробника це означає, що йому не доведеться турбуватися про приведення до певного типу.

7. Позначення дескриптора функції

Коли ми думаємо про те, яким типу можна привласнити лямбда-вираз, дуже корисно використовувати дескриптори функцій. Дескриптор функції - це, по суті, сигнатура методу, що надає лямбда-вираз (або метод). Його синтаксис майже такий самий, як і у лямбда-виразів, за винятком того, що замість розділу коду є розділ типу виводу. Ось приклад:
<input-parameter-types> -> <output-parameter-type>

Приклади дескрипторів функцій

Ось кілька прикладів дескрипторів функцій: () -> () Метод, який не приймає вхідних параметрів і не повертає значення. (String) -> () Метод, який приймає вхідний параметр і не повертає значення. () -> (int, float) Метод, який не приймає вхідних параметрів і повертає int та a float(int[]) -> . (SortedMap<Character, Integer>) Метод, що приймає масив int і повертає SortedMap від Character до Integer . Наявність дескрипторів функцій спрощує оцінку сумісності типів під час розгляду, які цільові типи ми можемо використовувати лямбда-выражения.

Висновок

Як бачите, лямбда-вирази – це акуратний та простий спосіб інкапсуляції поведінки. Це одна з основ парадигми функціонального програмування, які представлені в Java з випуском JDK 8.

7 найбільш недооцінених функцій IntelliJ IDEA

Джерело: Better Programming У це важко повірити, але через багато років я все ще зустрічаю людей, які не знають про ці відмінні функції в IntelliJ IDEA.

1. Find anything

Досить важко запам'ятати кожну комбінацію кнопок і відстежити все, що вміє IntelliJ IDEA. Ось чому я часто використовую пошук всередині IntelliJ IDEA. Це допомагає мені знаходити потрібні пункти меню, інструменти, налаштування та навіть файли в одному місці. Кава-брейк #150.  Вивчаємо приклади лямбда-виразів (Lambda Expressions) у Java.  7 найбільш недооцінених функцій IntelliJ IDEA - 2

2. Know where you are

До того, як я знайшов цю функцію, я використовував кнопку "Вибрати відкритий файл", щоб відобразити файл, що редагується в даний момент у дереві проекту. Кава-брейк #150.  Вивчаємо приклади лямбда-виразів (Lambda Expressions) у Java.  7 найбільш недооцінених функцій IntelliJ IDEA - 3Тепер за мене це робить IntelliJ IDEA. Це не параметр за промовчанням, тому вам потрібно буде встановити її для кожного нового або існуючого проекту. Кава-брейк #150.  Вивчаємо приклади лямбда-виразів (Lambda Expressions) у Java.  7 найбільш недооцінених функцій IntelliJ IDEA - 4

3. SQL optimization

Чи знаєте ви, що модуль бази даних, що підключається за умовчанням у вашому середовищі IDE - це більше, ніж простий виконавець SQL? Враховуючи той факт, що рівень збереження (введення/виведення) завжди є найповільнішою частиною програми, я завжди засвідчую, що мої SQL-запити мають хороший план виконання під час роботи з реляційними базами даних. Кава-брейк #150.  Вивчаємо приклади лямбда-виразів (Lambda Expressions) у Java.  7 найбільш недооцінених функцій IntelliJ IDEA - 5

4. Багаторядкове редагування (Multiline editing)

Можливо, ви раніше використовували цю функцію в редакторі Sublime Text Editor. Кава-брейк #150.  Вивчаємо приклади лямбда-виразів (Lambda Expressions) у Java.  7 найбільш недооцінених функцій IntelliJ IDEA - 6

5. Go Back / Forward (Назад/Вперед)

Я дійсно часто переміщаюся в місце, де був раніше, натискаючи кнопки “назад” або “вперед”. Кава-брейк #150.  Вивчаємо приклади лямбда-виразів (Lambda Expressions) у Java.  7 найбільш недооцінених функцій IntelliJ IDEA - 7Перейти назад/вперед: ⌥⌘+стрілка ліворуч/праворуч (Ctrl+Alt+стрілка ліворуч/праворуч для Win/Linux). Щоб відкрити останні файли, натисніть ⌘E (Ctrl+E для Win/Linux).

6. Закладки

Я додаю важливі частини коду до закладок, щоб швидко перейти до них у будь-який момент. Кава-брейк #150.  Вивчаємо приклади лямбда-виразів (Lambda Expressions) у Java.  7 найбільш недооцінених функцій IntelliJ IDEA - 8Щоб перейти до закладки, натисніть ⌃+<номер> (Ctrl+<номер> для Win/Linux). Відразу скажу, що я не використовую більше трьох закладок одночасно, тому що потім стає складно згадати, навіщо вони потрібні.

7. Один редактор для всього

Раніше я відкривав інші текстові редактори, такі як Visual Studio Code або Sublime, щоб зберігати частини коду, JSON, XML, а потім посилатися на них. Але це не є частиною бази коду (проекту) і IntelliJ IDEA чітко нагадує про це, коли ви намагаєтеся створити або відредагувати щось подібне. Потім я побачив, як один із моїх колег використовує Snippets, і зрозумів, наскільки це геніально. Кава-брейк #150.  Вивчаємо приклади лямбда-виразів (Lambda Expressions) у Java.  7 найбільш недооцінених функцій IntelliJ IDEA - 9Новий файл Snippet: ⇧⌘N (Shift+Ctrl+N для Win/Linux). Snippets доступні та синхронізуються у всіх вікнах ваших проектів. Я часто використовую їх для вивчення та форматування деяких JSON або SQL, які я отримав звідкись ще.

Мій секретний рецепт

Вишнею на торті для вас стане функція, яка економить мені багато часу при наборі тексту щодня: Tabnine - плагін JetBrains для компіляції коду Intellij IDEA на основі штучного інтелекту. Поки що він безкоштовний, але поспішайте, я не думаю, що це триватиме довго.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ