Когда использовать изменяемые и неизменяемые классы в Scala

Много написано о преимуществах неизменяемого состояния, но есть ли в Scala распространенные случаи, когда имеет смысл отдавать предпочтение изменяемым классам? (Это вопрос новичка в Scala от человека с опытом работы в «классическом» ООП-дизайне с использованием изменяемых классов.)

Для чего-то тривиального, такого как трехмерный класс Point, я получаю преимущества неизменности. Но как насчет чего-то вроде класса Motor, который предоставляет различные управляющие переменные и / или показания датчиков? Будет ли опытный разработчик Scala писать такой класс, чтобы он был неизменным? В этом случае, будет ли «скорость» внутренне представлена как «val» вместо «var», а метод «setSpeed» вернет новый экземпляр класса? Точно так же, каждое новое считывание с датчика, описывающего внутреннее состояние двигателя, будет вызывать создание нового экземпляра двигателя?

«Старый способ» выполнения ООП в Java или C # с использованием классов для инкапсуляции изменяемого состояния, кажется, очень хорошо подходит для примера Motor. Поэтому мне любопытно знать, что если вы приобретете опыт использования парадигмы неизменяемого состояния, вы бы даже разработали такой класс, как Motor, чтобы он был неизменным.

Ответы на вопрос(2)

Ваш ответ на вопрос