0Pricing
Scala for Backend Engineering & Functional Programming · Урок

Значимые отступы

Необязательные фигурные скобки

«Значимые отступы» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Значимые отступы
  2. Перечисления в Scala 3
  3. Непрозрачные типы
  4. Типы объединения и пересечения
← Назад к Scala for Backend Engineering & Functional Programming