diff --git a/_getting-started/index.md b/_getting-started/index.md index 9b232187c1..1166dc4fd0 100644 --- a/_getting-started/index.md +++ b/_getting-started/index.md @@ -2,7 +2,7 @@ layout: singlepage-overview title: Getting Started partof: getting-started -languages: [fr, ja, uk] +languages: [fr, ja, ru, uk] includeTOC: true newcomer_resources: diff --git a/_getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md b/_getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md index c335e94af2..6dc397f089 100644 --- a/_getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md +++ b/_getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md @@ -2,7 +2,7 @@ title: Building a Scala Project with IntelliJ and sbt layout: singlepage-overview partof: building-a-scala-project-with-intellij-and-sbt -languages: [ja, uk] +languages: [ja, ru, uk] disqus: true previous-page: getting-started/intellij-track/getting-started-with-scala-in-intellij next-page: testing-scala-in-intellij-with-scalatest @@ -60,10 +60,9 @@ but here's a glance at what everything is for: 1. Change the code in the class to the following: ``` -object Main extends App { +@main def run() = val ages = Seq(42, 75, 29, 64) println(s"The oldest person is ${ages.max}") -} ``` Note: IntelliJ has its own implementation of the Scala compiler, and sometimes your @@ -105,7 +104,7 @@ Continue to the next tutorial in the _getting started with IntelliJ_ series, and **or** -* [The Scala Book](/overviews/scala-book/introduction.html), which provides a set of short lessons introducing Scala’s main features. +* [The Scala Book](/scala3/book/introduction.html), which provides a set of short lessons introducing Scala’s main features. * [The Tour of Scala](/tour/tour-of-scala.html) for bite-sized introductions to Scala's features. - Continue learning Scala interactively online on [Scala Exercises](https://www.scala-exercises.org/scala_tutorial). diff --git a/_getting-started/intellij-track/getting-started-with-scala-in-intellij.md b/_getting-started/intellij-track/getting-started-with-scala-in-intellij.md index cc7eb73add..1e0f1d685c 100644 --- a/_getting-started/intellij-track/getting-started-with-scala-in-intellij.md +++ b/_getting-started/intellij-track/getting-started-with-scala-in-intellij.md @@ -2,7 +2,7 @@ title: Getting Started with Scala in IntelliJ layout: singlepage-overview partof: getting-started-with-scala-in-intellij -languages: [ja, uk] +languages: [ja, ru, uk] disqus: true next-page: building-a-scala-project-with-intellij-and-sbt diff --git a/_getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md b/_getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md index 1b765824b6..e7af916a8d 100644 --- a/_getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md +++ b/_getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md @@ -2,7 +2,7 @@ title: Testing Scala in IntelliJ with ScalaTest layout: singlepage-overview partof: testing-scala-in-intellij-with-scalatest -languages: [ja, uk] +languages: [ja, ru, uk] disqus: true previous-page: building-a-scala-project-with-intellij-and-sbt @@ -31,11 +31,9 @@ This assumes you know [how to build a project in IntelliJ](building-a-scala-proj 1. Call it `CubeCalculator`, change the **Kind** to `object`, and hit enter or double-click on `object`. 1. Replace the code with the following: ``` - object CubeCalculator extends App { - def cube(x: Int) = { + object CubeCalculator: + def cube(x: Int) = x * x * x - } - } ``` ## Creating a test @@ -46,11 +44,10 @@ This assumes you know [how to build a project in IntelliJ](building-a-scala-proj ``` import org.scalatest.funsuite.AnyFunSuite - class CubeCalculatorTest extends AnyFunSuite { + class CubeCalculatorTest extends AnyFunSuite: test("CubeCalculator.cube") { assert(CubeCalculator.cube(3) === 27) } - } ``` 1. In the source code, right-click `CubeCalculatorTest` and select **Run 'CubeCalculatorTest'**. diff --git a/_getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.md b/_getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.md index 46734762d9..c977031737 100644 --- a/_getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.md +++ b/_getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.md @@ -2,7 +2,7 @@ title: Getting Started with Scala and sbt on the Command Line layout: singlepage-overview partof: getting-started-with-scala-and-sbt-on-the-command-line -languages: [ja, uk] +languages: [ja, ru, uk] disqus: true next-page: testing-scala-with-sbt-on-the-command-line diff --git a/_getting-started/sbt-track/testing-scala-with-sbt-on-the-command-line.md b/_getting-started/sbt-track/testing-scala-with-sbt-on-the-command-line.md index 6a2db51a93..9a446b1c76 100644 --- a/_getting-started/sbt-track/testing-scala-with-sbt-on-the-command-line.md +++ b/_getting-started/sbt-track/testing-scala-with-sbt-on-the-command-line.md @@ -2,7 +2,7 @@ title: Testing Scala with sbt and ScalaTest on the Command Line layout: singlepage-overview partof: testing-scala-with-sbt-on-the-command-line -languages: [ja, uk] +languages: [ja, ru, uk] disqus: true previous-page: getting-started-with-scala-and-sbt-on-the-command-line diff --git a/_ja/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md b/_ja/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md index ae7573edba..e701b837f0 100644 --- a/_ja/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md +++ b/_ja/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md @@ -56,10 +56,9 @@ sbt は、より複雑なプロジェクトを構築すだしたら便利にな 1. クラスのコードを次おように変更します。 ``` -object Main extends App { +@main def run() = val ages = Seq(42, 75, 29, 64) println(s"The oldest person is ${ages.max}") -} ``` 注:Intellij は Scala コンパイラーの独自実装を持っており、コードが間違っていると Intellij が示しても正しい場合がときどきあります。 diff --git a/_ja/getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md b/_ja/getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md index 62814e914a..2af1906295 100644 --- a/_ja/getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md +++ b/_ja/getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md @@ -26,11 +26,9 @@ Scala には複数のライブラリとテスト方法がありますが、こ 1. クラスに `CubeCalculator` と名前をつけて、**Kind** を `object` に変更し、**OK** をクリックします。 1. コードを次の通り置き換えます。 ``` - object CubeCalculator extends App { - def cube(x: Int) = { + object CubeCalculator: + def cube(x: Int) = x * x * x - } - } ``` ## テストを作成 @@ -39,13 +37,12 @@ Scala には複数のライブラリとテスト方法がありますが、こ 1. クラスに `CubeCalculatorTest` と名前を付けて、**OK** をクリックします。 1. コードを次の通り置き換えます。 ``` - import org.scalatest.FunSuite + import org.scalatest.funsuite.AnyFunSuite - class CubeCalculatorTest extends FunSuite { + class CubeCalculatorTest extends AnyFunSuite: test("CubeCalculator.cube") { assert(CubeCalculator.cube(3) === 27) } - } ``` 1. `CubeCalculatorTest` のソースコード内で右クリックし、**Run 'CubeCalculatorTest'** を選択します。 diff --git a/_ru/getting-started/index.md b/_ru/getting-started/index.md new file mode 100644 index 0000000000..4d49594778 --- /dev/null +++ b/_ru/getting-started/index.md @@ -0,0 +1,243 @@ +--- +layout: singlepage-overview +title: Начало работы +partof: getting-started +language: ru +includeTOC: true + +newcomer_resources: + - title: Вы пришли с Java? + description: Что нужно знать, чтобы ускорить работу со Scala после первоначального запуска. + icon: "fa fa-coffee" + link: /tutorials/scala-for-java-programmers.html + - title: Scala в браузере + description: > + Чтобы сразу начать экспериментировать со Scala, используйте "Scastie" в своем браузере. + icon: "fa fa-cloud" + link: https://scastie.scala-lang.org/pEBYc5VMT02wAGaDrfLnyw +--- + +Приведенные ниже инструкции охватывают как Scala 3, так и Scala 2. + +
+{% altDetails need-help-info-box 'Нужна помощь?' class=help-info %} +*Если у вас возникли проблемы с настройкой Scala, смело обращайтесь за помощью в канал `#scala-users` +[нашего Discord](https://discord.com/invite/scala).* +{% endaltDetails %} +
+ +## Ресурсы для новичков + +{% include inner-documentation-sections.html links=page.newcomer_resources %} + +## Установка Scala на компьютер + +Установка Scala означает установку различных инструментов командной строки, +таких как компилятор Scala и инструменты сборки. +Мы рекомендуем использовать инструмент установки "Coursier", +который автоматически устанавливает все зависимости. +Также возможно установить по отдельности каждый инструмент вручную. + +### Использование Scala Installer (рекомендованный путь) + +Установщик Scala — это инструмент [Coursier](https://get-coursier.io/docs/cli-overview), +основная команда которого называется `cs`. +Он гарантирует, что в системе установлены JVM и стандартные инструменты Scala. +Установите его в своей системе, следуя следующим инструкциям. + + +{% tabs install-cs-setup-tabs class=platform-os-options %} + + +{% tab macOS for=install-cs-setup-tabs %} +Запустите в терминале следующую команду, следуя инструкциям на экране: +{% include code-snippet.html language='bash' codeSnippet=site.data.setup-scala.macOS-brew %} +{% altDetails cs-setup-macos-nobrew "В качестве альтернативы, если вы не используете Homebrew:" %} + {% include code-snippet.html language='bash' codeSnippet=site.data.setup-scala.macOS-default %} +{% endaltDetails %} +{% endtab %} + + + +{% tab Linux for=install-cs-setup-tabs %} + Запустите в терминале следующую команду, следуя инструкциям на экране: + {% include code-snippet.html language='bash' codeSnippet=site.data.setup-scala.linux %} +{% endtab %} + + + +{% tab Windows for=install-cs-setup-tabs %} + Загрузите и запустите [установщик Scala для Windows]({{site.data.setup-scala.windows-link}}) + на базе Coursier и следуйте инструкциям на экране. +{% endtab %} + + + +{% tab Иное for=install-cs-setup-tabs defaultTab %} + + Следуйте документации Coursier о том, + [как установить и запустить `cs setup`](https://get-coursier.io/docs/cli-installation). +{% endtab %} + + +{% endtabs %} + + + +{% altDetails testing-your-setup 'Тестирование установки' %} +Проверьте корректность установки с помощью команды `scala -version`, которая должна вывести: +```bash +$ scala -version +Scala code runner version {{site.scala-3-version}} -- Copyright 2002-2022, LAMP/EPFL +``` +Если сообщение не выдано, возможно, необходимо перезайти в терминал (или перезагрузиться), +чтобы изменения вступили в силу. +{% endaltDetails %} + + +Наряду с JVM `cs setup` также устанавливает полезные инструменты командной строки: + +| Commands | Description | +|---------------|--------------------------------------------------------------------------------------| +| `scalac` | компилятор Scala | +| `scala` | Scala REPL и средство запуска сценариев | +| `scala-cli` | [Scala CLI](https://scala-cli.virtuslab.org), интерактивный инструментарий для Scala | +| `sbt`, `sbtn` | Инструмент сборки [sbt](https://www.scala-sbt.org/) | +| `amm` | [Ammonite](https://ammonite.io/) — улучшенный REPL | +| `scalafmt` | [Scalafmt](https://scalameta.org/scalafmt/) - средство форматирования кода Scala | + +Дополнительная информация о cs [доступна по ссылке](https://get-coursier.io/docs/cli-overview). + +> `cs setup` по умолчанию устанавливает компилятор и исполняющую программу Scala 3 +> (команды `scalac` и `scala` соответственно). Независимо от того, собираетесь ли вы использовать Scala 2 или 3, +> обычно это не проблема, потому что в большинстве проектов используется инструмент сборки, +> который будет использовать правильную версию Scala независимо от того, какая версия установлена "глобально". +> Тем не менее, вы всегда можете запустить конкретную версию Scala, используя +> ``` +> $ cs launch scala:{{ site.scala-version }} +> $ cs launch scalac:{{ site.scala-version }} +> ``` +> Если предпочтительно, чтобы по умолчанию запускалась Scala 2, вы можете принудительно установить эту версию с помощью: +> ``` +> $ cs install scala:{{ site.scala-version }} scalac:{{ site.scala-version }} +> ``` + +### ...или вручную + +Для компиляции, запуска, тестирования и упаковки проекта Scala нужны только два инструмента: +Java 8 или 11 и sbt. +Чтобы установить их вручную: + +1. если не установлена Java 8 или 11, загрузите Java из + [Oracle Java 8](https://www.oracle.com/java/technologies/javase-jdk8-downloads.html), [Oracle Java 11](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html), + или [AdoptOpenJDK 8/11](https://adoptopenjdk.net/). + Подробную информацию о совместимости Scala/Java см. в разделе [Совместимость с JDK](/overviews/jdk-compatibility/overview.html). +1. установить [sbt](https://www.scala-sbt.org/download.html) + +## Создание проекта "Hello World" с помощью sbt + +В следующих разделах объясняется как создавать проект Scala после того, как установлен sbt. + +Для создания проекта можно использовать командную строку или IDE. +Мы рекомендуем командную строку, если вы с ней знакомы. + +### Использование командной строки + +sbt — это инструмент сборки для Scala. sbt компилирует, запускает и тестирует Scala код +(он также может публиковать библиотеки и выполнять множество других задач). + +Чтобы создать новый проект Scala с помощью sbt: + +1. `cd` в пустую папку. +1. Запустите команду `sbt new scala/scala3.g8`, чтобы создать проект на Scala 3, + или `sbt new scala/hello-world.g8` для создания проекта на Scala 2. + Она извлекает шаблон проекта из GitHub. + Эта команда также создает папку `target`, которую вы можете игнорировать. +1. При появлении запроса назовите приложение `hello-world`. + Это создаст проект под названием "hello-world". +1. Будет сгенерировано следующее: + +``` +- hello-world + - project (sbt использует эту папку для собственных файлов) + - build.properties + - build.sbt (файл определения сборки sbt) + - src + - main + - scala (здесь весь Scala code) + - Main.scala (точка входа в программу) <-- это все, что сейчас нужно +``` + +Дополнительную документацию по sbt можно найти в [Scala Book](/scala3/book/tools-sbt.html) +(см. [здесь](/overviews/scala-book/scala-build-tool-sbt.html) для версии Scala 2) +и в официальной [документации sbt](https://www.scala-sbt.org/1.x/docs/index.html). + +### С интегрированной средой разработки (IDE) + +Вы можете пропустить оставшуюся часть страницы и сразу перейти к [созданию проекта Scala с помощью IntelliJ и sbt](/ru/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.html). + + +## Открыть проект hello-world + +Давайте используем IDE, чтобы открыть проект. Самые популярные из них — IntelliJ и VSCode. +Оба предлагают обширные возможности, но вы по-прежнему можете использовать [множество других редакторов](https://scalameta.org/metals/docs/editors/overview.html). + + +### Использование IntelliJ + +1. Загрузите и установите [IntelliJ Community Edition](https://www.jetbrains.com/idea/download/) +1. Установите Scala plugin, следуя [инструкциям по установке плагинов IntelliJ](https://www.jetbrains.com/help/idea/managing-plugins.html) +1. Откройте файл `build.sbt`, затем выберете *Open as a project* + +### Использование VSCode с metals + +1. Загрузите [VSCode](https://code.visualstudio.com/Download) +1. Установите расширение Metals из [Marketplace](https://marketplace.visualstudio.com/items?itemName=scalameta.metals) +1. Затем откройте каталог, содержащий файл `build.sbt` (это должен быть каталог `hello-world`, если вы следовали предыдущим инструкциям). Когда будет предложено, выберите *Import build*. + +> [Metals](https://scalameta.org/metals) — это “языковой сервер Scala”, обеспечивающий поддержку написания кода Scala в VS Code и других редакторах, +> таких как [Atom, Sublime Text и других](https://scalameta.org/metals/docs/editors/overview.html), использующих Language Server Protocol. +> +> Под капотом Metals взаимодействует со средством сборки с помощью +> [Build Server Protocol (BSP)](https://build-server-protocol.github.io/). +> Подробнее о том, как работает Metals, см. [“Написание Scala в VS Code, Vim, Emacs, Atom и Sublime Text с помощью Metals”](https://www.scala-lang.org/2019/04/16/metals.html). + +### Знакомство с исходным кодом + +Просмотрите эти два файла в своей IDE: + +- _build.sbt_ +- _src/main/scala/Main.scala_ + +При запуске проекта на следующем шаге, конфигурация в _build.sbt_ будет использована для запуска кода в _src/main/scala/Main.scala_. + +## Запуск Hello World + +Код в _Main.scala_ можно запускать из IDE, если удобно. + +Но вы также можете запустить приложение из терминала, выполнив следующие действия: + +1. `cd` в `hello-world`. +1. Запустить `sbt`. Эта команда открывает sbt-консоль. +1. В консоле введите `~run`. `~` является необязательным, но заставляет sbt повторно запускаться при каждом сохранении файла, + обеспечивая быстрый цикл редактирования/запуска/отладки. sbt также создаст директорию `target`, которую пока можно игнорировать. + +После окончания экспериментирования с проектом, нажмите `[Enter]`, чтобы прервать команду `run`. +Затем введите `exit` или нажмите `[Ctrl+D]`, чтобы выйти из sbt и вернуться в командную строку. + +## Следующие шаги + +После того как пройдете приведенные выше обучающие материалы, подумайте о том, чтобы проверить: + +* [The Scala Book](/scala3/book/introduction.html) (см. версию для Scala 2 [здесь](/overviews/scala-book/introduction.html)), которая содержит набор коротких уроков, знакомящих с основными функциями Scala. +* [The Tour of Scala](/ru/tour/tour-of-scala.html) для краткого ознакомления с функциями Scala. +* [Обучающие ресурсы](/learn.html), которые включают в себя интерактивные онлайн-учебники и курсы. +* [Наш список некоторых популярных книг по Scala](/books.html). +* [Руководство по миграции](/scala3/guides/migration/compatibility-intro.html) поможет перенести существующую кодовую базу Scala 2 на Scala 3. + +## Получение помощи + +Существует множество рассылок и real-time чатов на случай, если вы хотите быстро связаться с другими пользователями Scala. +Посетите страницу [нашего сообщества](https://scala-lang.org/community/), чтобы ознакомиться со списком этих ресурсов и узнать, куда можно обратиться за помощью. diff --git a/_ru/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md b/_ru/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md new file mode 100644 index 0000000000..dd13a44443 --- /dev/null +++ b/_ru/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md @@ -0,0 +1,104 @@ +--- +title: Создание проекта Scala с IntelliJ и sbt +layout: singlepage-overview +partof: building-a-scala-project-with-intellij-and-sbt +language: ru +disqus: true +previous-page: /ru/getting-started/intellij-track/getting-started-with-scala-in-intellij +next-page: /ru/testing-scala-in-intellij-with-scalatest +--- + +В этом руководстве мы увидим, как создать проект Scala с помощью [sbt](https://www.scala-sbt.org/1.x/docs/index.html). +sbt — популярный инструмент для компиляции, запуска и тестирования проектов Scala любой сложности. +Использование инструмента сборки, такого как sbt (или Maven/Gradle), становится необходимым, +если вы создаете проекты с зависимостями или несколькими файлами кода. +Мы предполагаем, что вы прочитали [первое руководство](getting-started-with-scala-in-intellij.html). + +## Создание проекта +В этом разделе мы покажем вам, как создать проект в IntelliJ. +Однако, если вы знакомы с командной строкой, мы рекомендуем вам попробовать +[Начало работы со Scala и sbt в командной строке]({{site.baseurl}}/ru/getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.html) +а затем вернуться к разделу "Написание Scala кода". + +1. Если вы не создавали проект из командной строки, откройте IntelliJ и выберите "Create New Project" + * На левой панели выберите Scala, а на правой панели - sbt + * Нажмите **Next** + * Назовите проект "SbtExampleProject" +1. Если вы уже создали проект в командной строке, откройте IntelliJ, выберите *Import Project* и откройте `build.sbt` файл вашего проекта +1. Убедитесь, что ваша **JDK version** - это 1.8, а **sbt version** не ниже 0.13.13 +1. Выберите **Use auto-import**, чтобы доступные зависимости загружались автоматически. +1. Выберите **Finish** + +## Разбор структуры каталогов +sbt создает множество каталогов, которые могут быть полезны, когда вы начнете создавать более сложные проекты. +На данный момент вы можете игнорировать большинство из них, но вот объяснение, для чего все это: + +``` +- .idea (файлы IntelliJ) +- project (плагины и дополнительные настройки sbt) +- src (исходные файлы) + - main (код приложения) + - java (исходные файлы Java) + - scala (исходные файлы Scala) <-- это все, что вам сейчас нужно + - scala-2.12 (файлы, специфичные для Scala 2.12) + - test (модульные тесты) +- target (сгенерированные файлы) +- build.sbt (файл определения сборки для sbt) +``` + + +## Написание Scala-кода +1. На панели слева **Project**, разверните `SbtExampleProject` => `src` => `main` +1. Щелкните правой кнопкой мыши на `scala` и выберете **New** => **Package** +1. Назовите пакет `example` и нажмите **OK** (или просто нажмите клавишу **Enter** или **Return**). +1. Щелкните правой кнопкой мыши на пакете `example` и выберите **New** => **Scala class** +(если вы не видите эту опцию, щелкните правой кнопкой мыши на `SbtExampleProject`, кликните на **Add Frameworks Support**, выберете **Scala** и продолжите) +1. Назовите класс `Main` и измените **Kind** на `Object`. +1. Вставьте следующий код: + +``` +@main def run() = + val ages = Seq(42, 75, 29, 64) + println(s"The oldest person is ${ages.max}") +``` + +Примечание: IntelliJ имеет собственную реализацию компилятора Scala, +и иногда ваш код верен, даже если IntelliJ указывает обратное. +Вы всегда можете проверить, может ли sbt запустить ваш проект в командной строке. + +## Запуск проекта +1. В меню **Run**, выберите **Edit configurations** +1. Нажмите кнопку **+** и выберите **sbt Task**. +1. Назовите задачу `Run the program`. +1. В поле **Tasks**, введите `~run`. `~` заставляет sbt перекомпилировать +и повторно запускать проект при каждом сохранении изменений в файле проекта. +1. Нажмите **OK**. +1. В меню **Run** нажмите **Run 'Run the program'**. +1. В коде измените `75` на `61` и посмотрите на обновленные результаты в консоли. + +## Добавление зависимости +Немного меняя тему, давайте посмотрим, как использовать опубликованные библиотеки +для добавления дополнительных функций в наши приложения. +1. Откройте `build.sbt` и добавьте следующую строку: + +``` +libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2" +``` +Здесь `libraryDependencies` представляет набор зависимостей, +и с помощью `+=` мы добавляем зависимость [scala-parser-combinators](https://github.com/scala/scala-parser-combinators) +к набору зависимостей, которые sbt будет загружать при запуске. +Теперь в любом файле Scala можно импортировать классы, объекты и т.д. из `scala-parser-combinators` с помощью обычного импорта. + +Вы можете найти больше опубликованных библиотек на [Scaladex](https://index.scala-lang.org/), каталоге библиотек Scala, +где вы также можете скопировать указанную выше информацию о зависимостях для вставки в свой файл `build.sbt`. + +## Следующие шаги + +Перейдите к следующему руководству из серии _getting started with IntelliJ_ и узнайте, как [тестировать Scala в IntelliJ с помощью ScalaTest](testing-scala-in-intellij-with-scalatest.html). + +**или** + +* [The Scala Book](/scala3/book/introduction.html), содержащая набор коротких уроков, знакомящих с основными функциями Scala. +* [Тур по Scala](/ru/tour/tour-of-scala.html) для краткого ознакомления с возможностями Scala. +- Продолжайте изучать Scala в интерактивном режиме на + [Scala Exercises](https://www.scala-exercises.org/scala_tutorial). diff --git a/_ru/getting-started/intellij-track/getting-started-with-scala-in-intellij.md b/_ru/getting-started/intellij-track/getting-started-with-scala-in-intellij.md new file mode 100644 index 0000000000..65337bc058 --- /dev/null +++ b/_ru/getting-started/intellij-track/getting-started-with-scala-in-intellij.md @@ -0,0 +1,124 @@ +--- +title: Начало работы со Scala в IntelliJ +layout: singlepage-overview +partof: getting-started-with-scala-in-intellij +language: ru +disqus: true +next-page: /ru/building-a-scala-project-with-intellij-and-sbt +--- + +В этом руководстве мы увидим, как создать минимальный проект Scala с помощью IntelliJ IDE со Scala плагином. +В этом руководстве IntelliJ загрузит Scala за вас. + +## Установка + +1. Убедитесь, что у вас установлена Java 8 JDK (также известная как 1.8) + * Запустите `javac -version` в командной строке и убедитесь, что выдается + `javac 1.8.___` + * Если у вас нет версии 1.8 или выше, [установите JDK](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) +1. Затем загрузите и установите [IntelliJ Community Edition](https://www.jetbrains.com/idea/download/) +1. Затем, после запуска IntelliJ, вы можете загрузить и установить Scala плагин, следуя + [инструкции по установке плагинов IntelliJ](https://www.jetbrains.com/help/idea/installing-updating-and-uninstalling-repository-plugins.html) (найдите "Scala" в меню плагинов). + +Когда мы создадим проект, то установим последнюю версию Scala. +Примечание: Если вы хотите открыть существующий проект Scala, вы можете нажать **Open** +при запуске IntelliJ. + +## Создание проекта + +1. Откройте IntelliJ и нажмите **File** => **New** => **Project** +1. На левой панели выберите Scala. На правой панели - IDEA. +1. Назовите проект **HelloWorld** +1. Если вы впервые создаете Scala проект с помощью IntelliJ, вам необходимо установить Scala SDK. + Справа от поля Scala SDK нажмите кнопку **Create**. +1. Выберите последний номер версии (например, {{ site.scala-version }}) и нажмите **Download**. +Это может занять несколько минут, но тот же пакет SDK могут использовать последующие проекты. +1. Когда SDK будет установлен и вы вернетесь в окно "New Project", нажмите **Finish**. + +## Написание кода + +1. На левой панели **Project** щелкните правой кнопкой мыши на папке `src` и выберите +**New** => **Scala class**. Если вы не видите **Scala class**, щелкните правой кнопкой мыши на **HelloWorld** +и выберите **Add Framework Support...**, затем - **Scala** и продолжить. +Если вы видите ошибку **Error: library is not specified**, вы можете либо нажать кнопку загрузки, +либо выбрать путь к библиотеке вручную. Если вы видите только **Scala Worksheet** попробуйте развернуть папку `src` +и её подпапку `main`, а затем правой кнопкой мыши на папке `scala`. +1. Назовите класс `Hello` и измените **Kind** на `object`. +1. Вставьте следующий код: + +{% tabs hello-world-entry-point class=tabs-scala-version %} + +{% tab 'Scala 2' for=hello-world-entry-point %} + +``` +object Hello extends App { + println("Hello, World!") +} +``` + +{% endtab %} + +{% tab 'Scala 3' for=hello-world-entry-point %} + +``` +@main def hello(): Unit = + println("Hello, World!") +``` + +В Scala 3 вы можете удалить объект `Hello` и вместо него определить метод верхнего уровня `hello` +с аннотацией `@main`. + +{% endtab %} + +{% endtabs %} + +## Запуск + +{% tabs hello-world-run class=tabs-scala-version %} + +{% tab 'Scala 2' for=hello-world-run %} + +* Щелкните правой кнопкой мыши на `Hello` в своем коде и выберите **Run 'Hello'**. +* Готово! + +{% endtab %} + +{% tab 'Scala 3' for=hello-world-run %} + +* Щелкните правой кнопкой мыши на `hello` в своем коде и выберите **Run 'hello'**. +* Готово! + +{% endtab %} + +{% endtabs %} + +## Эксперименты со Скалой + +Хороший способ попробовать примеры кода — использовать Scala Worksheets. + +1. В левой панели проекта щелкните правой кнопкой мыши на +`src` и выберите **New** => **Scala Worksheet**. +2. Назовите новый Scala worksheet "Mathematician". +3. Введите следующий код в worksheet: + +{% tabs square %} +{% tab 'Scala 2 and 3' for=square %} +``` +def square(x: Int): Int = x * x + +square(2) +``` +{% endtab %} +{% endtabs %} + +После запуска кода вы заметите, что результаты его выполнения выводятся на правой панели. +Если вы не видите правую панель, щелкните правой кнопкой мыши на вашем Scala worksheet на панели "Проект" +и выберите "Evaluate Worksheet". + +## Следующие шаги + +Теперь вы знаете, как создать простой Scala проект, который можно использовать для изучения языка. +В следующем уроке мы представим важный инструмент сборки под названием sbt, +который можно использовать для простых проектов и рабочих приложений. + +Далее: [Создание проекта Scala с IntelliJ и sbt](building-a-scala-project-with-intellij-and-sbt.html) diff --git a/_ru/getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md b/_ru/getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md new file mode 100644 index 0000000000..6de67726fb --- /dev/null +++ b/_ru/getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md @@ -0,0 +1,73 @@ +--- +title: Тестирование Scala в IntelliJ с помощью ScalaTest +layout: singlepage-overview +partof: testing-scala-in-intellij-with-scalatest +language: ru +disqus: true +previous-page: /ru/building-a-scala-project-with-intellij-and-sbt +--- + +Для Scala существует множество библиотек и методологий тестирования, +но в этом руководстве мы продемонстрируем один популярный вариант из фреймворка ScalaTest +под названием [AnyFunSuite](https://www.scalatest.org/getting_started_with_fun_suite). + +Это предполагает, что вы знаете, [как создать проект в IntelliJ](building-a-scala-project-with-intellij-and-sbt.html). + +## Настройка +1. Создайте sbt проект в IntelliJ. +1. Добавьте зависимость ScalaTest: + 1. Добавьте зависимость ScalaTest в свой файл `build.sbt`: + ``` + libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.11" % Test + ``` + 1. Если вы получили уведомление "build.sbt was changed", выберите **auto-import**. + 1. Эти два действия заставят `sbt` подгрузить библиотеки ScalaTest. + 1. Дождитесь окончания синхронизации `sbt`; в противном случае, `AnyFunSuite` и `test()` не будет распознаны. +1. На панели проекта слева разверните `src` => `main`. +1. Щелкните правой кнопкой мыши на `scala` и выберите **New** => **Scala class**. +1. Назовите новый класс `CubeCalculator`, измените **Kind** на `object`, или дважды щелкните на `object`. +1. Вставьте следующий код: + ``` + object CubeCalculator: + def cube(x: Int) = + x * x * x + ``` + +## Создание теста +1. На панели проекта слева разверните `src` => `test`. +1. Щелкните правой кнопкой мыши на `scala` и выберите **New** => **Scala class**. +1. Назовите новый класс `CubeCalculatorTest` и нажмите **Enter** или дважды щелкните на `class`. +1. Вставьте следующий код: + ``` + import org.scalatest.funsuite.AnyFunSuite + + class CubeCalculatorTest extends AnyFunSuite: + test("CubeCalculator.cube") { + assert(CubeCalculator.cube(3) === 27) + } + ``` +1. В исходном коде щелкните правой кнопкой мыши на `CubeCalculatorTest` и выберите + **Run 'CubeCalculatorTest'**. + +## Разбор кода + +Давайте разберем код построчно: + +* `class CubeCalculatorTest` означает, что мы тестируем `CubeCalculator` +* `extends AnyFunSuite` позволяет нам использовать функциональность класса AnyFunSuite из ScalaTest, + такую как функция `test` +* `test` это функция из библиотеки FunSuite, которая собирает результаты проверок в теле функции. +* `"CubeCalculator.cube"` - это имя для теста. Вы можете называть тест как угодно, но по соглашению используется имя — "ClassName.methodName". +* `assert` принимает логическое условие и определяет, пройден тест или нет. +* `CubeCalculator.cube(3) === 27` проверяет, действительно ли вывод функции `cube` равен 27. + `===` является частью ScalaTest и предоставляет понятные сообщения об ошибках. + +## Добавление еще одного теста +1. Добавьте еще один оператор `assert` после первого, который проверяет 0 в кубе. +1. Перезапустите тест `CubeCalculatorTest`, кликнув правой кнопкой мыши и выбрав + **Run 'CubeCalculatorTest'**. + +## Заключение +Вы видели один из способов тестирования Scala кода. +Узнать больше о AnyFunSuite от ScalaTest можно на [официальном сайте](https://www.scalatest.org/getting_started_with_fun_suite). +Вы также можете использовать другие тестовые фреймворки, такие, как [ScalaCheck](https://www.scalacheck.org/) и [Specs2](https://etorreborre.github.io/specs2/). diff --git a/_ru/getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.md b/_ru/getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.md new file mode 100644 index 0000000000..f404e3daf8 --- /dev/null +++ b/_ru/getting-started/sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.md @@ -0,0 +1,111 @@ +--- +title: Начало работы со Scala и sbt в командной строке +layout: singlepage-overview +partof: getting-started-with-scala-and-sbt-on-the-command-line +language: ru +disqus: true +next-page: /ru/testing-scala-with-sbt-on-the-command-line +--- + +В этом руководстве вы увидите, как создавать проекты Scala из шаблона. +Это можно использовать как отправную точку для своих собственных проектов. +Мы будем использовать [sbt](https://www.scala-sbt.org/1.x/docs/index.html), де-факто инструмент сборки для Scala. +sbt компилирует, запускает и тестирует ваши проекты среди других связанных задач. +Мы предполагаем, что вы знаете, как пользоваться терминалом. + +## Установка +1. Убедитесь, что у вас установлена Java 8 JDK (также известная как 1.8) + * Запустите `javac -version` в командной строке и убедитесь, что выдается + `javac 1.8.___` + * Если у вас нет версии 1.8 или выше, [установите JDK](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) +1. Установите sbt + * [Mac](https://www.scala-sbt.org/1.x/docs/Installing-sbt-on-Mac.html) + * [Windows](https://www.scala-sbt.org/1.x/docs/Installing-sbt-on-Windows.html) + * [Linux](https://www.scala-sbt.org/1.x/docs/Installing-sbt-on-Linux.html) + +## Создание проекта + +{% tabs sbt-welcome-1 class=tabs-scala-version %} +{% tab 'Scala 2' for=sbt-welcome-1 %} + +1. `cd` в пустую папку. +1. Запустите следующую команду `sbt new scala/hello-world.g8`. + Она извлекает шаблон 'hello-world' из GitHub. + Она также создаст папку `target`, которую пока можно игнорировать. +1. При появлении запроса назовите приложение `hello-world`. Это создаст проект под названием "hello-world". +1. Давайте взглянем на то, что только что было сгенерировано: + +{% endtab %} +{% tab 'Scala 3' for=sbt-welcome-1 %} + +1. `cd` в пустую папку. +1. Запустите следующую команду `sbt new scala/scala3.g8`. + Она извлекает шаблон 'scala3' из GitHub. + Она также создаст папку `target`, которую пока можно игнорировать. +1. При появлении запроса назовите приложение `hello-world`. Это создаст проект под названием "hello-world". +1. Давайте взглянем на то, что только что было сгенерировано: + +{% endtab %} +{% endtabs %} + + +``` +- hello-world + - project (sbt использует эту папку для установки и настройки плагинов и зависимостей) + - build.properties + - src + - main + - scala (весь Scala код находится в этой папке) + - Main.scala (точка входа в программу) <-- это все, что вам сейчас нужно + - build.sbt (файл определения сборки для sbt) +``` + +После того как вы создадите свой проект, sbt создаст дополнительные каталоги `target` для сгенерированных файлов. +Вы можете игнорировать их. + +## Запуск проекта +1. `cd` в `hello-world`. +1. Запустите `sbt`. Эта команда запустит sbt console. +1. Запустите `~run`. `~` опциональна и заставляет sbt перекомпилировать + и повторно запускать проект при каждом сохранении изменений в файле проекта + для быстрого цикла редактирование/запуск/отладка. + sbt также сгенерит директорию `target`, которую можно игнорировать. + +## Доработка кода +1. Откройте файл `src/main/scala/Main.scala` в вашем любимом текстовом редакторе. +1. Измените "Hello, World!" на "Hello, New York!" +1. Если вы не остановили команду sbt, то должны увидеть "Hello, New York!", напечатанным в консоли. +1. Вы можете продолжить вносить изменения и видеть результаты доработки в консоли. + +## Добавление зависимости +Немного меняя тему, давайте посмотрим, как использовать опубликованные библиотеки +для добавления дополнительных функций в наши приложения. + +1. Откройте `build.sbt` и добавьте следующую строку: + +``` +libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2" +``` +Здесь `libraryDependencies` представляет набор зависимостей, +и с помощью `+=` мы добавляем зависимость [scala-parser-combinators](https://github.com/scala/scala-parser-combinators) +к набору зависимостей, которые sbt будет загружать при запуске. +Теперь в любом файле Scala можно импортировать классы, объекты и т.д. из `scala-parser-combinators` с помощью обычного импорта. + +Вы можете найти больше опубликованных библиотек на [Scaladex](https://index.scala-lang.org/), каталоге библиотек Scala, +где вы также можете скопировать указанную выше информацию о зависимостях для вставки в свой файл `build.sbt`. + +> **Примечание для Java библиотек:** Для обычной библиотеки Java следует использовать только один знак процента (`%`) +> между названием организации и именем артефакта. Двойной процент (`%%`) — это специализация Scala библиотек. +> Подробнее об этом можно узнать в [документации sbt][sbt-docs-lib-dependencies]. + +## Следующие шаги + +Перейдите к следующему учебнику из серии _getting started with sbt_ и узнайте, как [тестировать Scala c sbt и ScalaTest в командной строке](testing-scala-with-sbt-on-the-command-line.html). + +**или** + +- Продолжайте изучать Scala в интерактивном режиме на + [Scala Exercises](https://www.scala-exercises.org/scala_tutorial). +- Узнайте о возможностях Scala с помощью небольших статей, ознакомившись с нашим [туром по Scala]({{ site.baseurl }}/ru/tour/tour-of-scala.html). + +[sbt-docs-lib-dependencies]: https://www.scala-sbt.org/1.x/docs/Library-Dependencies.html#Getting+the+right+Scala+version+with diff --git a/_ru/getting-started/sbt-track/testing-scala-with-sbt-on-the-command-line.md b/_ru/getting-started/sbt-track/testing-scala-with-sbt-on-the-command-line.md new file mode 100644 index 0000000000..a74aa92a19 --- /dev/null +++ b/_ru/getting-started/sbt-track/testing-scala-with-sbt-on-the-command-line.md @@ -0,0 +1,105 @@ +--- +title: Тестирование Scala c sbt и ScalaTest в командной строке +layout: singlepage-overview +partof: testing-scala-with-sbt-on-the-command-line +language: ru +disqus: true +previous-page: /ru/getting-started-with-scala-and-sbt-on-the-command-line +--- + +Для Scala существует множество библиотек и методологий тестирования, +но в этом руководстве мы продемонстрируем один популярный вариант из фреймворка ScalaTest +под названием [AnyFunSuite](https://www.scalatest.org/getting_started_with_fun_suite). + +Это предполагает, что вы знаете, [как создать проект с sbt](getting-started-with-scala-and-sbt-on-the-command-line.html). + +## Настройка +1. Используя командную строку создайте новую директорию. +1. Перейдите (`cd`) в этот каталог и запустите `sbt new scala/scalatest-example.g8`. +1. Назовите проект `ScalaTestTutorial`. +1. Проект поставляется с зависимостью ScalaTest в файле `build.sbt`. +1. Перейдите (`cd`) в этот каталог и запустите `sbt test`. Это запустит набор тестов +`CubeCalculatorTest` с одним тестом под названием `CubeCalculator.cube`. + +``` +sbt test +[info] Loading global plugins from /Users/username/.sbt/0.13/plugins +[info] Loading project definition from /Users/username/workspace/sandbox/my-something-project/project +[info] Set current project to scalatest-example (in build file:/Users/username/workspace/sandbox/my-something-project/) +[info] CubeCalculatorTest: +[info] - CubeCalculator.cube +[info] Run completed in 267 milliseconds. +[info] Total number of tests run: 1 +[info] Suites: completed 1, aborted 0 +[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0 +[info] All tests passed. +[success] Total time: 1 s, completed Feb 2, 2017 7:37:31 PM +``` + +## Разбор кода +1. Откройте два файла в текстовом редакторе: + * `src/main/scala/CubeCalculator.scala` + * `src/test/scala/CubeCalculatorTest.scala` +1. В файле `CubeCalculator.scala` увидите определение функции `cube`. +1. В файле `CubeCalculatorTest.scala` тестируемый класс, названный так же как и объект. + +``` + import org.scalatest.funsuite.AnyFunSuite + + class CubeCalculatorTest extends AnyFunSuite: + test("CubeCalculator.cube") { + assert(CubeCalculator.cube(3) === 27) + } +``` + +Давайте разберем код построчно: + +* `class CubeCalculatorTest` означает, что мы тестируем `CubeCalculator` +* `extends AnyFunSuite` позволяет нам использовать функциональность класса AnyFunSuite из ScalaTest, + такую как функция `test` +* `test` это функция из библиотеки FunSuite, которая собирает результаты проверок в теле функции. +* `"CubeCalculator.cube"` - это имя для теста. Вы можете называть тест как угодно, но по соглашению используется имя — "ClassName.methodName". +* `assert` принимает логическое условие и определяет, пройден тест или нет. +* `CubeCalculator.cube(3) === 27` проверяет, действительно ли вывод функции `cube` равен 27. + `===` является частью ScalaTest и предоставляет понятные сообщения об ошибках. + +## Добавление еще одного теста +1. Добавьте еще один тестовый блок с собственным оператором assert, который проверяет 0 в кубе. + + ``` + import org.scalatest.funsuite.AnyFunSuite + + class CubeCalculatorTest extends AnyFunSuite { + test("CubeCalculator.cube 3 should be 27") { + assert(CubeCalculator.cube(3) === 27) + } + + test("CubeCalculator.cube 0 should be 0") { + assert(CubeCalculator.cube(0) === 0) + } + } + ``` + +1. Запустите `sbt test` еще раз, чтобы увидеть результаты. + + ``` + sbt test + [info] Loading project definition from C:\projects\scalaPlayground\scalatestpractice\project + [info] Loading settings for project root from build.sbt ... + [info] Set current project to scalatest-example (in build file:/C:/projects/scalaPlayground/scalatestpractice/) + [info] Compiling 1 Scala source to C:\projects\scalaPlayground\scalatestpractice\target\scala-2.13\test-classes ... + [info] CubeCalculatorTest: + [info] - CubeCalculator.cube 3 should be 27 + [info] - CubeCalculator.cube 0 should be 0 + [info] Run completed in 257 milliseconds. + [info] Total number of tests run: 2 + [info] Suites: completed 1, aborted 0 + [info] Tests: succeeded 2, failed 0, canceled 0, ignored 0, pending 0 + [info] All tests passed. + [success] Total time: 3 s, completed Dec 4, 2019 10:34:04 PM + ``` + +## Заключение +Вы видели один из способов тестирования Scala кода. +Узнать больше о AnyFunSuite от ScalaTest можно на [официальном сайте](https://www.scalatest.org/getting_started_with_fun_suite). +Вы также можете использовать другие тестовые фреймворки, такие, как [ScalaCheck](https://www.scalacheck.org/) и [Specs2](https://etorreborre.github.io/specs2/). diff --git a/_uk/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md b/_uk/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md index 18da5a8ea5..9a9d303f47 100644 --- a/_uk/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md +++ b/_uk/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.md @@ -54,10 +54,9 @@ sbt — популярний інструмент для компіляції, 1. Змініть код у класі на наступний: ``` -object Main extends App { +@main def run() = val ages = Seq(42, 75, 29, 64) println(s"The oldest person is ${ages.max}") -} ``` Примітка: IntelliJ має власну реалізацію компілятора Scala, тому іноді ваш код є правильним, навіть якщо IntelliJ вказує інше. @@ -95,7 +94,7 @@ libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % **або** -* [Книга по Scala](/overviews/scala-book/introduction.html), що є набором коротких вступних уроків з основних особливостей. +* [Книга по Scala](/scala3/book/introduction.html), що є набором коротких вступних уроків з основних особливостей. * [Тур по Scala](/tour/tour-of-scala.html) серія коротких оглядових статей про можливості Scala. * Продовжить вчити Scala інтерактивно виконуючи [вправи зі Scala](https://www.scala-exercises.org/scala_tutorial). \ No newline at end of file diff --git a/_uk/getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md b/_uk/getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md index 87c8c09bdd..de7135cf1b 100644 --- a/_uk/getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md +++ b/_uk/getting-started/intellij-track/testing-scala-in-intellij-with-scalatest.md @@ -28,11 +28,9 @@ previous-page: /uk/building-a-scala-project-with-intellij-and-sbt 1. Назвіть його `CubeCalculator` та змініть **Kind** на `object` та натисніть Enter або двічі клацніть на `object`. 1. Замініть код на наступний: ``` - object CubeCalculator extends App { - def cube(x: Int) = { + object CubeCalculator: + def cube(x: Int) = x * x * x - } - } ``` ## Створення тесту @@ -43,11 +41,10 @@ previous-page: /uk/building-a-scala-project-with-intellij-and-sbt ``` import org.scalatest.funsuite.AnyFunSuite - class CubeCalculatorTest extends AnyFunSuite { + class CubeCalculatorTest extends AnyFunSuite: test("CubeCalculator.cube") { assert(CubeCalculator.cube(3) === 27) } - } ``` 1. У початковому коді клацніть правою кнопкою миші на `CubeCalculatorTest` та оберіть **Run 'CubeCalculatorTest'**.