Olá, estudante! Como passou desde o nosso último encontro? Na lição passada, você conheceu como é o funcionamento de ponteiros e alocação de memória dinâmica nas linguagem de programação C. Dando sequência ao seu estudo de programação back-end, nosso objetivo nesta lição é apresentar os conceitos fundamentais de funções e procedimentos, com o objetivo de capacitar você, técnico em desenvolvimento de sistemas, a compreender e aplicar esses conceitos em seus programas.
Você verá tópicos como compreensão de funções e procedimentos, sua forma de declaração e chamada, abordagem de procedimentos, que nada mais é do que métodos sem retorno e funções que são métodos com retorno. Irei abordar também as questões de parâmetros e argumentos, escopo das variáveis e o ganho dessas abordagens com a reutilização de código.
Ao final dessa lição, você estará familiarizado com o uso de funções e procedimentos utilizando a linguagem de programação Java, capaz de declarar e chamar essas unidades de código, entender o escopo de variáveis e usar efetivamente esses conceitos para melhorar a estrutura e a reutilização de código em seus projetos de programação.
À medida que um programa de software cresce, seu código tende a se tornar extenso e complexo. Isso pode resultar em um código desorganizado, de difícil entendimento e manutenção. Quando ocorrem erros ou é necessário fazer alterações, localizar a origem do problema e implementar as correções pode se tornar uma tarefa desafiadora e demorada.
O uso de funções e procedimentos permite quebrar o código em unidades menores e mais gerenciáveis. Cada função ou procedimento é responsável por uma tarefa específica dentro do programa. Isso oferece diversas vantagens como:
Organização: O código é dividido em módulos, cada um com sua função claramente definida. Isso torna o programa mais organizado e fácil de entender.
Reutilização: Funções e procedimentos podem ser reutilizados em diferentes partes do programa ou em outros projetos, economizando tempo e esforço de desenvolvimento.
Manutenção: Quando ocorrem erros ou é necessário fazer alterações, é mais fácil identificar e corrigir problemas em um módulo específico do que em todo o código.
Colaboração: Equipes de desenvolvimento podem trabalhar de forma mais eficaz, pois cada membro pode se concentrar em um conjunto específico de funções ou procedimentos.
O uso de funções e procedimentos no desenvolvimento de software resolve a problemática de código desorganizado e difícil de manter. Ao dividir o código em unidades menores e coesas, os desenvolvedores podem criar programas mais eficientes, organizados e de fácil manutenção, tornando o processo de desenvolvimento de software mais produtivo e menos propenso a erros.
No case fictício da lição de hoje você conhecerá a equipe de desenvolvedores de software que foi encarregada de criar um sistema de gestão de biblioteca para uma biblioteca universitária de grande porte. A equipe enfrentou uma série de desafios comuns ao desenvolver um sistema tão complexo, mas o uso de funções e procedimentos desempenhou um papel fundamental na resolução desses desafios.
O sistema de gestão de biblioteca precisava rastrear informações detalhadas sobre milhares de livros e usuários. Isso incluía detalhes como títulos, autores, datas de empréstimo e devolução, histórico de empréstimos de usuários e muito mais. A equipe criou funções dedicadas para cada tipo de operação de manipulação de dados, como adicionar um novo livro, registrar um empréstimo, atualizar o status de um livro e gerar relatórios de empréstimos. Cada função tinha uma responsabilidade clara e podia ser reutilizada sempre que necessário. Isso permitiu um gerenciamento eficiente e organizado dos dados.
No final, o sistema de gestão de biblioteca foi um sucesso devido à abordagem de desenvolvimento organizada e modular da equipe. O uso de funções e procedimentos não apenas facilitou a implementação, mas também tornou o sistema mais flexível, manutenível e escalável. A equipe conseguiu atender às necessidades da biblioteca de forma eficaz, proporcionando uma experiência de gerenciamento de biblioteca eficiente e intuitiva para os funcionários.
Funções e procedimentos são unidades fundamentais de código em programação que permitem dividir um programa em partes menores e mais gerenciáveis. Ambos desempenham um papel importante na organização e modularização do código, tornando-o mais eficiente e fácil de manter, por isso, vamos conhecê-las separadamente a seguir:
É um bloco de código que realiza uma tarefa específica e pode retornar um valor como resultado dessa tarefa. As funções são usadas quando você deseja executar uma operação e obter um resultado específico em resposta. Schildt (1996) diz que uma função pode ou não ter parâmetros, nesse caso a lista de parâmetros é vazia. No entanto, mesmo que não existam parâmetros, os parênteses ainda são necessários em sua declaração e chamada. As principais características das funções são:
Retorno de valor: Podem retornar um valor após a execução, que pode ser usado em cálculos ou atribuições. Schildt (1996) diz que todas as funções devolvem um valor. Especificamente pelo comando return.
Parâmetros: Podem aceitar parâmetros (também chamados de argumentos) que fornecem informações necessárias para a execução da tarefa.
Reutilização: Podem ser chamadas várias vezes em diferentes partes de um programa, promovendo a reutilização de código.
Exemplo: Uma função que calcula a soma de dois números inteiros e retorna o resultado. A chamada dessa função pode ser como segue: resultado = somar(5, 3);
Também conhecido como método em algumas linguagens, é um bloco de código que executa uma tarefa específica, mas não retorna um valor como resultado. Os procedimentos são usados quando você deseja realizar uma ação sem a necessidade de um resultado específico. As principais características dos procedimentos são:
Sem retorno: não retornam valores; eles simplesmente realizam uma ação.
Parâmetros: podem aceitar parâmetros para executar a ação com base nas informações fornecidas.
Reutilização: também podem ser chamados várias vezes em diferentes partes de um programa para realizar a mesma ação.
Exemplo: Um procedimento que exibe uma mensagem de boas-vindas na tela. A chamada desse procedimento pode ser como segue: exibirMensagemDeBoasVindas();
Em Java, você declara funções (métodos que retornam um valor) e procedimentos (métodos que não retornam um valor) dentro de uma classe. A seguir, teremos algumas imagens mostrando alguns exemplos, acompanhe:
A figura 1 mostra a declaração de função em Java:
Na figura 02, temos uma declaração de procedimento em Java (métodos que não retornam um valor):
Na figura 03, temos um exemplo real de uma declaração de uma função em Java:
Na figura 04, temos um exemplo real de uma declaração de um procedimento em Java:
Depois de declarar uma função ou procedimento em uma classe, você pode chamá-los em outras partes do seu código Java para executar as ações desejadas ou obter resultados específicos.
Em Java, você pode chamar funções (métodos que retornam valores) e procedimentos (métodos que não retornam valores) de maneira semelhante. Observe a figura 05 e veja um exemplo de chamada de uma função em Java:
Veja que na figura 05 foram declarados uma função (soma) e um procedimento (exibeSoma) como você já havia visto há alguns itens anteriores. Porém, agora, na figura 6, você poderá entender como é feita as chamadas de ambos:
Observe que na linha 5 da figura 06 você pode ver a chamada da função soma que simplesmente retorna o valor inteiro de uma soma de dois números inteiros (vide Figura 5) e na linha 7 da figura 06 já temos a chamada o procedimento exibeSoma(2, 2) que não só soma os dois valores inteiros como já os imprime na tela (vide Figura 5).
Refere-se à parte do programa onde uma variável pode ser acessada e usada. Quando você usa funções e procedimentos, geralmente ocorre a definição de escopos distintos para as variáveis. Desta forma, o escopo pode ser local ou global:
Escopo local: Variáveis definidas dentro de uma função ou procedimento têm um escopo local, o que significa que elas só podem ser acessadas dentro da função onde foram declaradas. Elas são temporárias e não são visíveis fora da função.
Escopo global: Variáveis definidas fora de qualquer função ou procedimento têm um escopo global. Elas podem ser acessadas e modificadas de qualquer lugar do código, incluindo dentro de funções e procedimentos. Elas geralmente têm uma vida útil mais longa e são úteis quando se precisa compartilhar informações entre diferentes partes do código.
É um conceito fundamental na programação que se torna especialmente poderoso quando utilizamos funções e procedimentos. A reutilização de código se refere à prática de escrever uma vez um trecho de código que realiza uma tarefa específica e, em seguida, utilizá-lo várias vezes em diferentes partes de um programa ou em programas diferentes. Isso economiza tempo e esforço, pois evita a necessidade de reescrever o mesmo código repetidamente.
Quando você usa funções e procedimentos, é possível encapsular tarefas comuns em blocos de código reutilizáveis, tornando nossos programas mais eficientes, fáceis de manter e menos propensos a erros, já que qualquer correção ou melhoria pode ser feita em um único lugar, refletindo em todas as chamadas deste código. Isso promove a modularização, organização e escalabilidade do código, tornando-o mais legível e flexível.
Ao usar funções e procedimentos, é importante entender a diferença entre passagem por valor e passagem por referência. Schildt (1996) apresenta que na passagem por valor, os valores dos argumentos são copiados para os parâmetros da função, de modo que as alterações feitas dentro da função não afetam as variáveis originais fora dela. Já na passagem por referência, um ponteiro ou referência da variável original é passado para a função, permitindo que as alterações dentro da função se reflitam nas variáveis originais. Entender esses dois conceitos é muito importante para controlar como os dados são compartilhados e manipulados em funções e procedimentos, influenciando o comportamento do programa.
Funções e procedimentos permitem a modularização e organização eficiente do código. Ao dividir a lógica do programa em funções e procedimentos, você, técnico em desenvolvimento de sistemas, pode encapsular tarefas específicas e reutilizá-las em diferentes partes do sistema. Isso promove a manutenção do código, tornando-o mais legível, escalável e fácil de depurar.
Agora que você já conhece o que são funções e procedimentos usando a linguagem de programação Java, chegou a hora de implementá-los na prática para consolidar o entendimento e a necessidade do uso de tais recursos. Para isso, siga o passo a passo a seguir para a implementação:
Abra seu navegador web e acesse o site OnlineGDB (https://www.onlinegdb.com/).
Escolha a linguagem de programação que deseja usar. Selecione “Java” na lista suspensa.
No editor de código, você pode escrever o código Java com implementação de funções e procedimentos conforme a Figura 07.
Seguem algumas explicações sobre o código da Figura 07:
Linhas 1: Declaração da classe Main em java.
Linhas 3 a 5: Declaração da função somar() que recebe dois parâmetros do tipo inteiro chamados respectivamente de a e b e retorna sua soma.
Linhas 7 a 9: Declaração do procedimento exibeMensagemDeBoasVindas() que imprime no console a mensagem Bem-vindo(a) a lição 12!
Linhas 11 a 16: Declaração do procedimento main() da linguagem java que realmente executa todo o código.
Linhas 12 e 13: Chamada da função somar() e impressão do resultado juntamente com o texto A soma é: 8.
Linha 15: Chamada do procedimento exibeMensagemDeBoasVindas().
Linha 17: Fechamento da classe Main.
Observe que temos um detalhe que ainda não foi explicado ao longo de nossas lições, que é a palavra static usada nas linhas 3 e 7. Essa palavra significa que tais funções e procedimentos são de uso da própria classe não precisando então que exista uma instância de objeto para poder usá-las.
Siga os passos deste item e veja você mesmo como é o funcionamento destes detalhes e de outros conceitos abordados e implementados neste arquivo!
SCHILDT, H. C Completo e total. 3. São Paulo: ed. Makron Books, 1996.