Skip to content

Add first five pages of Scala3 book in russian #2563

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 19 commits into from
Nov 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion _overviews/scala3-book/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: Introduction
type: chapter
description: This page begins the overview documentation of the Scala 3 language.
languages: [zh-cn]
languages: [ru, zh-cn]
num: 1
previous-page:
next-page: scala-features
Expand Down
2 changes: 1 addition & 1 deletion _overviews/scala3-book/scala-features.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: Scala Features
type: chapter
description: This page discusses the main features of the Scala programming language.
languages: [zh-cn]
languages: [ru, zh-cn]
num: 2
previous-page: introduction
next-page: why-scala-3
Expand Down
2 changes: 1 addition & 1 deletion _overviews/scala3-book/taste-hello-world.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: Hello, World!
type: section
description: This section demonstrates a Scala 3 'Hello, World!' example.
languages: [zh-cn]
languages: [ru, zh-cn]
num: 5
previous-page: taste-intro
next-page: taste-repl
Expand Down
2 changes: 1 addition & 1 deletion _overviews/scala3-book/taste-intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: A Taste of Scala
type: chapter
description: This chapter provides a high-level overview of the main features of the Scala 3 programming language.
languages: [zh-cn]
languages: [ru, zh-cn]
num: 4
previous-page: why-scala-3
next-page: taste-hello-world
Expand Down
2 changes: 1 addition & 1 deletion _overviews/scala3-book/why-scala-3.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: Why Scala 3?
type: chapter
description: This page describes the benefits of the Scala 3 programming language.
languages: [zh-cn]
languages: [ru, zh-cn]
num: 3
previous-page: scala-features
next-page: taste-intro
Expand Down
38 changes: 38 additions & 0 deletions _ru/scala3/book/introduction.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
layout: multipage-overview
title: Введение
scala3: true
partof: scala3-book
overview-name: "Scala 3 — Book"
type: chapter
description: На этой странице начинается обзорная документация по языку Scala 3.
language: ru
num: 1
previous-page:
next-page: scala-features
---

Добро пожаловать в книгу по Scala 3.
Цель этой книги — предоставить неформальное введение в язык Scala.
Она относительно легко затрагивает все темы Scala.
Если в какой-то момент во время чтения этой книги вы захотите получить дополнительную информацию о конкретной функции,
можете воспользоваться ссылкой на нашу [Справочную документацию][reference],
в которой более подробно рассматриваются многие новые функции языка Scala.

<blockquote class="help-info">
<i class="fa fa-info"></i>&nbsp;&nbsp;Если вас интересует заархивированное издание книги для Scala 2,
доступ к нему <a href="/overviews/scala-book/introduction.html">можно получить здесь</a>.
В настоящее время мы находимся в процессе слияния двух книг, и вы можете <a href="{% link scala3/contribute-to-docs.md %}">нам помочь</a>.
</blockquote>

В этой книге мы надеемся продемонстрировать, что Scala — это красивый, выразительный язык программирования с чистым современным синтаксисом,
который поддерживает и функциональное программирование (ФП), и объектно-ориентированное программирование (ООП),
а также обеспечивает безопасную статическую систему типов.
Синтаксис, грамматика и функции Scala были переосмыслены, открыто обсуждались и были обновлены в 2020 году,
чтобы стать яснее и проще для понимания, чем когда-либо прежде.

Книга начинается с беглого обзора возможностей Scala в [разделе “Почувствуй Scala”][taste].
После этого обзора в следующих разделах содержится более подробная информация о рассмотренных языковых функциях.

[reference]: {{ site.scala3ref }}/overview.html
[taste]: {% link _overviews/scala3-book/taste-intro.md %}
487 changes: 487 additions & 0 deletions _ru/scala3/book/scala-features.md

Large diffs are not rendered by default.

205 changes: 205 additions & 0 deletions _ru/scala3/book/taste-hello-world.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
---
layout: multipage-overview
title: Пример 'Hello, World!'
scala3: true
partof: scala3-book
overview-name: "Scala 3 — Book"
type: chapter
description: В этом примере демонстрируется пример 'Hello, World!' на Scala 3.
language: ru
num: 5
previous-page: taste-intro
next-page:
---

> **Подсказка**: в следующих примерах попробуйте выбрать предпочтительную для вас версию Scala.
> <noscript><span style="font-weight: bold;">Info</span>: JavaScript is currently disabled, code tabs will still work, but preferences will not be remembered.</noscript>

## Ваша первая Scala-программа


Пример “Hello, World!” на Scala выглядит следующим образом.
Сначала поместите этот код в файл с именем _hello.scala_:

<!-- Display Hello World for each Scala Version -->
{% tabs hello-world-demo class=tabs-scala-version %}

{% tab 'Scala 2' for=hello-world-demo %}
```scala
object hello {
def main(args: Array[String]) = {
println("Hello, World!")
}
}
```
> В этом коде мы определили метод с именем `main` внутри Scala `object`-а с именем `hello`.
> `object` в Scala похож на `class`, но определяет экземпляр singleton, который можно передать.
> `main` принимает входной параметр с именем `args`, который должен иметь тип `Array[String]`
> (`args` пока можно игнорировать).

{% endtab %}

{% tab 'Scala 3' for=hello-world-demo %}
```scala
@main def hello() = println("Hello, World!")
```
> В этом коде `hello` - это метод.
> Он определяется с помощью `def` и объявляется в качестве основного метода с помощью аннотации `@main`.
> Он выводит строку "Hello, World!" на стандартный вывод (STDOUT) с помощью метода `println`.

{% endtab %}

{% endtabs %}
<!-- End tabs -->

Затем скомпилируйте код с помощью `scalac`:

```bash
$ scalac hello.scala
```

Если вы переходите на Scala с Java: `scalac` похоже на `javac`, эта команда создает несколько файлов:

<!-- Display Hello World compiled outputs for each Scala Version -->
{% tabs hello-world-outputs class=tabs-scala-version %}

{% tab 'Scala 2' for=hello-world-outputs %}
```bash
$ ls -1
hello$.class
hello.class
hello.scala
```
{% endtab %}

{% tab 'Scala 3' for=hello-world-outputs %}
```bash
$ ls -1
hello$package$.class
hello$package.class
hello$package.tasty
hello.scala
hello.class
hello.tasty
```
{% endtab %}

{% endtabs %}
<!-- End tabs -->

Как и Java, файлы _.class_ представляют собой файлы байт-кода, и они готовы к запуску в JVM.

Теперь вы можете запустить метод `hello` командой `scala`:

```bash
$ scala hello
Hello, World!
```

Если запуск прошел успешно, поздравляем, вы только что скомпилировали и запустили свое первое приложение Scala.

> Дополнительную информацию о sbt и других инструментах, упрощающих разработку на Scala, можно найти в главе [Инструменты Scala][scala_tools].

## Запрос пользовательского ввода

В нашем следующем примере давайте спросим имя пользователя, прежде чем приветствовать его!

Есть несколько способов прочитать ввод из командной строки, но самый простой способ —
использовать метод `readLine` из объекта _scala.io.StdIn_.
Чтобы использовать этот метод, вам нужно сначала его импортировать, например:

{% tabs import-readline %}
{% tab 'Scala 2 and 3' for=import-readline %}
```scala
import scala.io.StdIn.readLine
```
{% endtab %}
{% endtabs %}

Чтобы продемонстрировать, как это работает, давайте создадим небольшой пример.
Поместите этот исходный код в файл с именем _helloInteractive.scala_:

<!-- Display interactive Hello World application for each Scala Version -->
{% tabs hello-world-interactive class=tabs-scala-version %}

{% tab 'Scala 2' for=hello-world-interactive %}
```scala
import scala.io.StdIn.readLine

object helloInteractive {

def main(args: Array[String]) = {
println("Please enter your name:")
val name = readLine()

println("Hello, " + name + "!")
}

}
```
{% endtab %}

{% tab 'Scala 3' for=hello-world-interactive %}
```scala
import scala.io.StdIn.readLine

@main def helloInteractive() =
println("Please enter your name:")
val name = readLine()

println("Hello, " + name + "!")
```
{% endtab %}

{% endtabs %}
<!-- End tabs -->

В этом коде мы сохраняем результат из `readLine` в переменную с именем `name`,
затем используем оператор над строками `+` для соединения `"Hello, "` с `name` и `"!"`, создавая одно единственное строковое значение.

> Вы можете узнать больше об использовании val, прочитав главу [Переменные и типы данных](/scala3/book/taste-vars-data-types.html).

Затем скомпилируйте код с помощью `scalac`:

```bash
$ scalac helloInteractive.scala
```

Затем запустите его с помощью `scala helloInteractive`. На этот раз программа сделает паузу после запроса вашего имени
и подождет, пока вы не наберете имя и не нажмете клавишу возврата на клавиатуре.
Выглядит это так:

```bash
$ scala helloInteractive
Please enter your name:
```

Когда вы вводите свое имя в "приглашении", окончательное взаимодействие должно выглядеть так:

```bash
$ scala helloInteractive
Please enter your name:
Alvin Alexander
Hello, Alvin Alexander!
```

### Примечание об импорте

Как вы ранее видели, иногда определенные методы или другие типы определений, которые мы увидим позже, недоступны,
если вы не используете подобное предложение `import`:

{% tabs import-readline-2 %}
{% tab 'Scala 2 and 3' for=import-readline-2 %}
```scala
import scala.io.StdIn.readLine
```
{% endtab %}
{% endtabs %}

Импорт помогает писать и распределять код несколькими способами:
- вы можете поместить код в несколько файлов, чтобы избежать беспорядка и облегчить навигацию в больших проектах.
- вы можете использовать библиотеку кода, возможно, написанную кем-то другим, которая имеет полезную функциональность.
- вы видите, откуда берется определенное определение (особенно если оно не было записано в текущем файле).

[scala_tools]: {% link _overviews/scala3-book/scala-tools.md %}
31 changes: 31 additions & 0 deletions _ru/scala3/book/taste-intro.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
layout: multipage-overview
title: Почувствуй Scala
scala3: true
partof: scala3-book
overview-name: "Scala 3 — Book"
type: chapter
description: В этой главе представлен общий обзор основных возможностей языка программирования Scala 3.
language: ru
num: 4
previous-page: why-scala-3
next-page: taste-hello-world
---


В этой главе представлен краткий обзор основных возможностей языка программирования Scala 3.
После начального ознакомления остальная часть книги содержит более подробную информацию об описанных функциях,
а [справочная документация][reference] содержит массу подробностей.

## Настройка Скала

На протяжении этой главы и остальной части книги мы рекомендуем вам пробовать примеры, скопировав их или набрав вручную.
Инструменты, необходимые для работы с примерами на вашем компьютере, можно установить,
следуя нашему [руководству для началы работы со Scala][get-started].

> В качестве альтернативы вы можете запустить примеры в веб-браузере с помощью [Scastie](https://scastie.scala-lang.org),
> полного онлайн-редактора и исполнителя кода для Scala.


[reference]: {{ site.scala3ref }}/overview.html
[get-started]: {% link _getting-started/index.md %}
Loading