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