Фраза, которую я недавно заметил, - это концепция стиля «без точек» ...
Сначала был этот вопрос, а также этот .
Затем я обнаружил, что здесь упоминается: «Еще одна тема, которую, возможно, стоит обсудить, - это неприязнь авторов к безточечному стилю».
Что такое стиль «без точек»? Может кто-нибудь дать краткое объяснение? Это как-то связано с "автоматическим" каррированием?
Чтобы получить представление о моем уровне - я учил себя Scheme и написал простой интерпретатор Scheme ... Я понимаю, что такое «неявное» каррирование, но я не знаю ни Haskell, ни ML.
functional-programming
coding-style
scheme
pointfree
Пол Холлингсворт
источник
источник
Ответы:
Просто посмотрите статью в Википедии, чтобы получить свое определение:
Пример на Haskell:
Обычный (вы указываете аргументы явно):
Бесточечный (
sum
не имеет явных аргументов - просто складка,+
начиная с 0):Или даже проще: вместо этого
g(x) = f(x)
вы можете просто написатьg = f
.Так что да: это тесно связано с каррированием (или такими операциями, как композиция функций).
источник
sum (x:xs) ...
вместоsum sum (x:xs) ...
?Бесточечный стиль означает, что аргументы определяемой функции не упоминаются явно, что функция определяется посредством композиции функций.
Если у вас есть две функции, например
и если вы хотите объединить эти две функции в одну, которая вычисляет
x*x+1
, вы можете определить ее как «полная точка» следующим образом:Бессмысленной альтернативой было бы не говорить о споре
x
:источник
Пример JavaScript:
Ссылка
источник
Точечный стиль означает, что в коде явно не упоминаются аргументы, даже если они существуют и используются.
Это работает в Haskell из-за того, как работают функции.
Например:
возвращает функцию, которая принимает один аргумент, поэтому нет причин явно вводить аргумент, если вы этого не хотите.
источник
myShow = show
. Больше об этом можноВот один пример на TypeScript без какой-либо другой библиотеки:
Вы можете видеть, что бесточечный стиль более «плавный» и его легче читать.
источник
this.moreThan(10)
это не именованная функция, это каррированная функция, а также функция, которая неявно (то есть без точки) принимает a вtransaction
качестве входных данных.