Pular para o conteúdo principal

Aprendendo a programar: procedimentos e funções

Retomando aquela introdução ao desenvolvimento de programas de computador (veja os dois posts listados a seguir), hoje vou falar um pouquinho sobre a criação de procedimentos e funções, que são recursos muito importantes para a modularização do código dos programas.

Para quem não leu os posts anteriores, vale a pena dar uma olhada antes de seguir na leitura deste post:

Resumindo o que foi falado nos posts anteriores, podemos dizer que um programa de computador nada mais é do que um conjunto de instruções, logicamente organizadas e escritas usando a sintaxe de uma linguagem de programação em particular, cujo propósito é ser executado sobre o sistema operacional com o objetivo de resolver problemas de forma automatizada pelo computador.

Dentre as instruções utilizadas na lógica do programa, podemos fazer desde a simples declaração de variáveis e atribuições de valores, até a resolução de expressões matemáticas, entrada e saída de dados e a definição de estruturas mais complexas, por exemplo usando recursos de condições e laços e, também, recursos específicos da linguagem de programação utilizada.

Independente das instruções utilizadas, a forma como organizamos o código do nosso programa é importante para aumentarmos as possibilidades de reuso e reduzirmos as complexidades de manutenção. Para isso podemos usar a técnica de modularização.

Modularizar significa quebrar em módulos, o que em termos mais técnicos , quer dizer criar procedimentos e funções.

Procedimentos e funções

Um aspecto muito comum nos programas é que frequentemente escrevemos trechos de código (várias instruções) que se repetem ao longo da lógica que estabelecemos.

Por exemplo, se quisermos calcular a média aritmética das provas de um aluno, temos que somar a nota da primeira prova com a nota da segunda prova e dividir por 2. Se tivermos mais de um aluno, temos que repetir esse cálculo para cada aluno. Logicamente, a forma mais simples de fazer isso é fazendo o famoso "copy and paste": para cada aluno, colocamos a regra para fazer o cálculo e impressão da média das notas.

Com o "copy and paste" conseguimos resolver o problema da repetição, mas será que foi a melhor escolha? E se tivermos 100 alunos? E se após termos escrito o programa todo, alguém nos disser que eram 3 provas? Em ambos os casos teremos um bom trabalho para ajustar o o código do programa.

Diante disso, podemos afirmar que a repetição de trechos de código dentro de um programa é considerada uma prática muito ruim. Mas será que é possível fazer diferente? A resposta é a criação de procedimentos e funções.

As instruções que precisam ser repetidas em vários locais do código devem ser isoladas em um bloco de código do programa que recebe um nome (cada linguagem estabelece a forma para delimitar esse bloco). Quando precisarmos executar aquelas instruções repetidas vezes, basta invocar o nome do bloco de código que as contém. A esse bloco de código é que chamamos de procedimentos ou funções (diferenciaremos os dois termos mais adiante).

Um programa pode ser constituído de vários procedimentos e funções e um bloco de código principal, chamado geralmente de programa principal ou bloco principal.

Ao isolarmos a regra que será repetida, escrevemos-a uma única vez dentro do procedimento ou função. E podemos chamá-la quantas vezes for necessário, tanto dentro do programa principal, quanto dentro de outros procedimentos e funções. Se errarmos na regra, ou se ela mudar com o tempo, basta fazer o ajuste no único local do código onde ela existe: dentro do procedimento ou função.

Veja o exemplo a seguir para visualizar como seria um procedimento em algoritmo estruturado.


Passagem de parâmetros


Um procedimento ou função pode receber parâmetros que carregam os dados que devem ser manipulados pelas suas instruções internas. Um parâmetro é uma variável definida no corpo do procedimento ou função que recebe um valor apenas quando o bloco é chamado.

Para tornar o exemplo da figura anterior mais interessante, podemos declarar variáveis no corpo do programa principal e passar o valor dessas variáveis para dentro do procedimento por meio de parâmetros. Veja a figura a seguir.



Repare que agora, o procedimento define 2 parâmetros: n1 e n2. Tais parâmetros recebem valores quando são chamados no programa principal. As variáveis nota1 e nota2 são usadas nas duas primeiras chamadas ao procedimento: o valor de nota1 é copiado para n1 e o valor de nota2 é copiado para n2. A regra programada dentro do procedimento é então executada com base nos valores dos parâmetros n1 e n2. A terceira chamada ao procedimento ilustra que também podemos passar valores para os parâmetros diretamente.

Procedimentos x funções

A diferença entre procedimentos e funções é unicamente no retorno do bloco de código: funções retornam valores após a execução da sua lista de instruções, procedimentos não.

Para facilitar o entendimento, vamos ver o exemplo a seguir.


Agora criamos uma função que calcula a média das notas com base nos parâmetros recebidos, e devolve o valor da média ao invés de fazer a impressão. A função deve ser definida usando o tipo de retorno que ela irá fornecer (no caso do exemplo, valor de tipo real) além dos parâmetros que são opcionais. Dentro do bloco da função, devemos usar uma instrução que indique o valor que será retornado (nas linguagens geralmente a palavra é return para retornar um valor). No algoritmo, a representação usada é de que o nome da função recebe um valor... isso quer dizer que quando chamarmos essa função podemos atribuí-la a uma variável de tipo real, pois ela irá conter um valor de resposta.

Linguagens orientadas a objetos

Nas linguagens que seguem o paradigma da orientação a objetos, não há diferenciação entre procedimentos e funções. Todos os blocos de código são chamados de métodos, inclusive o programa principal, que é o método principal (geralmente nomeado com a palavra main).

Conclusões

Considerando minha experiência de alguns anos ministrando treinamentos da Globalcode, e em especial a Academia Java, eu posso dizer que o pré-requisito fundamental para uma pessoa ingressar no desenvolvimento com uma linguagem de programação orientada a objetos, como é o caso de Java, é ter todos os conceitos que citei nesses três posts sobre programação muito bem fundamentados.

É necessário entender perfeitamente como funcionam os programas: código-fonte, linguagem de programação, compilação e execução. É preciso saber usar os vários tipos de instruções que um programa pode conter, incluindo principalmente instruções de uso de variáveis, condições e laços. E para organizar e facilitar a escrita de código, é preciso entender como funcionam os procedimentos, funções, passagens de parâmetros e retornos de função. Obviamente que isso não é tudo, mas para quem pensa em começar a estudar Java, por exemplo, é necessário começar por essa parte mais básica de lógica de programação.

Deixo novamente a dica de que esses e vários outros assuntos fundamentais para o iniciante em programação podem ser encontrados no treinamento Academia do Programador de forma bem mais aprofundada. Se tiver interesse, entre em contato com a Globalcode para tirar suas dúvidas.

Além disso, a Globalcode também tem minicursos gratuitos voltados para iniciantes como o MC59 - Aprendendo a programar de forma divertida e eficiente além de vários outros minicursos que variam de assuntos básicos a avançados. Vale a pena conferir a grade disponível.


Até a próxima.

Elaine Quintino Silva
http://www.globalcode.com.br/instrutores/ElaineSilva
http://twitter.com/elaineqsilva

Comentários

Maria disse…
Oi,eu faço aprendizagem em programação JAVA,adoro o curso,pois ja sei programar em C e adoro também,mas eu não me dou nada bem com os métodos,o post me ajudou muito
obrigada
espero novos posts

Postagens mais visitadas deste blog

O que é Lógica de programação?

Este é o segundo de uma série de posts voltados aos leitores do blog que estão dando início à carreira de desenvolvimento de software. O assunto de hoje é a lógica de programação. Para ler antes: Entendendo como funciona a programação de computadores: linguagens de programação, lógica, banco de dados A lógica de programação é um pré-requisito para quem quer se tornar um desenvolvedor de software, independente da linguagem de programação que se pretende utilizar. Mas o que é de fato a Lógica de Programação e como saber se eu tenho esse pré-requisito? A lógica de programação nada mais é do que a organização coerente das instruções do programa para que seu objetivo seja alcançado. Para criar essa organização, instruções simples do programa, como mudar o valor de uma variável ou desenhar uma imagem na tela do computador, são interconectadas a estruturas lógicas que guiam o fluxo da execução do programa. Isso é muito próximo ao que usamos em nosso cotidiano para realizar atividad

TDC ONLINE: SUA PLATAFORMA DE PALESTRAS GRAVADAS DO TDC DISPONÍVEL

Além do conteúdo ao vivo transmitido online nas edições do TDC, agora você pode ter acesso à centenas de palestras gravadas, através da nossa nova plataforma de vídeos - o TDC Online, que reúne todas as Trilhas premium, Stadium e Salas dos Patrocinadores das edições anteriores de 2022, TDC Innovation e TDC Connections.  Para acessar, basta clicar na edição em que você participou ( TDC Innovation ou TDC Connections ); Fazer o mesmo login (com e-mail e senha) cadastrados na hora de adquirir ou resgatar o seu ingresso no TDC; E clicar na Trilha de sua opção, e de acordo com a modalidade do seu ingresso. Logo em seguida, você será direcionado para a seguinte página com a lista de todas as palestras por Trilha: Pronto! Agora você tem acesso à centenas de palestras gravadas da sua área de interesse, para assistir como e quando quiser! Caso tenha esquecido a senha, clique na opção "Esqueci a senha" , insira o e-mail que você realizou para o cadastro no evento, e aparecerá a op

Muitas vagas, otimismo e sensação de reaquecimento da economia

2010 começou cedo, contrariando a expectativa que muitos Brasileiros tem de "O ano começa mesmo depois do carnaval".  Embora o inicio do ano tenha sido "repleto" de catástrofes naturais e muita chuva aqui no Brasil, no campo profissional o otimismo está evidente, as pessoas estão cheias de energia e boas perspectivas em relação as oportunidades de JavaEE 6 e muitas outras tecnologias. Mas, parece que não são somente as pessoas que estão otimistas, os anúncios de vagas voltaram a crescer, empresas anunciando boas vagas, ou grandes quantidades de vagas, refletindo o que podemos chamar de "Otimismo corporativo" . Veja algumas empresas que anunciaram vagas: IBM SpringSource   Yahoo!  Elumini   Cyberlynxx   Google Kaizen SPC Brasil Se em 2009, um ano de crise fizemos tudo isto , imagine em 2010. E você está preparado ?  Está otimista ? []s Yara http://twitter.com/yarasenger http://twitter.com/globalcode

JavaMail: Enviando mensagem HTML com anexos

Introdução Depois do post "JavaMail: Enviando e-mail com Java" , que apresentava como enviar um e-mail com Java, resolvi complementar a assunto apresentando como enviar uma mensagem formatada, em HTML , e também como realizar o envio de anexos. Bibliotecas Além da biblioteca JavaMail, veja mais no post anterior , é necessário incluir o JavaBeans Activation Framework (JAF), apenas se a versão utilizada for anterior ao JSE 6.0 , que já tem o JAF incluso. O JAF está disponível em http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html , e neste download encontramos, alguns exemplos na pasta demo , documentação, incluindo javadocs, na pasta docs e a biblioteca activation.jar , que deve ser acrescentada no classpath da aplicação para versões anteriores ao JSE 6.0. Exemplo Primeiramente devemos realizar a configuração da javax.mail.Session e da javax.mail.internet.MimeMessage , estes passos podem ser vistos no post anterior . Agora vamos montar um

Devo fazer um curso ou ler um livro?

Acredito que todos os instrutores ou professores, independentemente da área, escola ou centro de treinamento, já devam ter recebido essa pergunta alguma vez na vida: devo fazer um curso ou ler um livro? Para responder a essa pergunta, precisamos avaliar os prós e contras de cada opção. Trabalho com treinamento há algum tempo e, hoje, recebi essa pergunta de um aluno. Não adianta responder a ou b sem argumentar, demonstrando as opções conforme a situação do aluno. O conteúdo, a forma de transmissão e a capacidade de assimilação do indivíduo são chaves para haver benefício maior de aprendizado. Tanto em um bom curso quanto em um bom livro, o conteúdo é a premissa básica . Por conteúdo entendemos: se está organizado; se respeita pré-requisitos; se promove o aprendizado guiado e incremental; se aborda de forma satisfatória os principais pontos; se tem bom balanço entre teoria, exemplos e prática (favorecendo exemplos e prática); se tem como premissa a acessibilidade possível (e cabível) pa

10 reasons why we love JSF

1. One-slide technology: it's so simple that I can explain basic JSF with one slide. 2. Easy to extend: components, listeners, render kit, Events, Controller, etc. 3. Real-world adoption: JBoss, Exadel, Oracle, IBM, ... 4. Architecture model: you can choose between more than 100 different architecture. 5. Open-mind community: using JSF you are going to meet very interesting people. 6. We are using JSF the last 5 years and we found very good market for JSF in Brazil 7. Progress: look to JSf 1.1 to JSF 1.2, JSF 1.2 to JSF 2.0. People are working really hard! 8. Many professionals now available 9. It's a standard. It's JCP. Before complain, report and help! 10. Ed Burns, spec leader, is an old Globalcode community friend! EXTRA: My wife is specialist in JSF. She's my F1 for JSF :) Nice job JSF community! -Vinicius Senger