Introdução à computação 5

Funções

É frequente ocorrer a repetição de trechos de procedimentos. Quando tais trechos formam uma unidade conceitual eles podem ser encapsulados numa função.

Uma função é um grupo auto-suficiente de comandos com integridade conceitual e  que efetuam uma determinada tarefa. Ou seja, uma função efetua uma determinada computação bem definida.

Funções podem receber dados externos e tambem podem retornar valores, resultantes de sua computação.

Uma vantagem óbvia de usar funções em procedimentos é economizar (muito) trabalho evitando reescrever seu código no próprio procedimento.

Uma vantagem mais sutil é a criação de procedimentos mais claros e portanto mais fáceis de verificar quanto à sua corretude.

Vejamos logo um exemplo:

Um diretório D contém diversos tipos de arquivos. É pedido contar o número total de letras 'a' em arquivos do tipo texto (.txt)

Já vimos antes  um procedimento parecido, só que bastava contar o número de arquivos texto. Eis seu texto:
contagem = 0
para cada arquivo A em D:
        se sufixo de A for ".txt":
                contagem = contagem + 1
imprima(contagem)

Imagine que temos uma função que recebe o nome de um arquivo e retorna o número de  ocorrências da letra 'a'. Vamos chamar esta função de "conta_letra(nome)", onde nome é o nome do arquivo cujas letras "a" queremos contar. Por exemplo, se o arquivo de nome "prosa.txt" tem 17 ocorrências da letra 'a', então usar a função para contar estas letras seria feito desta forma:

numero = conta_letra('prosa.txt')

Após executar este comando a variável numero teria o valor 17.

Dispondo desta função conta_letra o procedimento seria modificado assim:



contagem = 0
para cada arquivo A em D:
        se sufixo de A for ".txt":
                contagem = contagem + conta_letra(A)
imprima(contagem)

Beleza, agora só falta definir a função  conta_letra. Como você o faria? 
Eis aqui uma maneira:

define conta_letra(nome):
        Abre o arquivo nome
        Lê o conteudo do arquivo na variável texto
        numero = 0
        para cada letra L em texto:
                se L == 'a':
                        numero = numero + 1
        fecha o arquivo nome
        retorna numero


E isto resolve o problema.  

Poderiamos tornar o procedimento mais geral fazendo a função aceitar na entrada qual letra deve ser contada. 

define conta_letra(nome, letra_alvo):
        Abre o arquivo nome
        Lê o conteudo do arquivo na variável texto
        numero = 0
        para cada letra L em texto:
                se L == letra_alvo:
                        numero = numero + 1
        fecha o arquivo nome
        retorna numero

 Claro que o procedimento também precisa ligeira alteração:

Leia qual letra deve ser contada na variavel letra
contagem = 0
para cada arquivo A em D:
        se sufixo de A for ".txt":
                contagem = contagem + conta_letra(A, letra)
imprima(contagem)

Escrever funções úteis visando sua futura utilização em outros procedimentos é marca de programador experiente. Tais funções podem ser agrupadas em arquivos formando módulos para uso em procedimentos. Por sua vez tais módulos podem ser agrupados em bibliotecas, mas veremos estas coisas bem mais adiante.

Por enquanto é isso aí, até a próxima página.

 

No comments:

Post a Comment