Подсказка: в следующих примерах попробуйте выбрать предпочтительную для вас версию Scala.
Ваша первая Scala-программа
Пример “Hello, World!” на Scala выглядит следующим образом. Сначала поместите этот код в файл с именем hello.scala:
object hello {
def main(args: Array[String]) = {
println("Hello, World!")
}
}
В этом коде мы определили метод с именем
main
внутри Scalaobject
-а с именемhello
.object
в Scala похож наclass
, но определяет экземпляр singleton, который можно передать.main
принимает входной параметр с именемargs
, который должен иметь типArray[String]
(args
пока можно игнорировать).
@main def hello() = println("Hello, World!")
В этом коде
hello
- это метод. Он определяется с помощьюdef
и объявляется в качестве основного метода с помощью аннотации@main
. Он выводит строку “Hello, World!” на стандартный вывод (STDOUT) с помощью методаprintln
.
Затем скомпилируйте код с помощью scalac
:
$ scalac hello.scala
Если вы переходите на Scala с Java: scalac
похоже на javac
, эта команда создает несколько файлов:
$ ls -1
hello$.class
hello.class
hello.scala
$ ls -1
hello$package$.class
hello$package.class
hello$package.tasty
hello.scala
hello.class
hello.tasty
Как и Java, файлы .class представляют собой файлы байт-кода, и они готовы к запуску в JVM.
Теперь вы можете запустить метод hello
командой scala
:
$ scala hello
Hello, World!
Если запуск прошел успешно, поздравляем, вы только что скомпилировали и запустили свое первое приложение Scala.
Дополнительную информацию о sbt и других инструментах, упрощающих разработку на Scala, можно найти в главе Инструменты Scala.
Запрос пользовательского ввода
В нашем следующем примере давайте спросим имя пользователя, прежде чем приветствовать его!
Есть несколько способов прочитать ввод из командной строки, но самый простой способ —
использовать метод readLine
из объекта scala.io.StdIn.
Чтобы использовать этот метод, вам нужно сначала его импортировать, например:
import scala.io.StdIn.readLine
Чтобы продемонстрировать, как это работает, давайте создадим небольшой пример. Поместите этот исходный код в файл с именем helloInteractive.scala:
import scala.io.StdIn.readLine
object helloInteractive {
def main(args: Array[String]) = {
println("Please enter your name:")
val name = readLine()
println("Hello, " + name + "!")
}
}
import scala.io.StdIn.readLine
@main def helloInteractive() =
println("Please enter your name:")
val name = readLine()
println("Hello, " + name + "!")
В этом коде мы сохраняем результат из readLine
в переменную с именем name
,
затем используем оператор над строками +
для соединения "Hello, "
с name
и "!"
, создавая одно единственное строковое значение.
Вы можете узнать больше об использовании val, прочитав главу Переменные и типы данных.
Затем скомпилируйте код с помощью scalac
:
$ scalac helloInteractive.scala
Затем запустите его с помощью scala helloInteractive
. На этот раз программа сделает паузу после запроса вашего имени
и подождет, пока вы не наберете имя и не нажмете клавишу возврата на клавиатуре.
Выглядит это так:
$ scala helloInteractive
Please enter your name:
▌
Когда вы вводите свое имя в “приглашении”, окончательное взаимодействие должно выглядеть так:
$ scala helloInteractive
Please enter your name:
Alvin Alexander
Hello, Alvin Alexander!
Примечание об импорте
Как вы ранее видели, иногда определенные методы или другие типы определений, которые мы увидим позже, недоступны,
если вы не используете подобное предложение import
:
import scala.io.StdIn.readLine
Импорт помогает писать и распределять код несколькими способами:
- вы можете поместить код в несколько файлов, чтобы избежать беспорядка и облегчить навигацию в больших проектах.
- вы можете использовать библиотеку кода, возможно, написанную кем-то другим, которая имеет полезную функциональность.
- вы видите, откуда берется определенное определение (особенно если оно не было записано в текущем файле).
Contributors to this page:
Contents
- Введение
- Возможности Scala
- Почему Scala 3?
- Почувствуй Scala
- Пример 'Hello, World!'
- REPL
- Переменные и типы данных
- Структуры управления
- Моделирование данных
- Методы
- Функции первого класса
- Одноэлементные объекты
- Коллекции
- Контекстные абстракции
- Верхнеуровневые определения
- Обзор
- Первый взгляд на типы
- Интерполяция строк
- Структуры управления
- Моделирование предметной области
- Инструменты
- Моделирование ООП
- Моделирование ФП
- Методы
- Особенности методов
- Main методы в Scala 3
- Обзор
- Функции
- Анонимные функции
- Параметры функции
- Eta расширение
- Функции высшего порядка
- Собственный map
- Создание метода, возвращающего функцию
- Обзор
- Пакеты и импорт
- Коллекции в Scala
- Типы коллекций
- Методы в коллекциях
- Обзор
- Функциональное программирование
- Что такое функциональное программирование?
- Неизменяемые значения
- Чистые функции
- Функции — это значения
- Функциональная обработка ошибок
- Обзор
- Типы и система типов
- Определение типов
- Параметризованные типы
- Пересечение типов
- Объединение типов
- Алгебраические типы данных
- Вариантность
- Непрозрачные типы
- Структурные типы
- Зависимые типы функций
- Другие типы
- Контекстные абстракции
- Методы расширения
- Параметры контекста
- Контекстные границы
- Given импорты
- Классы типов
- Многостороннее равенство
- Неявное преобразование типов
- Обзор
- Параллелизм
- Scala утилиты
- Сборка и тестирование проектов Scala с помощью Sbt
- Рабочие листы
- Взаимодействие с Java