4  Introdução às Funções

Objetivo: Começar a entender como funcionam as funções em uma linguagem de programação

4.1 O uso de funções é uma abstração natural

Na aula passada já vimos umas funções e isso foi bem natural, foram elas:

  • typeof() - Dado um parâmetro devolve o seu tipo. Variáveis estão associadas a tipos;

  • div() - Dados dois parâmetros devolve a divisão inteira do primeiro pelo segundo;

  • print() e println() - Dados diversos parâmetros os imprime, sem devolver nada.

Inclusive, aqui vale a pena ver que podemos pedir ajuda ao Julia para saber o que fazem as funções. Para isso, se usa o ? antes da função:

?typeof()
?div()
?print()

Ao fazer isso, inclusive descobrimos que o div() pode ser usado também como .

Uma outra função bem útil é a que permite transformar um tipo de valor em outro.

parse(Float64, "32")

Para conversão de valores em ponto flutuante para inteiros, temos a função trunc.

trunc(Int64, 2.25)

De forma inversa temos o float.

float(2)

Finalmente, podemos transformar um valor em uma string, como em:

string(3)

ou

string(3.57)

Também tem muitas funções matemáticas prontas como

Função Descrição
sin(x) Calcula o seno de ( x ) em radianos
cos(x) Calcula o cosseno de ( x ) em radianos
tan(x) Calcula a tangente de ( x ) em radianos
deg2rad(x) Converte ( x ) de graus em radianos
rad2deg(x) Converte ( x ) de radianos em graus
log(x) Calcula o logaritmo natural de ( x )
log(b, x) Calcula o logaritmo de ( x ) na base ( b )
log2(x) Calcula o logaritmo de ( x ) na base 2
log10(x) Calcula o logaritmo de ( x ) na base 10
exp(x) Calcula o expoente da base natural de ( x )
abs(x) Calcula o módulo de ( x )
sqrt(x) Calcula a raiz quadrada de ( x )
cbrt(x) Calcula a raiz cúbica de ( x )
factorial(x) Calcula o fatorial de ( x )

A melhor forma de se acostumar a usar as funções é fazendo contas e verificando os resultados. Uma dica importante é que para funções mais complexas, pode ser que já existam funções prontas em Julia. Para isso uma busca com as palavras chave. Um exemplo a seguir para procurar a função para o cálculo de seno hiperbólico: “julia lang hiperbolic sin”. A busca pelo termo em inglês é uma boa dica para buscas em geral.

Em julia também é possível criar funções conforme as suas necessidades, como abaixo:

function mensagemDeBomDia()
   println("Tenha um bom dia!")
end
mensagemDeBomDia (generic function with 1 method)

Para usar uma função, basta chamá-la:

MensagemDeBomDia()

Funções, podem receber um ou mais parâmetros:

function imprime(a)
   println(" Vou imprimir ", a)
end
imprime(42)
 Vou imprimir 42

Também é possível que uma função chame outra função como em:

function imprimeduasvezes(a)
   imprime(a)
   imprime(a)
end
imprimeduasvezes(13)
 Vou imprimir 13
 Vou imprimir 13

Mais ainda, também é possível diferenciar funções por meio da quantidade de parâmetros.

function recebe(a)
  println("Recebi um parametro: ", a)
end
function recebe(a, b)
  println("Recebi dois parametros: ", a, " ", b)
end
recebe (generic function with 2 methods)

Conforme a chamada, a função chamada será diferente:

recebe(1)
recebe(1, 2)

Também dá para chamar funções com variáveis e com operações, como em:

a = 10
recebe(a)
recebe(a, a + 1)

As funções que vimos até agora imprimem mensagens, mas não devolvem nada. O typeof() delas é nothing, ou seja, algo que não pode ser atribuído.

Mas, também é possível fazer funções que devolvem valores, como:

function soma1(a)
  return a + 1
end

Nesse caso, se for passado um parâmetro numérico, a função devolverá o valor incrementado (adicionado de 1).

Claro que isso pode ser usado com fórmulas mais complicadas como:

function hipotenusa(a, b)
  hip = a * a + b * b
  return hip
end
hipotenusa (generic function with 1 method)

Exercício: Faça uma função para encontrar o de uma equação de segundo grau