Эта серия статей предназначена для занятых программистов, которые хотят быстро освоить Scala — примерно за 2 часа или меньше. Эта серия статей является письменной версией мини-курса Rock the JVM Scala на Light Speed, который вы можете найти бесплатно на YouTube или на веб-сайте Rock the JVM в виде видео.
Эта серия предполагает, что:
- У вас есть некоторый опыт программирования с другими языками — мы часто будем ссылаться на C, C ++, Java, Python и JavaScript, чтобы вы могли легко соотноситься с концепциями
- У вас есть 2 часа сосредоточенного времени, чтобы посвятить серии / около 20 минут на статью
Начиная
Содержание этой статьи доступно в видео здесь или во встроенном видео.
Все, что вам нужно знать о Scala, на данный момент, это:
- Он основан на JVM, поэтому вы можете использовать все библиотеки и инструменты в экосистеме Java.
- Он сочетает объектно-ориентированное и функциональное программирование.
Вам понадобится хорошая IDE, чтобы попробовать код из этой серии. Я рекомендую IntelliJ IDEA с установленным плагином Scala. Настройка проста — при первом запуске, программа спросит, какие плагины вы хотите установить, и Scala является одним из рекомендуемых; просто проверьте это и продолжайте.
Затем перейдите в этот репозиторий GitHub и загрузите код поддержки для этого мини-курса. Если вы знаете, как использовать Git, клонируйте репозиторий и запустите, git checkout start
чтобы получить код в исходное состояние. Если вы не знаете, как использовать Git, загрузите начальное состояние хранилища в виде zip-файла с GitHub . Затем просто откройте эту папку в IntelliJ.
Более на src/main/scala
, в пакете com.rockthejvm
, вы найдете приложение под названием Playground.scala
где я буду приглашать вас возиться с любым кодом Scala вы найдете полезными. Это стандартный hello-world и выглядит так:
Scala
1
package com.rockthejvm
2
3
/**
4
...
5
*/
6
object Playground extends App {
7
println("I love Scala!")
8
}
При желании вы можете щелкнуть правой кнопкой мыши код и щелкнуть « Выполнить», чтобы отобразить это сообщение на консоли. Не беспокойтесь о том, что сейчас что-то значит.
Основы
Значения и типы
В Scala мы работаем со значениями:
Scala
xxxxxxxxxx
1
// defining a value
2
val meaningOfLife: Int = 42
Структура:, val
имя значения : YourType
, =
а затем правая часть.
Значения являются константами. Они не могут быть изменены / переназначены. Выше приведено то же, что и следующий код Java / C ++:
Джава
xxxxxxxxxx
1
const int meaningOfLife = 42;
В Scala мы работаем со значениями и составляем эти значения для получения новых значений.
: YourType
Бит , где вы можете указать тип часто можно опустить. Компилятор может выяснить тип вашего значения, проверив правую часть. 42 — это целое число, поэтому ваше значение — Int. Вы также можете написать:
Scala
xxxxxxxxxx
1
val meaningOfLife = 42
… без типа, и все будет в порядке. Общие типы в Scala аналогичны тем, которые вы видите на других языках: Boolean, Int, Long, Float, Double, Char, String.
В частности, строки похожи на то, что вы видите на других языках, но с некоторыми дополнительными особенностями:
Scala
xxxxxxxxxx
1
// strings and string operations
2
val aString = "I love Scala"
3
val aComposedString = "I" + " " + "love" + " " + "Scala"
4
val anInterpolatedString = s"The meaning of life is $meaningOfLife"
Примечание:
- Мы не добавляли тип ни к какому значению в приведенном выше фрагменте. Компилятор умный.
- Строки могут быть объединены с +.
- Третье значение имеет
s
перед кавычкой. Это s-интерполированная строка, в которую вы можете вставить другое значение со$
знаком.
Выражения
В Scala мы работаем со значениями и составляем их для получения других значений. Композиционные структуры — это выражения, и они именно то, что вы ожидаете.
Scala
xxxxxxxxxx
1
// expressions = structures that can be reduced to a value
2
val anExpression = 2 + 3
Выражения — это структуры, которые можно уменьшить до значения. В отличие от других языков, где мы мыслим в терминах инструкций, то есть «делай это, делай это и делай это, пока это правда», в Scala мы мыслим значениями и выражениями, которые объединяют эти значения.
If-структуры также являются выражениями:
Scala
xxxxxxxxxx
1
val ifExpression = if (meaningOfLife > 43) 56 else 999
Это выражение, которое принимает значение 56 или 999. В C-подобных языках у нас есть этот эквивалентный троичный оператор:, meaningOfLife > 43 ? 56 : 999
но в Scala он гораздо более читабелен, потому что вы можете связать if-выражения в бесконечные if / else if структуры без риск недопонимания любой логики.
Другие известные выражения — это блоки кода:
Scala
xxxxxxxxxx
1
val aCodeBlock = {
2
// definitions
3
val aLocalValue = 67
4
5
// value of block is the value of the last expression
6
aLocalValue + 3
7
}
Правила блоков кода:
- Они действуют как область, то есть вы можете определять локальные значения, классы, функции, которые не видны снаружи.
- Их значение — это значение их последнего выражения (и поэтому они сами являются выражениями).
функции
За исключением некоторых технических аспектов, мы определяем функции как:
Scala
xxxxxxxxxx
1
def myFunction(x: Int, y: String): String = {
2
y + " " + x
3
}
Итак, мы имеем:
-
def
- имя функции
- аргументы в виде
arg: Type
-
: ReturnType
- знак равно
- тогда единственное выражение, которое функция возвратит.
Важным инструментом в функциональном программировании является использование рекурсии . Поскольку мы не используем переменные или циклы в Scala, мы вместо этого думаем с точки зрения рекурсии. Если по какой-то причине вы могли бы извлечь только один урок из этой статьи, это:
В Scala мы не мыслим с точки зрения циклов . Мы думаем с точки зрения рекурсии .
Поскольку в этой статье предполагается, что у вас есть некоторый опыт программирования, мы также предполагаем, что вы знаете, что любой итеративный код имеет эквивалентную рекурсивную версию. Этот конкретный урок трудно усвоить на практике, потому что большинство программистов начинали с императивного языка, такого как C, Java, Python или JavaScript.
Тип блока
Наконец, я закончу эту статью типом выражений, которые не возвращают никакого значащего значения, то есть эквивалент функций «void» в других языках. Примеры: печать чего-либо на экране, запись в файл, отправка данных через сокет.
Примером Scala является println
функция, которая возвращает Unit, эквивалент «void» в других языках. Единица — это тип, содержащий одно обозначенное значение, ()
которое возвращается каждой функцией «void». Значение Единицы ()
не используется (или полезно) само по себе. Выражения, возвращающие Unit (например, печать), называются побочными эффектами , поскольку они не имеют ничего общего с вычислением значимых значений. В чисто функциональном программировании мы склонны сводить побочные эффекты к минимуму.
В следующей статье мы поговорим о Scala как об объектно-ориентированном языке.
Будьте на связи…
Оставайтесь с нами для нашего следующего выпуска, где мы рассмотрим ориентацию объектов в Scala. Вы не хотите пропустить это!