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

2º Bate Papo do SP-GTUG - Divulgação

Pessoal, Para aqueles que já estiveram presentes nas atividades do SP-GTUG (encontros ou bate papos na Globalcode), e para os que ainda não puderam estar presentes, teremos um novo bate papo acerca de mais duas tecnologias do Google: AdSense e Python no GAE. Este será o nosso segundo bate papo do SP-GTUG, nos mesmos moldes dos minicursos da Globalcode . Local e data O bate papo acontecerá no dia 27/03/10, das 10:00 às 13:00 na Globalcode. Para fazer sua inscrição e participar acesse a home da Globalcode e vá até a parte de "Minicursos Gratuitos da Semana ". Conteúdo das apresentações Abaixo seguem as descrições passadas pelos palestrantes: Título: "Algoritmos em Python" Resumo: Python é uma linguagem considerada frugal, simples, sem ser simplória! Entenda como construir algoritmos ninjas com essa linguagem, adotada pela Google e pelo MIT. Veremos muito, muito código, desde algoritmos clássicos até tutoriais do

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

JSF 2 - Composite Components, você não precisa mais ser um ninja

Estamos em uma nova era da computação, os dados não estão mais localizados em um banco dentro de sua empresa, vivemos a explosão de redes sociais, informações são geradas a todo instante, e se torna essencial que sua aplicação conheça os serviços disponíveis na web e consumam suas APIs geralmente disponíveis por serviços REST. Legal, mas como ficam meus aplicativos Java EE neste novo cenário? Para quem vem acompanhando a evolução da plataforma, é notório que todo esforço vem sendo utilizado para aumentar a produtividade e a integração com novos serviços. Basicamente duas especificações surgem com muita força para atender este cenário, a JSR - 314 (JSF-2) e JSR - 311 (JAX-RS), neste post exploraremos a JSR-314 (JSF2) e sua nova forma de criar Composite Components. Uma das grandes queixas dos desenvolvedores JSF era a complexidade em criar composite components, era necessário um vasto conhecimento sobre o ciclo de vida de uma aplicação JSF. Agora, você não precisa ser mais um “ninja” em

Gosta de informática e sonha ser programador Java um dia ?

A Globalcode está procurando jovens que queiram ser programadores no futuro, para fazer parte de sua equipe de vendas e operacional na unidade Paraíso em São Paulo somente. O grande diferencial é o planejamento para carreira de programador. O planejamento de cursos do portifólio da Globalcode: Academia do Programador, Academia Java, Academia Web, Robótica, Eletrônica, etc, será realizado periodicamente de acordo com o desempenho e interesse individual. Atenção : Este não é um estágio para trabalhar com Java, são duas vagas CLT administrativas para pessoas que queiram ser programadores no futuro. Perfil : Conhecimentos de informática básica, saber lidar com pessoas e trabalhar em equipe. Deve ter concluído o ensino médio, ter boa escrita, ser organizado, responsável, comprometido e dinâmico. Interesse por computação, programação, internet, robótica, eletrônica,... Temos duas vagas para jovem-aprendiz abertas: 1) Setor operacional No dia a dia Serviços externos Controle de estoqu

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

TDC INNOVATION lança University Pass

Modalidade de ingresso tem como objetivo ajudar na capacitação dos universitários Uma pesquisa realizada em 2020 pela Associação Brasileira das Empresas de Tecnologia da Informação e Comunicação (Brasscom) diz que até o ano de 2024 o Brasil precisará de cerca de 420 mil profissionais na área de Tecnologia da Informação. Porém, por ano, a mesma pesquisa diz que o país forma apenas 46 mil profissionais capacitados no nicho. Pensando nisso, para ajudar na formação e capacitação desses jovens profissionais, o TDC INNOVATION, segunda edição do ano do The Developer's Conference, lança o University Pass, modalidade de ingresso que possibilita aceso digital gratuito a todas as palestras do evento, ou com 50% de desconto para quem preferir ir pessoalmente. Com o tema central “Desafios para a criação do futuro Digital”, o TDC INNOVATION ocorrerá entre 1 e 3 de junho, de forma híbrida: presencialmente no Centro de Convenções CentroSul, em Florianópolis, e com transmissão simultaneamente pela