Olá e bem-vindo.
Estamos iniciando uma nova seção.
Nossa seção é baseada em funções.
Então, vamos falar sobre alguns dos fundamentos das funções primeiro.
Uma função é independente unidade de código do programa
projetada para realizar uma tarefa específica, essa é uma definição de alto nível.
A função será basicamente algo que você pode invocar e que
ajuda a reduzir a duplicação de código.
Mas o que isso faz é
autocontido dentro do próprio código, e tem apenas algumas tarefas que vai realizar.
As regras de sintaxe vão definir a estrutura de uma
função e como ela pode ser usada.
Então, dependendo de qual programação linguagem que você usa, as funções
podem ser definidas de forma diferente.
Para c, vamos conversar sobre regras específicas para c.
A maioria das linguagens de programação suporta este conceito de função, e direi as
vantagens e por que eles são suportados.
Uma função em c é a mesma que sub-rotinas ou procedimentos em
outras linguagens de programação.
Então, muitas vezes você ouve estes termos sub-rotinas e procedimentos, a mesma
coisa que uma função.
Unidade independente que executa algum código, que você pode chamar.
Algumas funções causam um ação a ocorrer.
Então, estamos familiarizados com alguns funções até este ponto.
Nós estudamos o printf função que exibe a saída
para sua tela que leva um ação, faz algo por você.
E então o resultado também olhamos na função scanf que
recebe entrada do teclado.
Novamente, ele faz outra ação.
Outras funções embora pode, na verdade, apenas encontrar um
valor para um programa usar.
Por exemplo, quando estudamos cordas e matrizes de caracteres, vamos dar uma olhada
nas funções para strings manipulação e mudança de coisas.
Há uma função em particular chamado de comprimento de agitação e isso dirá
a um programador como longa uma certa string.
Ele não executa uma ação apenas devolve as informações para você.
Então, as funções vão realizar tarefas, dependendo da tarefa que você
precisa realizar em seu programa,
ele causará uma ação ou modificará um valor do programa ou retornar um valor ou fornecer algumas
informações de status.
Vantagens de funções.
Vamos usar funções porque tem uma tonelada de vantagens.
Funções permitem o estratégia de dividir e conquistar.
Então, se você fosse escrever e vá e escreva um programa
de médio ou grande programa, ele vai ser muito, muito difícil de manter.
Vai ser difícil testar, depure e encontre e corrija quaisquer erros se você tiver
uma única função grande.
Então quebrar e fazer isso dividir a estratégia de
conquista tornará muito mais fácil encontre e corrija bugs em seu código.
E você pode imaginar um único programa c que tudo que eu tinha era a função
principal e havia 5000 linhas nela.
Não teríamos ideia de como para atacar esse problema.
É uma organização muito, muito pobre.
Você não está tendo nenhuma coesão e você está apenas mergulhando ali para
tentar resolver um problema.
Então, vamos usar funções.
Dividir e conquistar significa basicamente essas tarefas podem ser divididas em
várias subtarefas independentes.
Isso reduz o total complexidade do código.
Você pode criar funções separadas para cada subtarefa, e então você
pode até mesmo criar mais funções para dividir a subtarefa em subtarefas menores.
Cada vez que você cria esses funções, reduz a complexidade.
Seu objetivo deve ser quando você está criando
essas funções e usando o dividir e conquistar estratégia é tornar
suas funções o mais coesas possível.
E o que isso significa é ter certeza cada função está fazendo apenas uma tarefa, não tem uma
função, faça 5 tarefas diferentes ou 10 tarefas diferentes.
Se você escrever uma função que leia entrada do teclado, leia a
entrada do teclado, não faça com que ele verifique uma string ou uma saída de
exibição ou qualquer coisa assim.
As funções precisam ser pequenas e eles precisam ser muito coesos.
Mas dividir e conquistar a estratégia é muito boa
porque reduz essa complexidade.
Em vez de ter uma função principal com 5000 linhas de código, você
pode ter muitas, muitas funções que estão realizando tarefas específicas e
você pode identificá-los muito rapidamente.
Então, as funções vão reduzir a duplicação de código.
E quando você reduz a duplicação de código, vai economizar
tempo ao escrever, testar e depurar esse código.
Também vai reduzir novamente o tamanho do código-fonte.
E por que as funções reduzem duplicação de código porque
se você tiver uma tarefa em vez de fazer isso tarefa repetidamente e
escrevendo o mesmo código repetidamente e mais uma vez, você encapsula essa tarefa
em uma função e você apenas invocar a função, e a função fará isso
para você cada vez que você não tem nenhuma duplicação lá.
Se você tem que fazer uma determinada tarefa várias
vezes em um programa, você só precisa escrever um apropriado funcionar
uma vez, como mencionei. Você não precisa escrever esse código várias vezes.
Assim, um programa pode usar essa função sempre que necessário.
E você também pode usar o mesmo funcionar em diferentes programas, e é
isso que constitui uma biblioteca.
Temos feito isso, estamos usando a
função printf, que vem do biblioteca de entrada e saída padrão.
E isso é escrito apenas uma vez, e nós o invocamos continuamente.
Se essa função não existisse, nós temos que
pegar a implementação dessa função e colocá-la em nosso programa e apenas continue repetindo.
Portanto, as funções podem economizar muito de
tempo e eles podem reduzir seu código-fonte e você pode reutilize-os continuamente.
Portanto, também é um software técnica de reutilização.
Também ajuda na legibilidade.
Quando você moduliza seu programa que é o que você
está fazendo quando cria essas funções separadas para realizar tarefas específicas, o programa
fica muito mais bem organizado.
Como mencionei, se você tivesse um rotina, uma função principal e tinha
toneladas de código, vai ser muito mais difícil de seguir do
que uma rotina principal que chama 5 funções e essas funções executam tarefas específicas.
Portanto, ajuda na organização do programa.
Ajuda na manutenção do programa.
É muito mais fácil de ler e mais fácil para alterar ou corrigir qualquer código-fonte.
E lembre-se, a manutenção fase é a fase mais cara do ciclo
de vida do software, esta é onde você está corrigindo
seus bugs, o programa foi lançado e onde você está adicionando novos recursos.
Quanto melhor organizado seu é, mais
fácil será mantê-lo.
Portanto, esta organização, esta legibilidade, sendo capaz de seguir o que
está acontecendo em seu código-fonte é muito importante e
as funções ajudam muito.
A abordagem de dividir para conquistar também permite
que partes do programa sejam desenvolvidas, testadas e depurado de forma independente.
Quando você sai lá na vida real mundo e
começar a trabalhar no código, você vai notar que programas são muito, muito grandes.
E tem muita gente trabalhando nesses programas,
centenas, talvez até milhares.
Quando você tem todas essas pessoas trabalhando em um programa, é muito mais fácil
trabalhar nesse programa se você faça esta abordagem de conquista de divisão se você
tiver pequenas tarefas que as pessoas fazem e é independente.
Você não está tocando o mesmo código-fonte e você pode seguir em frente
e implementar tarefas com muito mais facilidade.
E quando você faz isso e você tem várias pessoas trabalhando em um
projeto, pode reduzir o desenvolvimento geral tempo que mais uma vez reduz os
custos de manutenção, reduz os custos de desenvolvimento.
As funções também podem ser reutilizadas o que mais uma vez reduzirá o tempo.
E novamente fazemos isso com o função printf, reutilize isso.
Mas você, quando escreve seu próprio usuário funções definidas, você pode
reutilizá-las indefinidamente no programa.
Portanto, a reutilização de software é um grande, grande vantagem das funções.
Quando você está pensando sobre essas funções.
A outra coisa boa sobre o design seu programa de funções é que você quer
pensar nele como uma caixa preta.
O que significa quando você quando você pense nisso como uma caixa preta, tudo o
que você pensa é a entrada para a função e a saída.
E quando você se concentra apenas no entrada na saída, permite que você olhe
para o design como um todo antes de iniciar a implementação.
E assim as funções em geral irão colocá-lo neste tipo de pensamento em que você
pode se concentrar no design.
E mencionei que o design é importante.
Design é quando você começa a planejar fora do seu programa, como
você vai organizá-lo, como você vai escrever o código.
E é importante fazer esse planejamento antes mesmo de iniciar a implementação que está
escrevendo o código.
E pensando sobre funções e pensando apenas em entradas e
saídas, você pode pensar em como o o programa será organizado e quais
funções você precisa criar.
Então você não precisa se preocupar apenas implementação nos detalhes.
E isso é importante porque o a primeira coisa que você
quer fazer antes de escrever o código é apenas pensar sobre design, você não quer começar
a pensar em implementação.
Muitos problemas que os alunos quando escrevem o código pela
primeira vez, apenas comece a implementação.
Eles nem mesmo pensam sobre o problema, eles não
pensam como vão resolver o problema, eles apenas começam a escrever código.
Nunca é uma boa abordagem.
Quando você está pensando em escrever código e funções, pense
nisso apenas como entradas e saídas da função e vai ajudá-lo
com o seu design.
Então, vamos ver alguns exemplos.
Usamos funções integradas, como como printf e scanf, como mencionei.
Esses estão no padrão biblioteca de entrada e saída fornecida pela
linguagem de programação c.
Então, estamos um pouco familiarizados com o que uma função é porque a
usamos, mas não passamos pelo bom detalhes granulados de como
você define uma função ou como você realmente passa dados para uma função, nada disso.
Mas com a função printf, você deve ter
notado que ele leva dados.
Você pode passar dados para a função.
Os dados são os argumentos entre os parênteses após
o nome da função.
Vamos ter um todo outra palestra sobre
argumentos e parâmetros para explicá-los mais.
Mas, em um alto nível, entenda que você pode passar dados para uma função.
E entenda isso olhando na função printf.
O primeiro argumento para o printf função que são os
dados que estamos passando para ela era uma string literal, era tudo isso todos
aqueles caracteres dentro de aspas duplas.
E então também tivemos argumentos que poderia haver 0 ou muitos argumentos variáveis,
que eram uma série de variáveis ou expressões cujos valores
deveriam ser exibidos.
Então lembre-se, se tivéssemos algum formato especificadores no primeiro
argumento, teríamos então as variáveis em isso nos argumentos subsequentes.
Então você foi capaz de passar dados para a função printf.
Você também deve ter notado como você pode receber informações de uma função,
os dados podem ser devolvidos a você.
Na função scanf, um dos argumentos era como você iria armazenar
os dados.
E então você passaria um variável e essa variável teria um
valor qualquer o usuário digitou no teclado.
Então isso pode ser pensado como um valor de retorno em uma função.
Portanto, as funções são muito valiosas porque eles podem levar dados para eles e, em
seguida, eles podem retornar dados deles.
Portanto, um exemplo de codificação de uma função e esta seria apenas uma função que
vamos invocar, mas esta é a função principal.
Estamos familiarizados com o funções principais, o ponto
de entrada do programa.
Mas veja como isso é bom.
Estamos chamando funções leia a classificação e a média da lista.
Temos apenas 3 linhas de código.
Temos que ir e implementar esses funções, mas torna o programa mais organizado
porque imediatamente sabe o que este programa está fazendo.
Este programa vai ler uma lista, ele vai
classificar uma lista, vai então exibe a média da lista, e
a lista contém flutuações.
Então é muito legível, vai para ser muito fácil de manter.
Se tivermos algum bug no programa, saberemos imediatamente como encontrar
ou isolar esse bug.
Se o bug não está classificando, nós pode ir para a função de classificação.
Se o bug está na média, podemos ir para a função média, muito
fácil de isolar os erros.
Então, quando implementamos esses funções no slide anterior,
estávamos apenas chamando-as.
Para realmente implementar funções, você tem que escrever o código dentro
do corpo da função.
Você pode utilizar funções que são implementados pela linguagem c como printf
ou você pode criar suas próprias funções definidas pelo usuário.
Você não tem que implementar o funções printf ou
qualquer uma das funções da biblioteca, você apenas implemente suas próprias funções.
Então, neste exemplo anterior com a classificação da lista de leitura e a média,
teríamos que ir e tem que implementar essa função.
Teríamos que fornecer uma função cabeçalho, um corpo de função que realmente
faz a leitura de a lista, a classificação
da lista e a média da lista.
Não terminamos apenas definindo funções, temos que implementá-los.
E quando você implementa o funções, você
sempre deseja usar nomes de função descritivos para deixar claro o que o programa
faz e como é organizado.
No exemplo anterior, tínhamos um função chamada lista de leitura, muito claro o que está
fazendo, classificação de nome de função.
Não nomeamos a função x y ou z.
Descrevemos essa função.
É a mesma coisa quando você está descrevendo
ou criando variáveis, nomes significativos.
E também se você fizer essas funções onde são genéricos o
suficiente para realmente fazer algo e eles estão pegando dados genéricos, você
realmente seria capaz de reutilize-os em outros programas, como
uma função de biblioteca.
Novamente, apoiando a reutilização de software.
Então, nessas próximas palestras, vamos falar sobre como
podemos definir uma função, o sintaxe específica, como podemos invocar e
chamar uma função e como podemos passar e retornar dados deles.
É nisso que vamos focar nas próximas palestras.
Eu também queria mencionar que nossa rotina principal
que vimos repetidamente em cada programa c, essa é uma função.
A função principal é especialmente nome reconhecido no sistema
c, indica onde o programa é para começar a execução.
Todos os programas c sempre têm um principal.
A função principal pode levar dados quando você passa para
ele, os argumentos da linha de comando ou não tem que pegar dados.
Também tem opcional dados que ele pode retornar.
Você notará que usamos funções principais que retornam 0.
Normalmente, é usado quando você deseja retornar códigos de erro.
Mas usamos funções específicas já e a função mais
importante é essa função principal e isso novamente ajuda a organizar o código.
Sempre sabemos onde o programa está começando porque só
temos que encontrar o principal.
Esta é uma descrição de alto nível de funções meio que identificando as vantagens
das funções e o que exatamente é uma função.
Agora queremos conversar sobre a implementação.
Obrigada.