Когда можно использовать "var" в Scala? - программирование

Когда можно использовать "var" в Scala?

Я знаю, что Scala имеет var (для изменяемого состояния), но чисто функциональное программирование препятствует использованию любого изменяемого состояния и скорее фокусируется на использовании val для всего.

Из императивного мира трудно отказаться от изменчивого состояния.

Мой вопрос в том, когда можно использовать var в коде Scala? Может ли все код действительно выполняться с использованием только val. Если да, то почему у Scala есть вары?

4b9b3361

Ответ 1

Вот несколько причин для vars в Scala:

  • Scala - это язык с несколькими парадигмами, он поощряет функциональное программирование, но оставляет выбор программисту.
  • Доступность: многие API Java выставляют изменяемые переменные.
  • Производительность: иногда использование var дает вам наилучшую производительность.
  • Когда люди говорят, что все может быть сделано без vars, это правильно в том смысле, что Scala все равно будет совершенствовать без vars. Однако это ничего не меняет в отношении действительности предыдущих пунктов.

Ответ 2

Даже с точки зрения функционального программирования вы можете использовать vars (или изменяемые объекты) локально, если они не оставляют область, в которой они определены.

Например, рассмотрим эту (надуманную) функцию, которая возвращает размер списка:

def dumbSize( lst: List[Int] ): Int = {
   var i = 0
   var rest = lst
   while( rest != Nil ) {
     i += 1
     rest = rest.tail
   }
   i
}

Хотя эта (уродливая) функция использует vars, она по-прежнему чиста (побочных эффектов нет и она всегда будет возвращать один и тот же результат для заданного значения аргумента).

Другим примером "инкапсуляции с изменяемым состоянием" является модель актера, в которой состояние актера часто изменяется.