Pull to refresh
Comments 8

Интересно, практически руководство к "хитрым" методам коллекций. Однако некоторые рекомендации могут привести к менее читаемому коду (хотя, конечно, это вопрос вкусовщины и сильно зависит от контекста).


Например, вспомнить навскидку, что означает ++:= — тяжело.
Другой пример: в тестах, на мой взгляд, assert(x == Some(y)) гораздо понятнее, чем assert(x.contains(y)) (соответственно x shouldBe Some(y) в ScalaTest лучше, чем x should contain (y))

С `++:=` как раз всё просто — для immutable коллекций (где этого метода нет) запись `a ++:= b` — это `а = a.++:(b)` или без точек — `a = b ++: a` (В общем случае `a operator= b` — `a = a.operator(b)`). То есть добавление `b` в начало `a`. От `b ++ a` это отличается в частности тем, что `b ++: a` — это метод объекта `a`, а не `b` и сохраняется тип `a`.
В случае же с изменяемой коллекцией `a` это метод, добавляющий `b` в начало `a`, но уже с модификацией `a` вместо создания новой коллекции.

А вот совсем мозговзрывающие методы — это `/:` и `:\` — мне кажется только Одерски может ими пользоваться свободно.

Просто, но воспроизводить каждый раз цепочку для ++:= в уме, когда этот оператор используется пару раз на весь проект — задолбаешься.

На вкус и цвет… Мне операторы '/:' и ':\' показались проще, чем foldLeft и foldRight. И главное сразу видно какой аргумент элемент коллекции, а какой аккумулятор.

В 2.12.10 да, в 2.13 должны выпилить, но на нее мы ещё не перешли.

seq.fold(z)(_ min _) и z min seq.min ведут себя немного поразному на пустой коллекции.
Only those users with full accounts are able to leave comments. Log in, please.