Uma frase que notei recentemente é o conceito de estilo "ponto livre" ...
Primeiro, havia essa pergunta, e também essa .
Então, descobri aqui que eles mencionam "Outro tópico que pode valer a pena discutir é a aversão dos autores ao estilo livre de pontos".
O que é o estilo "sem pontos"? Alguém pode dar uma explicação concisa? Tem algo a ver com curry "automático"?
Para ter uma ideia do meu nível - tenho ensinado Scheme a mim mesmo e escrevi um interpretador Scheme simples ... Eu entendo o que é currying "implícito", mas não conheço nenhum Haskell ou ML.
functional-programming
coding-style
scheme
pointfree
Paul Hollingsworth
fonte
fonte
Respostas:
Basta olhar para o artigo da Wikipedia para obter sua definição:
Exemplo de Haskell:
Convencional (você especifica os argumentos explicitamente):
Livre de pontos (
sum
não tem argumentos explícitos - é apenas uma dobra+
começando com 0):Ou ainda mais simples: em vez de
g(x) = f(x)
, você pode apenas escreverg = f
.Então, sim: está intimamente relacionado ao currying (ou operações como composição de funções).
fonte
sum (x:xs) ...
vez desum sum (x:xs) ...
?O estilo sem pontos significa que os argumentos da função que está sendo definida não são mencionados explicitamente, que a função é definida por meio da composição da função.
Se você tem duas funções, como
e se você quiser combinar essas duas funções com uma que calcule
x*x+1
, você pode defini-la como "ponto cheio" assim:A alternativa livre de pontos seria não falar sobre o argumento
x
:fonte
Um exemplo de JavaScript:
Referência
fonte
O estilo livre de pontos significa que o código não menciona explicitamente seus argumentos, mesmo que eles existam e estejam sendo usados.
Isso funciona em Haskell por causa da maneira como as funções funcionam.
Por exemplo:
retorna uma função que leva um argumento, portanto, não há razão para digitar explicitamente o argumento, a menos que você apenas queira.
fonte
myShow = show
. Há mais sobre isso na wiki de HaskellAqui está um exemplo em TypeScript sem qualquer outra biblioteca:
Você pode ver que o estilo sem pontos é mais "fluente" e fácil de ler.
fonte
this.moreThan(10)
não é uma função nomeada, é uma função curried, bem como uma função que implicitamente (portanto, sem pontos) terá atransaction
como sua entrada.