Домашнее задание №1 (курс Scala, Naumen)
0. Перед тем как приступить к заданиям
Установка Scala
Инструкция для установки Scala находится тут - https://www.scala-lang.org/download/
Cheatsheet
Для первоначального освоения основных ситнаксических конструкций Scala предлагаем воспользоваться cheatsheet (шпаргалка) - https://alvinalexander.com/downloads/scala/Scala-Cheat-Sheet-devdaily.pdf
1. Использование REPL
Для выполнения данного задания вам понадобится использовать REPL.
У скалы есть как минимум 2 варианта REPL:
- стандартный, который идет вместе самим компилятором - https://downloads.lightbend.com/scala/2.12.10/scala-2.12.10.msi
- Ammonite - разработанный отдельно от комплиятора и имеющий с более мощный функционал, но запускающийся только под Linux/Mac - https://ammonite.io/#Ammonite-REPL
Используйте REPL и запрограммируйте следующее:
- Вывести на консоль “Hello Scala! This is ${здесь ваше имя}”
- Затем поменяйте приветственное слово (“Hello”) на пару других приветственных слов, например, “Hola” и “Guten tag”. Выведите результаты замен на консоль.
- Затем для каждого варианта приветствия замените своё имя на его перевернутое значение (пример: “Artem Sokolov” -> “volokoS metrA”). Результаты таких замен также выведите на консоль.
Примечание: Постарайтесь переиспользовать максимальное количество кода (переменных, строковых литералов, функций и т.д). На данном этапе это не является сколько-либо важным для цели выполнения задания, однако позволяет вам лишний раз попрактиковаться. Вообще программирование с помощью REPL подразумевает скорее отсуствие соблюдения принципов чистоты кода (именование переменных, переиспользование одинаковых кусков кода, DRY, YAGNI и прочих) и позволяет в непринужденной и интерактивной манере попрактиковаться в использовании языка или проверить какую-то идею.
Результат предоставить в виде текстового файла всего текста из консоли начиная с запуска REPL. Для этого в репозитории создана папка и пустой файл куда необходимо положить результат - homeworks/homework_1/task_1/console-output.txt
Пример содержимого файла:
C:\Users\doter>scala Picked up JAVA_TOOL_OPTIONS: -Dorg.lwjgl.opengl.Window.undecorated=true Welcome to Scala 2.13.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_161). Type in expressions for evaluation. Or try :help. scala> val a = "Hello Scala! This is Artem Sokolov" a: String = Hello Scala! This is Artem Sokolov scala> println (a) Hello Scala! This is Artem Sokolov scala>
2. Использование Worksheet
Для целей обучения есть очень удобный способ работы с кодом на Scala - worksheet. Worksheet позволяет иметья интерактивность и наглядность каждой строчки кода, при этом позволяет работать с кодом в рамках целого файла.
Две наиболее удобных альтернативы для этого:
- Scastie - онлайн компилятор и среда исполнения Scala кода с возможностью работать в режиме worksheet - https://scastie.scala-lang.org/
- файл worksheet в IntelliJ IDEA - https://www.jetbrains.com/help/idea/work-with-scala-worksheet-and-ammonite.html
Для выполнения задания необходимо сделать следующее:
- Перенесите весь свой код из п.1 в формат worksheet и добейтесь того, что он точно также комплиируется и выполняется.
- Зарефакторите код (например, выделите одинаковые части строки в переменные, объедините изменяющиеся части в коллекции, выделите в функцию код который выводит строки на консоль и т.д.)
Результат предоставить в виде ссылки на ваш сниппет кода, сохраненный в https://scastie.scala-lang.org/ (не забудьте проверить что по сгенерированной ссылке лежит именно то что вы хотите предоставить и в дальнейшем не изменяйте данный сниппет). Сылку записать в файл homeworks/homework_1/task_2/scastie-url.txt
3. Использование SBT
Для первоначального знакомства с SBT предлагаем работать через IntelliJ IDEA.
Инструкция по созданию нового SBT проекта в IDEA - https://docs.scala-lang.org/getting-started/intellij-track/building-a-scala-project-with-intellij-and-sbt.html
Необходимо создать новый проект, проверить что всё работает, запустив его как описано в инструкции (будте готовы к тому что проект прогружается несколько минут, а затем при первоначальном запуске может начать скачивать зависимости из интернета).
Далее необходимо перенести код из п.2 вместо текущего “Hello world” (в тело объекта object Main extends App
) и исполнить его с помощью SBT (команда sbt run в консоли).
Результат - после всех манипуляций скопировать папку sbt проекта в папку результатов (homeworks/homework_1/task_3
) и закоммитить в git всю папку проекта со всеми файлами.