Что лучше: var с mutable.ListMap или var с immutable.ListMap? - PullRequest
0 голосов
/ 28 марта 2019

У меня есть простое использование переменной var с типом immutable.ListMap.К сожалению, сложность кода проекта не дает мне возможности переместить его на immutable val

. На рассмотрении я получаю комментарий, чтобы изменить его на var переменную с mutable.ListMap.Например, «у вас уже есть var, и изменчивость не ухудшит ситуацию».

Что вы думаете об этом?Существуют ли какие-либо показатели производительности или стиль кода, которые запрещают использование изменяемых переменных?Что действительно лучше выбрать между mutable var и immutable var?

Я прочитал все ответы для

val-mutable против var-immutable в Scala и заметилодин комментарий, который получил много лайков:

Предпочитаю неизменяемый val, а не неизменяемый var, а не изменяемый val вместо изменяемого var

Есть ли доказательства или объяснения этому утверждению?

Ответы [ 2 ]

1 голос
/ 28 марта 2019

ListMap на самом деле хороший пример, потому что в многопоточной среде вы должны synchronize, даже если вы только смотрите . var назначения с другой стороны являются атомарными, вам вообще не нужно synchronize, просто пометьте его как @volatile.

Это выигрыш в производительности, а также в надежности (когда ваш материал нуждается в synchronized доступе, это лишь вопрос времени, когда кто-то забудет правильно его кодировать).

Так что, да, если по какой-то причине вы не можете использовать «неизменяемый val», то определенно предпочтите «неизменяемый var», а не «изменяемый вал», если только нет явной и конкретной причины, по которой вы хотите, чтобы ваш контейнер был изменяемым (например, карта действительно огромна и часто обновляется, вызывая измеримые проблемы с производительностью).

Что касается "mutable var", то да, как и в предыдущем ответе, я также понятия не имею, почему в мире вы хотите иметь , что .

1 голос
/ 28 марта 2019

var с изменяемой коллекцией - двойная изменчивость.

var mm : scala.collection.mutable.xxx = ???

Это означает, что коллекция mm может сохраняться и может меняться со временем и / или mmсама по себе может быть изменена для ссылки на совершенно другую коллекцию.

Изменчивые коллекции иногда полезны.Изменчивые переменные редко нужны и их следует избегать.Изменяемые переменные, введенные в изменяемые коллекции?Я просто не понимаю, как это можно оправдать.

...