Значимые отступы
Необязательные фигурные скобки
«Значимые отступы» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Необязательные фигурные скобки
В Scala 3 появился значимый отступ, также называемый синтаксисом необязательных фигурных скобок. Вместо заключения блоков в { } можно использовать отступы для их обозначения.
- Фигурные скобки по-прежнему работают и полностью допустимы.
- Код с отступами выглядит чище и напоминает Python.
object Main:
def main(args: Array[String]): Unit =
println("No braces needed")Тела методов с отступами
Тело метода после = может быть блоком с отступом. Каждое выражение на одном уровне отступа относится к этому телу.
Последнее выражение является возвращаемым значением.
object Main:
def square(x: Int): Int =
val result = x * x
result
def main(args: Array[String]): Unit =
println(square(5))Выражения if с отступами
Управляющие конструкции используют новый лаконичный синтаксис. После if cond then задайте отступ для ветви, а else выровняйте с if.
thenобязателен в стиле без фигурных скобок.- Скобки вокруг условия не нужны.
object Main:
def main(args: Array[String]): Unit =
val n = 7
val label =
if n % 2 == 0 then "even"
else "odd"
println(label)Циклы for с отступами
В цикле for используется do для побочных эффектов или yield для создания коллекций; в обоих случаях применяется отступ.
object Main:
def main(args: Array[String]): Unit =
for i <- 1 to 3 do
println(s"line $i")
val doubled =
for i <- 1 to 3 yield i * 2
println(doubled)Циклы while с отступами
Цикл while использует do, за которым в стиле необязательных скобок следует блок с отступом.
object Main:
def main(args: Array[String]): Unit =
var i = 0
while i < 3 do
println(s"i = $i")
i += 1Выражения match с отступами
Сопоставление с образцами естественно сочетается с отступами. Ветви case имеют отступ относительно match.
object Main:
def describe(n: Int): String =
n match
case 0 => "zero"
case 1 => "one"
case _ => "many"
def main(args: Array[String]): Unit =
println(describe(1))
println(describe(9))Тела классов и трейтов
Классы, трейты и объекты тоже могут обходиться без фигурных скобок. Двоеточие : после заголовка открывает тело с отступом.
class Point(x: Int, y: Int):
def show: String = s"($x, $y)"
object Main:
def main(args: Array[String]): Unit =
println(Point(2, 3).show)Маркер end
Для длинных блоков с отступами можно добавить маркер конца, чтобы обозначить место завершения определения. Это повышает читаемость больших методов или классов.
- Форма:
end <name>илиend if,end whileи т. д. - Он необязателен, а его корректность проверяется компилятором.
object Main:
def greet(name: String): String =
val msg = s"Hello, $name"
msg
end greet
def main(args: Array[String]): Unit =
println(greet("Ada"))
end main
end MainСмешивание фигурных скобок и отступов
Вы можете свободно смешивать оба стиля. Некоторые команды оставляют фигурные скобки для ясности во вложенных конструкциях. Правила отступов применяются только там, где отсутствуют скобки.
object Main:
def main(args: Array[String]): Unit = {
val xs = List(1, 2, 3)
val total =
xs.foldLeft(0)((acc, x) => acc + x)
println(total)
}Распространённые ошибки при работе с отступами
Отступы имеют значение, поэтому соблюдайте единообразие.
- Используйте пробелы, не смешивайте табуляции с пробелами.
- Строка с неверным выравниванием может незаметно оказаться за пределами блока.
- Двоеточие
:требуется для тел шаблонов (классов и объектов), но не для тел методов после=.
object Main:
def main(args: Array[String]): Unit =
val items = List("a", "b")
items.foreach: item =>
println(item.toUpperCase)Синтаксис аргументов с меньшим количеством скобок
Scala 3 также позволяет передавать блочный аргумент после двоеточия. items.foreach: x => открывает тело лямбда-выражения с отступом, избавляя от вложенных круглых и фигурных скобок.
object Main:
def main(args: Array[String]): Unit =
val nums = List(1, 2, 3, 4)
val evens = nums.filter: n =>
n % 2 == 0
println(evens)Быстрая проверка
Проверьте, насколько хорошо Вы поняли значимые отступы.
Итоги
Вы изучили значимые отступы в Scala 3.
- Для блоков можно использовать отступы вместо
{ }. - Управляющие конструкции используют
then,doиyield. - Тела классов, объектов и трейтов открываются двоеточием
:. - Маркеры
endпомогают обозначать границы длинных блоков. - Оба стиля можно смешивать; соблюдайте единообразие пробелов.
object Main:
def main(args: Array[String]): Unit =
for i <- 1 to 2 do
if i == 1 then println("first")
else println("second")
end main
end MainЧасто задаваемые вопросы
Урок «Значимые отступы» бесплатный?
Да — полный текст урока «Значимые отступы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Чему я научусь в уроке «Значимые отступы»?
Необязательные фигурные скобки Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?
Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Значимые отступы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?
Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.