Подтвердить что ты не робот

Случай для стиля без точек в Scala

Это может показаться действительно очевидным для FP cognoscenti здесь, но для чего нужен свободный стиль в стиле Scala? То, что действительно продало меня по этой теме, - это иллюстрация, показывающая, как стиль точечного шрифта значительно лучше в некоторых измерениях (например, производительность, элегантность, расширяемость, ремонтопригодность), чем код, решающий ту же проблему в стиле, отличном от точки.

4b9b3361

Ответ 1

Проще говоря, о том, чтобы избежать указания имени, где нет необходимости, рассмотрим тривиальный пример:

List("a","b","c") foreach println

В этом случае foreach хочет принять String => Unit, функцию, которая принимает строку и возвращает Unit (по существу, что нет полезного возврата и работает чисто по побочному эффекту)

Нет необходимости связывать имя здесь с каждым экземпляром String, который передается в println. Возможно, это просто делает код более подробным:

List("a","b","c") foreach {println(_)}

Или даже

List("a","b","c") foreach {s => println(s)}

Лично, когда я вижу код, который не написан в стиле point-free, я воспринимаю его как индикатор того, что имя привязки может использоваться дважды, или что оно имеет некоторое значение при документировании кода. Аналогичным образом, я вижу бесшумный стиль как признак того, что я могу рассуждать о коде более просто.

Ответ 2

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

Однако преимущества point-free быстро уравновешиваются в Scala его скудной способностью выводить типы, что усугубляется безточечным кодом, потому что "точки" служат ключом к типу inferencer. В Haskell, с его почти полным типом, это обычно не проблема.

Ответ 3

Я не вижу другого преимущества, кроме "элегантности": он немного короче и может быть более читаемым. Это позволяет рассуждать о функциях как сущностях, не мысленно "глубже уровня" для функционального приложения, но, конечно, вам нужно сначала привыкнуть к нему.

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

Ответ 4

Scala точечный синтаксис является частью волшебных операторов Scala, которые являются-реально-функциями. Даже самые основные операторы - это функции:

Например:

val x = 1
val y = x + 1

... то же самое, что...

val x = 1
val y = x.+(1)

... но, конечно, стиль без точек читается более естественно (плюс представляется оператором).