Skip to content

Commit ed0d481

Browse files
committed
Add taste-toplevel-definitions.md in russian
1 parent 35e3e89 commit ed0d481

File tree

2 files changed

+80
-1
lines changed

2 files changed

+80
-1
lines changed

_overviews/scala3-book/taste-toplevel-definitions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: Toplevel Definitions
33
type: section
44
description: This page provides an introduction to top-level definitions in Scala 3
5-
languages: [zh-cn]
5+
languages: [ru, zh-cn]
66
num: 15
77
previous-page: taste-contextual-abstractions
88
next-page: taste-summary
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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: 15
11+
previous-page: taste-contextual-abstractions
12+
next-page: taste-summary
13+
---
14+
15+
16+
В Scala 3 все виды определений могут быть записаны на “верхнем уровне” ваших файлов с исходным кодом.
17+
Например, вы можете создать файл с именем _MyCoolApp.scala_ и поместить в него следующее содержимое:
18+
19+
{% tabs toplevel_1 %}
20+
{% tab 'Scala 3 only' for=toplevel_1 %}
21+
```scala
22+
import scala.collection.mutable.ArrayBuffer
23+
24+
enum Topping:
25+
case Cheese, Pepperoni, Mushrooms
26+
27+
import Topping.*
28+
class Pizza:
29+
val toppings = ArrayBuffer[Topping]()
30+
31+
val p = Pizza()
32+
33+
extension (s: String)
34+
def capitalizeAllWords = s.split(" ").map(_.capitalize).mkString(" ")
35+
36+
val hwUpper = "hello, world".capitalizeAllWords
37+
38+
type Money = BigDecimal
39+
40+
// по желанию здесь можно указать ещё больше определений ...
41+
42+
@main def myApp =
43+
p.toppings += Cheese
44+
println("show me the code".capitalizeAllWords)
45+
```
46+
{% endtab %}
47+
{% endtabs %}
48+
49+
Как показано, нет необходимости помещать эти определения внутрь конструкции `package`, `class` или иной конструкции.
50+
51+
## Заменяет объекты пакета
52+
53+
Если вы знакомы со Scala 2, этот подход заменяет _объекты пакета_ (_package objects_).
54+
Но, будучи намного проще в использовании, они работают одинаково:
55+
когда вы помещаете определение в пакет с именем `foo`,
56+
вы можете получить доступ к этому определению во всех других пакетах в `foo`, например, в пакете `foo.bar`,
57+
как в этом примере:
58+
59+
{% tabs toplevel_2 %}
60+
{% tab 'Scala 3 only' for=toplevel_2 %}
61+
```scala
62+
package foo {
63+
def double(i: Int) = i * 2
64+
}
65+
66+
package foo {
67+
package bar {
68+
@main def fooBarMain =
69+
println(s"${double(1)}") // это работает
70+
}
71+
}
72+
```
73+
{% endtab %}
74+
{% endtabs %}
75+
76+
Фигурные скобки используются в этом примере, чтобы подчеркнуть вложенность пакета.
77+
78+
Преимуществом такого подхода является то, что можно размещать определения в пакете с именем `com.acme.myapp`,
79+
а затем можно ссылаться на эти определения в `com.acme.myapp.model`, `com.acme.myapp.controller` и т.д.

0 commit comments

Comments
 (0)