Ответ 1
Scala использует строки Java (java.lang.String
), поэтому его конкатенация строк такая же, как у Java: то же самое происходит и в обоих. (В то же время среда выполнения.) В Scala существует специальный класс StringBuilder
, который "предоставляет API, совместимый с java.lang.StringBuilder
"; см. http://www.scala-lang.org/api/2.7.5/scala/StringBuilder.html.
Но с точки зрения "лучших практик", я думаю, что большинство людей обычно считают, что лучше писать простой, понятный код, чем максимально эффективный код, за исключением случаев, когда есть реальная проблема с производительностью или веская причина ожидать этого. Оператор +
на самом деле не имеет "плохой производительности", он просто s += "foo"
эквивалентен s = s + "foo"
(т.е. Создает новый объект String
), что означает, что если вы много делаете от конкатенаций к (как выглядит) "одна строка", вы можете избежать создания ненужных объектов — и многократно повторяя предыдущие части из одной строки в другую; используя StringBuilder
вместо String
. Обычно разница не важна. (Разумеется, "простой, понятный код" немного противоречив: использование +=
проще, использование StringBuilder
более ясное. Но все же решение должно основываться скорее на соображениях написания кода, а не на незначительных соображениях производительности.)