Função

Conceito

O conceito de função está diretamente ligado ao conceito de relação entre dois conjuntos. Temos o conjunto de entrada ou domínio da função e o conjunto de saída ou imagem. Em suma caracteriza-se pela relação entre duas ou mais estruturas dependentes.

Dentro da programação, basicamente todo código é uma função. São criadas classes e subrotinas que são funções menores para executar ações específicas, quando agregadas ao todo, são eficientes em desenvolver uma tarefa específica.

Estrutura de uma função

As funções tem uma estrutura básica que podemos destiguir da seguinte forma:

Entrada -> operação -> saída

Quando tratamos das saídas, temos dois tipos de funções, uma onde o valor informado deve ser visto e tem sua finalidade em sí. Contudo a maioria das funções são reaproveitadas, ou seja, elas são partes de um todo do cálculo, logo seu valor não é necessáriamente visível, mas sim reaproveitável.

Saber o tipo de função que precisamos encontrar é geralmente muito importante para determinar como apresentar o resultado, se ele será um print ou um retorno.

Neste material iremos dar prioridade as funções que trazem uma informação visível e útil ao usuário. Na próxima lição iremos aprender as funções que apenas retornam um valor sem a necessidade de sua apresentação, pois fazem parte de algo maior, que denomianamos como funções compostas.

Função com uma variável

A função com apenas uma variável é caracterizada com apenas uma entrada. Assim, ela possui uma variável apenas que irá fazer todo o cálculo necessário e retornar o valor que buscamos.

Como exemplo podemos citar a função que calcula ou determina se um número é par ou impar. Ela necessita basicamente de uma única entrada. Veremos abaixo os dois exemplos.

Aplicação Prática com o R

Primeiramente iremos entender como é a estrutura de uma função no R. Basicamente ela segue esse padrão:

nome_da_função <- function(variável_de_entrada){

variável_local <- operação_com_variável_de_entrada

fprint(‘saídas necessárias’)

}

Assim, uma função que calcula um número par, depende apenas do índice de entrada. Veja abaixo como podemos implementar este algoritmo:

par <- function(x){
  calculo_par <- 2*x
  library(glue)
  msg = glue('O valor par do índice {x} é {calculo_par}')
  print(msg)
}

Agora vamos executar a função:

par(5)
## O valor par do índice 5 é 10

Veja que neste caso, apenas preciso passar o parâmetro para a função \(par(x)\), que ela encontra o valor. Assim, ao fazemos \(x=5\) damos a função um valor de entrada e ela nos retorna um valor de saída.

Seguindo o mesmo princípio iremos abordar a construção da função \(impar(x)\), observe o código:

impar <- function(x){
  calculo_impar <- 2*x-1
  library(glue)
  msg = glue('O valor impar do índice {x} e {calculo_impar}')
  print(msg)
}

Agora vamos executar o cáculo de \(impar(x)\) para o índice 8, ou seja \(impar(8)\):

impar(8)
## O valor impar do índice 8 e 15

Muito interessante não é. Experimente fazer outras funções.

Função com duas variáveis

Uma função com duas variáveis caracteríza-se com duas entradas para estrutura de código. Basicamente termos que atuar com dois valores distintos dentro de nossa operação. É claro que se temos funções com duas variáveis, podemos ter com três, quatro, etc.

Um bom exemplo de uma função com duas variáveis é a que calcula a área de um retângulo e com três seria o cálculo de seu volume. ### Aplicação prática com o R

Vamos agora construir uma função que seja capaz de calcula a área de um retângulo tendo como entrada a sua largura e o seu comprimento. Basicamente iremos criar a \(area\_retangulo(largura, comprimento)\), veja abaixo como fica:

area_retangulo <- function(largura, comprimento){
  area_calculada <- largura*comprimento
  msg = glue('A área do retângulo de largura {largura}m e comprimento {comprimento}m é de {area_calculada}m² ')
  print(msg)
}

Com o algoritmo pronto é só executar a função, onde iremos adotar largura como 8m e comprimento = 7m. Assim:

area_retangulo(largura = 8, comprimento = 7)
## A área do retângulo de largura 8m e comprimento 7m é de 56m²

Vale ressaltar que se colocarmos os valores na ordem de inserção, não precisamos especificar quem é a largura e o comprimento, o R atribui por padrão a ordem já estabelecida na declaração da variável.

area_retangulo(8,7)
## A área do retângulo de largura 8m e comprimento 7m é de 56m²

Com a declaração, podemos até ignorar a ordem que ele faz a correção devido a declaração:

area_retangulo(comprimento = 7, largura = 8)
## A área do retângulo de largura 8m e comprimento 7m é de 56m²

No mesmo sentido podemos criar a função \(volume\_prisma(largura,comprimento, altura)\) que irá nos informar o volume de um prisma de base restangular:

volume_prisma <- function(largura, comprimento, altura){
  volume_calculado <- largura*comprimento*altura
  msg = glue('O volume do prisma de largura {largura}m, comprimento {comprimento}m e altura {altura}m será de {volume_calculado}m³')
  print(msg)
}

Agora vamos encontrar o volume de um prisma de base retangular com largura de 4m, comprimento de 6m e altura de 3m.

volume_prisma(largura=4,comprimento=6,altura = 3)
## O volume do prisma de largura 4m, comprimento 6m e altura 3m será de 72m³

Veja como a função é muito útil e organiza o código para que fique mais limpo e fácil de executar. Além disso, quando precisar mudar algo na função, basta localizar a linha que deve ser alterada e todo o resultado altera-se para a nova regra estabelecida

Exercício da Aula

  • 1 Vamos construir uma função denominada \(par\_impar\) com apenas uma variavel de entrada, que será um número qualquer. O código deve analisar se este número é par ou impar e retornar essa informação para o usuário. Exemplo:

Entrada: x=25

Análise: se 25 for par, então print par, caso contrário print impar.

saída: Resultado da análise.

A função deve utilizar os seguintes conceitos:

  • \(if()\), \(else()\)
  • \(glue()\)
  • Análise do resto da divisão de dois números.

lembre-se, no final eu devo digitar, par_impar(x), e substituir o x por qualquer valor e ela deve me retornar se o valor é par ou impar.