Funções em Clojure

6967 단어 functionalclojure
Vimos no como são as estruturas básicas de dados em Clojure. Nesse post, veremos como declalar e trabalhar com funções na linguagem Clojure.

기능 정의



A criação de uma função é dividida em cinco partes, sendo elas:
  • 정의
  • 이름 da função
  • 문서 문서, sendo opcional
  • Parâmetros que são passados ​​entre colchetes
  • 법인 설립

  • Criando nossa Primeira função em Clojure:

    (defn ola
    "Função que retorna um texto de boas vindas!"
    [nome]
    (println "Olá, " nome))
    


    Acima definimos o nome da nossa função como "ola", escrevemos uma documentação simples, passamos "nome"como parametro e criamos um corpo da função que imprime a frase retornada.

    Invocando 기능:

    (ola "Guilherme")
    ; Olá Guilherme
    


    파라메트로스 에 아리다데



    Em linguagens orientadas a objetos podemos ter metodos com o mesmo nome, porém com quantidade de parametros diferentes na mesma classe. Em Clojure, temos algo parecido. Podemos definir que uma função pode ter diferentes formas deimplementationação com diferentes aridades (número de parametros passados ​​para a função), o que chamamos de sobrecarga de aridade (arity 오버로딩). Abaixo nossa função "ola"ganha novas aridades e para isso, devemos modificar um pouco a forma como escrevemos a função, envolvendo cada forma deimplementar com parênteses.

    (defn ola
    "Função que retorna um texto de boas vindas!"
    ([nome]
    (println "Olá," nome))
    
    ([nome sobrenome]
    (println "Olá," nome sobrenome))
    
    ([nome sobrenome idade]
    (println "Olá," nome sobrenome ". Idade:" idade "anos")))
    


    três formas로 사용 가능한 기능 사용:

    (ola "Guilherme")
    ; Olá, Guilherme
    
    (ola "Guilherme" "Rodrigues")
    ; Olá, Guilherme Rodrigues
    
    (ola "Guilherme" "Rodrigues" 23)
    ; Olá, Guilherme Rodrigues . Idade: 23 anos
    


    Clojure Também nos permite definir uma função com aridade variável através do parametro rest(휴식 매개변수). 나머지 매개변수를 사용할 수 있는 매개변수, 심볼로 사용 및 사용 금지 예시.

    (defn imprime-nome [nome]
        (println "Olá" nome))
    
    (defn ola [& nomes]
        (map imprime-nome nomes))
    


    no exemplo acima definimos uma função chamada imprime-nome passando como parametro o nome. Utilizamos a função imprime-nome para mapear lista de argumentos e imprimi-los. Invocando a função com os parametros:

    (ola "Guilherme" "João" "José")
    
    ; Olá Guilherme
    ; Olá João
    ; Olá José
    


    Para utilizar rest parameter juntamente com outro parametro, devemos passa-los como ultimo parametro da função. 예:

    (defn mostra-time [time & nomes]
        (println "Os jogadores do" time "são: " 
            (clojure.string/join ", " nomes)))
    Invocando a função:
    
    (mostra-time "Real Madrid" "Benzema" "Casemiro" "Rodrigo")
    ; Os jogadores do Real Madrid são: Benzema, Casemiro, Rodrigo
    


    데제스트루투라상



    Clojure nos permite extrair valores dos parametros que são passados ​​para a função utilizando um conceito chamado destructuring. 아니요 abaixo recuperamos apenas o primeiro elemento da coleção passada como parametro e retornamos o mesmo.

    (defn primeiro-elemento [[primeiro-elemento]]
        primeiro-elemento)
    
    (primeiro-elemento ["Carro" "Bicicleta" "Caminhão"])
    ; "Carro"
    


    클로저 사용 허가 및 사용 중지 매개변수 사용 가능 예시:

    (defn dois-primeiros-elementos-e-resto [[primeiro segundo & resto]]
        (println "Primeiro:" primeiro)
        (println "Segundo:" segundo)
        (println "Outros:")
        (println (clojure.string/join ", " resto)))
    
    (dois-primeiros-elementos-e-resto ["Carro" "Bicicleta" "Caminhão" "Metrô" "Ônibus"])
    
    ; Primeiro: Carro
    ; Segundo: Bicicleta
    ; Outros:
    ; Caminhão, Metrô, Ônibus
    


    Também é possível utilizar desestruturação com mapas. abaixo os valores das chaves :nome e :sobrenome informadas são passados ​​para os parametros nome e sobrenome:

    (defn ola [{nome :nome sobrenome :sobrenome}]
    (println "Nome:" nome)
    (println "Sobrenome:" sobrenome))
    
    (ola {:nome "Guilherme" :sobrenome "Rodrigues"})
    
    ; Nome: Guilherme
    ; Sobrenome: Rodrigues
    


    코포 드 펑상



    O corpo da função pode conter inúmeras formas dentro dele. Porem, Clojure retorna apenas a última expressão avaliada pela função. No exemplo abaixo temos diversas formas, porém apenas a última é retornada:

    (defn corpo-funcao []
        (+ 10 15)
        "Corpo da função"
        (* 100 12))
    
    (corpo-funcao)
    ; 1200
    


    Funções anonymas



    Acima fizemos um exemplo utilizando a função map e passamos a função imprime-nome como parametro. Relembrando 기능:

    (defn imprime-nome [nome]
        (println "Olá" nome))
    
    (defn ola [& nomes]
        (map imprime-nome nomes))
    


    Porém, em Clojure não é necessário que todas as funções tenham nomes, pois a linguagem nos possibilita utilizar funções anônimas. Vejamos abaixo como podemos utilizar funções anônimas nesse caso:

    (defn ola [& nomes]
        (map (fn [nome] 
               (println "Olá" nome)) nomes))
    
    (ola "Guilherme" "João")         
    
    ; Olá Guilherme
    ; Olá João
    


    Como visto, para definir uma função anônima, trocamos o defn por fn, retiramos o nome da função e passamos como parametro de outra função. Porém, podemos diminuir mais um pouco a definição da função anônima. Para isso, deixamos de utilizar of fn, não definimos o nome do parametro e substituimos o parametro apenas por %. 예시: acima com função encurtada:

    (defn ola [& nomes]
        (map #(println "Olá" %) nomes))
    
    (ola "Guilherme" "João")    
    
    ; Olá Guilherme
    ; Olá João
    


    Caso a função anônima receba mais de um parametro, é possível utiliza-los como no exemplo abaixo:

    (#(+ %1 %2) 10 15)
    ;25
    


    Espero que tenha gostado das funções em Clojure. Por enquanto é só e nos vemos em um futuro post. 아브라코스 :)

    좋은 웹페이지 즐겨찾기