Найти Π² Π”Π·Π΅Π½Π΅
Π‘Π»ΡƒΡ…ΠΈ IT

🧩 Лямбда-выраТСния: история, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Лямбда-выраТСния β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ понятный ΠΊΠΎΠ΄. ΠžΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΈ появились, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, ΠΈ Π³Π΄Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ? РазбираСмся ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ! πŸš€ ИдСя лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈΡˆΠ»Π° ΠΈΠ· матСматичСской Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ вычислСний. Π’ 1930-Ρ… Π³ΠΎΠ΄Π°Ρ… Π»ΠΎΠ³ΠΈΠΊ Алонзо Π§Ρ‘Ρ€Ρ‡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» лямбда-исчислСниС, ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму для описания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ИмСнно ΠΎΠ½Π° стала основой для лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. πŸ’‘ Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΡ… примСняли Π² акадСмичСской срСдС, Π½ΠΎ с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ языков программирования лямбда-выраТСния стали Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚Π°ΠΊΠΈΡ… языков, ΠΊΠ°ΠΊ Python, JavaScript, Java, C# ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ…. 🎯 Лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ анонимная функция) β€” это функция Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ, которая создаётся "Π½Π° Π»Π΅Ρ‚Ρƒ" для выполнСния нСбольшой Π·Π°Π΄Π°Ρ‡ΠΈ. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности: `lambda x: x * 2` (x) => x * 2 Лямбда-выраТСния ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹Π΅ строки ΠΊΠΎΠ΄Π°.
НапримСр, вмСсто написания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ чисСл ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ: numbers = [1, 2, 3, 4,
ОглавлСниС

Лямбда-выраТСния β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ понятный ΠΊΠΎΠ΄. ΠžΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΈ появились, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, ΠΈ Π³Π΄Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ? РазбираСмся ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ! πŸš€

Лямбда Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ - Π·Π²ΡƒΡ‡ΠΈΡ‚ ΡƒΠ³Ρ€ΠΎΠΆΠ°ΡŽΡ‰Π΅, Π½Π΅ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ?
Лямбда Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ - Π·Π²ΡƒΡ‡ΠΈΡ‚ ΡƒΠ³Ρ€ΠΎΠΆΠ°ΡŽΡ‰Π΅, Π½Π΅ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ?

πŸ•° Π˜ΡΡ‚ΠΎΡ€ΠΈΡ появлСния лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

ИдСя лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈΡˆΠ»Π° ΠΈΠ· матСматичСской Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ вычислСний. Π’ 1930-Ρ… Π³ΠΎΠ΄Π°Ρ… Π»ΠΎΠ³ΠΈΠΊ Алонзо Π§Ρ‘Ρ€Ρ‡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» лямбда-исчислСниС, ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму для описания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ИмСнно ΠΎΠ½Π° стала основой для лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. πŸ’‘

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΡ… примСняли Π² акадСмичСской срСдС, Π½ΠΎ с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ языков программирования лямбда-выраТСния стали Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚Π°ΠΊΠΈΡ… языков, ΠΊΠ°ΠΊ Python, JavaScript, Java, C# ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ…. 🎯

πŸ€“ ВСрминология ΠΈ основы

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅?

Лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ анонимная функция) β€” это функция Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ, которая создаётся "Π½Π° Π»Π΅Ρ‚Ρƒ" для выполнСния нСбольшой Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности:

  • ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ: ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² ΠΎΠ΄Π½Ρƒ строку.
  • ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π½Π΅Ρ‚ нСобходимости ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.
  • Π§Π°Ρ‰Π΅ всСго примСняСтся для ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ использования.

Бинтаксис Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ€Π°Π·Π½Ρ‹Ρ… языков

  • Python:

`lambda x: x * 2`

  • JavaScript:

(x) => x * 2

  • Java:
    x -> x * 2
  • C#:
    x => x * 2

πŸ›  ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

1. Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° πŸ’‘

Лямбда-выраТСния ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹Π΅ строки ΠΊΠΎΠ΄Π°.
НапримСр, вмСсто написания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ чисСл ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

numbers = [1, 2, 3, 4, 5]
even = list(filter(lambda x: x % 2 == 0, numbers))
print(even) # [2, 4]

2. Π Π°Π±ΠΎΡ‚Π° с коллСкциями πŸ“‚

Лямбда-выраТСния часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² сочСтании с функциями Π²Ρ€ΠΎΠ΄Π΅ map, filter, reduce ΠΈΠ»ΠΈ ΠΈΡ… Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° JavaScript:

const numbers = [1, 2, 3, 4];
const doubled = numbers.map(x => x * 2);
console.log(doubled); // [2, 4, 6, 8]

3. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² πŸ”—

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках программирования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Лямбда-выраТСния Π΄Π΅Π»Π°ΡŽΡ‚ это Π΅Ρ‰Ρ‘ ΠΏΡ€ΠΎΡ‰Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Python:

def apply_operation(numbers, operation):
return [operation(x) for x in numbers]

result = apply_operation([1, 2, 3], lambda x: x ** 2)
print(result) # [1, 4, 9]

4. ИспользованиС Π² асинхронных опСрациях ⏳

Лямбда-выраТСния ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ колбэки для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² асинхронных запросах ΠΈΠ»ΠΈ событиях.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° JavaScript:

setTimeout(() => {
console.log("ΠŸΡ€ΠΎΡˆΠ»ΠΎ 3 сСкунды");
}, 3000);

πŸ”‘ ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

  1. ΠšΡ€Π°Ρ‚ΠΊΠΎΡΡ‚ΡŒ: ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄.
  2. Π›Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ: ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.
  3. Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ: Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ колбэки.

⚠️ ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

  1. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ πŸ”
    Если Π² лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ошибка, Π½Π°ΠΉΡ‚ΠΈ Π΅Ρ‘ Π±Ρ‹Π²Π°Π΅Ρ‚ нСпросто ΠΈΠ·-Π·Π° отсутствия ΠΈΠΌΠ΅Π½ΠΈ.
  2. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°
    Лямбда-выраТСния Ρ‡Π°Ρ‰Π΅ всСго подходят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для простых Π·Π°Π΄Π°Ρ‡.

πŸ“‹ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Python: Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ строк

words = ["apple", "banana", "kiwi"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # ['kiwi', 'apple', 'banana']

JavaScript: Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ массива

const names = ["Alice", "Bob", "Charlie"];
const shortNames = names.filter(name => name.length <= 4);
console.log(shortNames); // ["Bob"]

Java: ИспользованиС в Stream API

import java.util.Arrays;
import java.util.List;

public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
numbers.stream()
.map(x -> x * x)
.forEach(System.out::println);
}
}

πŸš€ Π˜Ρ‚ΠΎΠ³ΠΈ

Лямбда-выраТСния β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΊΠΎΠ΄ΠΎΠΌ. Они прСкрасно подходят для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, упрощСния Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ создания ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Однако с Π½ΠΈΠΌΠΈ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΈΠ»ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

Лямбда-выраТСния β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡ программирования ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ красивСС. πŸ’‘