Seguindo nossa série de posts com o tutorial PHP, veremos neste post o uso de funções, uma função é um recurso muito importante que encontramos nas linguagens de programação, ela evita o retrabalho, e o copia e cola em nosso código tornando-o mais claro e facilitando sua manutenção, vale ressaltar que o conceito de função é válido no cenário de uma programação procedural, ou seja, quando o desenvolvimento não é orientado a objetos.

Existem casos onde é necessário realizarmos a mesma tarefa, mesma rotina, em diferentes pontos de nosso código fonte, e, para não precisarmos repetir código as criamos funções, isso nos permite chamarmos aquele bloco de código sempre que for necessário.

Como dito anteriormente, funções geralmente são utilizadas em códigos procedurais, ou seja, códigos NÃO orientados a objeto, apesar de elas também aparecerem na orientação a objetos, mas com um conceito um pouco diferente (e veremos mais detalhadamente isso mais adiante nos nossos posts), porém elas são imprescindíveis para termos um código de qualidade quando estamos fazendo um código procedural.

 

Antes de começarmos a ver as funções vamos as sugestões de respostas para os exercícios (desafios) propostos no último post:

Fibonacci: https://gist.github.com/RodriAndreotti/fe174c1150c7fa2fa1229f32717f9e7b

Fatorial: https://gist.github.com/RodriAndreotti/8cd042fc1a4774c7a35504e7c1b11b20

 

Função

Como descrito anteriormente uma função é um bloco de código que é definido com um nome (assim como as funções nativas da linguagem PHP), estas funções devem conter um nome e não podem ter o mesmo nome de outra função já existente no mesmo código ou de uma função nativa do PHP.

Seu principal objetivo é a reutilização de código, ou seja, evitar a necessidade de repetir a mesma rotina em diversos lugares do nosso programa, isso facilita não só a leitura do código, como também a manutenção do mesmo, visto que se precisarmos alterar qualquer coisa na rotina executada pela função, alteraremos somente dentro da função e não em diversos lugares diferentes.

Para exemplificar, suponhamos que precisamos criar uma rotina que calcula o INSS que deve ser descontado de um funcionário quando o salário for informado, para isso podemos fazer algo semelhante ao abaixo:

 

Para nosso cálculo, utilizamos a regra de negócios fornecida pela previdência social, podemos encontrá-la neste link.

A partir deste momento, toda vez que precisarmos calcular o INSS de um salário, podemos chamar nossa função, desde que ela tenha sido declarada antes de onde chamamos ela.

É uma prática comum a declaração das funções no início do script, ou criar um arquivo separado contendo as funções comuns ao sistema e fazer a inclusão dela no início do script.

 

Parâmetros / Argumentos

No exemplo acima a função recebe um parâmetro, que nada mais é do que uma espécie de variável que será acessível dentro do escopo (corpo) daquela função e que pode ser passada para ela por um código alheio a ela.

 

É possível também definir funções sem parâmetros, estas fariam processamentos que não dependessem de informações vindas de outros trechos de códigos ou outras funções.

 

Os valores passados para as funções via parâmetro podem ser de tipos primários do PHP (inteiros, booleanos etc. para saber mais consulte o post sobre o assunto aqui), ou tipos complexos (objetos).  É possível definir parâmetros opcionais para funções, possibilitando assim o uso da função de forma mais flexível.

É possível também falarmos ao PHP que a função só pode receber o parâmetro se ele for de um determinado tipo, para garantirmos o funcionamento correto do código. No PHP 5 só é possível definirmos estes tipos para  array, classe (só é permitido o recebimento do parâmetro se ele for uma instância da classe informada) ou callables (que são outras funções) como tipos de parâmetros para as funções.

No PHP 7 foram inseridos os tipos primários também, sendo assim passamos a poder também definir os tipos int, float, string e bool para os parâmetros da função.

Veja alguns exemplos de funções:

 

 

Função com retorno

Também é possível definir para que a função retorne algum valor para o script que a chamou, na verdade toda a função, em PHP, tem um retorno implícito, quando não o definimos, a função retornará NULL.

 

No exemplo do cálculo do INSS acima, imaginemos que o valor calculado do INSS deve ser devolvido para o script que o chamou para que seja calculado o salário líquido do funcionário. Neste caso seria necessário alterarmos a função para o seguinte:

A partir do PHP 7 também é possível, assim como fizemos com os parâmetros (ou argumentos), informar qual o tipo de retorno que a função terá, os tipos de retorno para a função são os mesmos que para a definição dos parâmetros, é possível ver todos aqui.

Para definirmos o tipo do retorno da função a sintaxe é a abaixo:

 

O domínio do conceito de função é importante para a futura compreensão de alguns conceitos da programação orientada a objeto.

 

Como exercício proposto para esse post, recomendamos o desenvolvimento de uma função para realizar o cálculo do Importo de Renda Retido na Fonte, para o salário de um funcionário, esta função deve receber como argumento (parâmetro) o salário do funcionário e deve retornar o valor calculado. A regra de negócios para esta função pode ser encontrada no neste link da Receita Federal do Brasil.

 

Como de costume, a solução para o exercício proposto virá no próximo POST da série.

 

Se gostou do post, não deixe de compartilhar, pode ajudar mais alguém que esteja começando a programar.

Sobre Rodrigo Teixeira Andreotti

Técnico em Informática formado pela ETE Lauro Gomes Cursando atualmente o curso de Análise e Desenvolvimento de sistemas. Atuo como programador PHP há, pelo menos, 6 anos, sendo os dois últimos em empresas e os demais como Freelancer.

  • William Correa

    Opa, deixo apenas uma sugestão: usar PSR-1 e PSR-2 na formatação dos códigos.
    No mais, parabéns pelo conteúdo!

    • Olá Willian, cara muito obrigado pela sugestão, rapaz, estou tentando achar um code highlight decente para o WordPress, o que estou usando agora é muito bom, mas não aceita indentação, tento com espaço e nada, tento com tab e nada, tento copiar do editor de código e nada… tá osso… rs
      Se tiver alguma sugestão, será bem vinda, estou quase abandonando esses editores de código e embbedando o gist

      • William Correa

        Minha sugestão seria o gist mesmo, uso no Medium (medium.com/@wilcorrea) e atende bem. O problema é ter que criar um gist pra cada exemplo, se conseguir fazer o highlight com esse dai pode ser mais prático ; )

        • Cara… Valeu mesmoca sugestão, e mano! Passei lá no seu medium e já vi alguns pots que terei de ler mais a fundo… Kkk
          Parabéns pelo conteúdo de lá está muito bom!