Pular para o conteúdo principal

Clojure - Criando nossa primeira função

Anteriormente vimos como configurar o ambiente e em seguida escrevemos nossas primeiras linhas de código para começarmos a entender como o Clojure funciona, usamos algumas funções "nativas", declaramos algumas "variáveis" e também brincamos com um vetor.

Nesse post daremos mais um passo, escreveremos nossa primeira função, passando por algumas de suas características e entendendo um pouco sobre como a criação delas funciona.


Definindo nossa primeira função

Para criar nossa primeira função precisamos ter em mente que o que deve ser feito é algo semelhante a definição de uma variável, a diferença fica por conta do uso do comando "defn" (é possível usar o "def", mas veremos isso futuramente), basicamente precisaremos:

  • Escrever todo o conteúdo dentro de parênteses;
  • Usar o comando "defn";
  • Definir uma lista de parâmetros, se não existirem parâmetros (nosso caso agora) essa lista deve estar vazia;
  • Definir o corpo da função;
  • Opcionalmente podemos colocar um comentário para deixar mais claro o que a função faz;
Definindo nossa função:

(defn minha-primeira-funcao
  "Exemplo de uma função"
  []
  (println "Minha primeira função!")
)

Executando nossa função:

(minha-primeira-funcao)

Criando nossa primeira função!

Na imagem acima temos:
  • Na linha três temos o inicio da definição de nossa função com o uso de "defn" seguido do nome que escolhemos;
  • Na linha quatro, entre aspas duplas, temos o comentário que explica o que a função faz;
  • Na linha cinco temos o vetor de parâmetros vazio;
  • Na linha seis temos o corpo de nossa função, que realiza a impressão no console de uma frase;
  • Na linha sete temos o fechamento de nossa função;
  • Na linha nove executamos a nossa função;
  • Na linha dez temos o resultado da execução e na onze o retorno;
Apenas um detalhe, a função toda foi escrita no bloco de notas, e depois copiada para o console para a execução.

Criando uma função que recebe parâmetros e devolve um valor

De acordo com nosso exemplo anterior, para criarmos uma função que receba parâmetros basta declara-los no vetor que tem essa responsabilidade, agora para retornar um valor basta construirmos uma instrução que retorne um valor.

Para nosso segundo exemplo criaremos uma função que calculará e retornará a média de um aluno com base em duas notas:

(defn calcula-media
  "Calculando a media de duas notas"
  [nota1, nota2]
  (/ (nota1 nota2) 2)
)

Executando nossa segunda função:

(calcula-media 7M 8M)

Função que calcula a média de duas notas


Na imagem acima temos:
  • Da linha três a linha sete temos a definição de nossa função, destaque para a linha cinco onde temos a definição de dois parâmetros (nossas duas notas) e para a linha seis, onde de fato realizamos o cálculo e por consequência o retorno da média, analisando de "dentro" para "fora" temos a soma das notas e depois a divisão por dois;
  • Na linha nove temos a execução da função de média, onde informamos as duas notas, a "letra M" colocada junto do valor das notas é apenas para termos um resultado mais amigável, a frente entenderemos melhor a questão de tipos de dados;
  • E na linha dez temos o resultado apresentado, a média calculada;

Conclusão

Nesse post escrevemos nossas duas primeiras funções e entendemos como passar parâmetros e devolver um resultado.


Saiba mais

Comentários

Mais visitadas

Desabilitar POST do ENTER ASP .NET

Caso não seja necessário uma atualização de página a cada vez que o usuário pressionar a tecla “ ENTER ” podemos codificar uma pequena função em javascript anulando esse comportamento, segue o código: < script language ="javascript"> function desabilitaPostDoEnter(e) {      var key;      if (window.event)           key = window.event.keyCode;  //IE      else           key = e.which;                      //firefox      if (key == 13)           return false ;      else           return true ; } </ script > Agora nos objetos que se deseja c...

Lista de políticos com ficha suja

ATUALIZAÇÃO (08/03/2012 ano de eleição) Representantes de duas pessoas da lista (Eliseu Padilha e Alex Canziani) entraram em contato e pediram que esses fossem removidos, alegando que não houve condenação. É justo essa requisição, porém vale lembrar que escândalos nacionalmente reconhecidos de corrupção não deram em nada, por isso o que realmente conta nesse ano de eleição é uma pesquisa minuciosa sobre os candidatos escolhidos, eu particularmente, por não estar nem um pouco satisfeito, não irei votar em ninguém que já tenha sido eleito. Estou voltando a postar por um motivo nobre, meu tempo continua apertado mas esse post é rápido, na verdade nem meu ele é (visitem o espaço de nosso amigo Lord ), estou apenas repassando essa valiosa informação. Teremos eleição esse ano, e é importante não repetirmos erros passados, vamos ficar atentos em relação a esses nomes e exclui-los de vez do cenário politico nacional. Façamos nossa parte, publicando em nossos blog...

Limpando objetos dinamicamente (Delphi)

  Muitas vezes nos deparamos com situações onde devemos remover o conteúdo de determinados objetos, como por exemplo Edits ou mesmo Labels e dependendo da complexidade da tela setar manualmente cada campo pode ser trabalhoso.Sendo assim mostraremos hoje como montar um esquema automático e genérico para esse caso:   procedure TForm1.Button1Click(Sender: TObject);  procedure LimparEdits(AControl: TComponent); var    vLoop: Integer; begin     { ComponentCount retorna a qtde de componentes que o parent é o AControl, ou seja, somente os componentes que     estão ligados a ele }     for vLoop := 0 to AControl.ComponentCount-1 do      begin                                         ...