val, var и типы
Привязки и вывод типов
«val, var и типы» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Связывания в Scala
В Scala имена значениям присваиваются с помощью связываний. Для этого используются два ключевых слова: val и var.
val неизменяемо (ему нельзя присвоить новое значение), а var изменяемо (ему можно присвоить новое значение).
Объявление val
val один раз связывает имя со значением. Попытка присвоить ему новое значение приведёт к ошибке компиляции.
По умолчанию отдавайте предпочтение val. Неизменяемость упрощает понимание кода.
object Main {
def main(args: Array[String]): Unit = {
val name = "Ada"
println(name)
}
}Объявление var
var можно переназначить с помощью =. Используйте его только тогда, когда Вам действительно нужно изменяемое состояние.
Обратите внимание: новое значение всё равно должно соответствовать исходному типу.
object Main {
def main(args: Array[String]): Unit = {
var count = 0
count = count + 1
count = count + 1
println(count)
}
}Вывод типов
Обычно Scala сама определяет тип за Вас. Запись val x = 42 автоматически делает x значением типа Int.
Это называется выводом типов: Вы получаете статическую типизацию, не указывая тип каждый раз.
object Main {
def main(args: Array[String]): Unit = {
val x = 42
val pi = 3.14
val flag = true
println(x)
println(pi)
println(flag)
}
}Явные аннотации типов
Тип также можно явно указать после двоеточия: val x: Int = 42.
Это полезно для документирования кода или для выбора более широкого типа, чем выведенный автоматически.
object Main {
def main(args: Array[String]): Unit = {
val age: Int = 30
val price: Double = 9.99
val label: String = "Sale"
println(label + ": " + price)
}
}Основные числовые типы
В Scala есть несколько числовых типов:
Intдля целых чиселLongдля больших целых чиселDoubleдля дробных чиселFloatдля дробных чисел меньшей точности
Целочисленный литерал по умолчанию имеет тип Int, а дробный литерал — тип Double.
object Main {
def main(args: Array[String]): Unit = {
val whole: Int = 7
val big: Long = 9000000000L
val dec: Double = 2.5
println(whole + dec)
}
}Boolean и Char
Boolean хранит значение true или false. Char хранит один символ, записанный в одинарных кавычках.
Это полноценные типы, которые можно сохранять в val и var.
object Main {
def main(args: Array[String]): Unit = {
val isReady: Boolean = true
val grade: Char = 'A'
println(isReady)
println(grade)
}
}Тип String
String хранит текст в двойных кавычках. Строки в Scala неизменяемы.
Их можно объединять с помощью + и вызывать у них множество полезных методов.
object Main {
def main(args: Array[String]): Unit = {
val first = "Grace"
val last = "Hopper"
val full = first + " " + last
println(full.toUpperCase)
}
}Почему val, а не var?
Неизменяемые значения предотвращают целый класс ошибок: ничто другое не может незаметно изменить их.
- Код проще понимать
- Код безопаснее при параллельном выполнении
- Поощряется функциональный стиль
Используйте var только тогда, когда изменение значения действительно необходимо.
Безопасность типов на практике
Поскольку Scala имеет статическую типизацию, компилятор обнаруживает несовпадения типов до запуска программы.
Присваивание текста значению типа Int завершится ошибкой во время компиляции. Ниже приведён корректный код с согласованными типами.
object Main {
def main(args: Array[String]): Unit = {
val quantity: Int = 3
val unitPrice: Double = 4.50
val total: Double = quantity * unitPrice
println(total)
}
}Собираем всё вместе
Объединим в одной небольшой программе неизменяемые и изменяемые связывания, вывод типов и аннотации.
Обратите внимание, как компилятор отслеживает каждый тип за Вас.
object Main {
def main(args: Array[String]): Unit = {
val base = 100
var running = base
val step: Int = 25
running = running + step
println(running)
}
}Быстрая проверка
Проверьте, насколько хорошо Вы поняли связывания и типы.
Итоги
Вы узнали, как Scala задаёт имена значениям:
val— неизменяемое связывание, аvar— изменяемое- Вывод типов определяет тип по значению
- Можно добавлять явные аннотации, например
val x: Int - К основным типам относятся
Int,Long,Double,Boolean,CharиString - Для более безопасного и понятного кода отдавайте предпочтение
val
Часто задаваемые вопросы
Урок «val, var и типы» бесплатный?
Да — полный текст урока «val, var и типы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Чему я научусь в уроке «val, var и типы»?
Привязки и вывод типов Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?
Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «val, var и типы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?
Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.