Чехол для point free в стиле Scala - PullRequest
21 голосов
/ 25 июля 2011

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

Ответы [ 4 ]

22 голосов
/ 25 июля 2011

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

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

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

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

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

Или даже

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

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

5 голосов
/ 25 июля 2011

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

Однако преимущества без точек быстро уравновешиваются в Scala благодаря его скудной способности выводить типы, и этот факт усугубляется кодом без точек, поскольку «точки» служат подсказками для механизма вывода типов.В Haskell с его почти полным выводом типа это обычно не проблема.

1 голос
/ 25 июля 2011

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

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

0 голосов
/ 25 июля 2011

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

Например:

val x = 1
val y = x + 1

... совпадает с ...

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

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

...