Skip to content

Commit 30e8899

Browse files
committed
Add taste-functions.md in russian
1 parent 29c7cf4 commit 30e8899

File tree

2 files changed

+91
-1
lines changed

2 files changed

+91
-1
lines changed

_overviews/scala3-book/taste-functions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: First-Class Functions
33
type: section
44
description: This page provides an introduction to functions in Scala 3.
5-
languages: [zh-cn]
5+
languages: [ru, zh-cn]
66
num: 11
77
previous-page: taste-methods
88
next-page: taste-objects

_ru/scala3/book/taste-functions.md

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
---
2+
layout: multipage-overview
3+
title: Функции первого класса
4+
scala3: true
5+
partof: scala3-book
6+
overview-name: "Scala 3 — Book"
7+
type: chapter
8+
description: На этой странице представлено введение в функции в Scala 3.
9+
language: ru
10+
num: 11
11+
previous-page: taste-methods
12+
next-page: taste-objects
13+
---
14+
15+
Scala обладает большинством возможностей, которые вы ожидаете от функционального языка программирования, в том числе:
16+
17+
- Lambdas (анонимные функции)
18+
- Функции высшего порядка (HOF)
19+
- Неизменяемые коллекции в стандартной библиотеке
20+
21+
Лямбда-выражения, также известные как _анонимные функции_, играют важную роль в том, чтобы ваш код был кратким, но удобочитаемым.
22+
23+
Метод `map` класса `List` является типичным примером функции высшего порядка —
24+
функции, которая принимает функцию в качестве параметра.
25+
26+
Эти два примера эквивалентны и показывают, как умножить каждое число в списке на `2`, передав лямбда в метод `map`:
27+
28+
29+
{% tabs function_1 %}
30+
{% tab 'Scala 2 and 3' for=function_1 %}
31+
```scala
32+
val a = List(1, 2, 3).map(i => i * 2) // List(2,4,6)
33+
val b = List(1, 2, 3).map(_ * 2) // List(2,4,6)
34+
```
35+
{% endtab %}
36+
{% endtabs %}
37+
38+
Примеры выше также эквивалентны следующему коду, в котором вместо лямбда используется метод `double`:
39+
40+
41+
{% tabs function_2 %}
42+
{% tab 'Scala 2 and 3' for=function_2 %}
43+
```scala
44+
def double(i: Int): Int = i * 2
45+
46+
val a = List(1, 2, 3).map(i => double(i)) // List(2,4,6)
47+
val b = List(1, 2, 3).map(double) // List(2,4,6)
48+
```
49+
{% endtab %}
50+
{% endtabs %}
51+
52+
> Если вы еще раньше не видели метод `map`, он применяет заданную функцию к каждому элементу в списке,
53+
> создавая новый список, содержащий результирующие значения.
54+
55+
Передача лямбда-выражений функциям высшего порядка в классах коллекций (таких, как `List`) —
56+
это часть работы со Scala, которую вы будете делать каждый день.
57+
58+
59+
## Неизменяемые коллекции
60+
61+
Когда вы работаете с неизменяемыми коллекциями, такими как `List`, `Vector`,
62+
а также с неизменяемыми классами `Map` и `Set`, важно знать,
63+
что эти функции не изменяют коллекцию, для которой они вызываются;
64+
вместо этого они возвращают новую коллекцию с обновленными данными.
65+
В результате также принято объединять их вместе в “свободном” стиле для решения проблем.
66+
67+
Например, в этом примере показано, как отфильтровать коллекцию дважды,
68+
а затем умножить каждый элемент в оставшейся коллекции:
69+
70+
71+
{% tabs function_3 %}
72+
{% tab 'Scala 2 and 3' for=function_3 %}
73+
```scala
74+
// пример списка
75+
val nums = (1 to 10).toList // List(1,2,3,4,5,6,7,8,9,10)
76+
77+
// методы могут быть сцеплены вместе
78+
val x = nums.filter(_ > 3)
79+
.filter(_ < 7)
80+
.map(_ * 10)
81+
82+
// result: x == List(40, 50, 60)
83+
```
84+
{% endtab %}
85+
{% endtabs %}
86+
87+
В дополнение к функциям высшего порядка, используемым в стандартной библиотеке,
88+
вы также можете [создавать свои собственные функции][higher-order].
89+
90+
[higher-order]: {% link _overviews/scala3-book/fun-hofs.md %}

0 commit comments

Comments
 (0)