Olá e bem-vindo.
Nesta palestra, eu quero falar sobre como retornar dados de funções.
Até este ponto, nós sabemos o que uma função é que sabemos por que ela
é útil, sabemos como definir funções que saber como passar dados para funções.
Agora queremos falar sobre como nós pode retornar dados de funções, o
que também é muito útil.
Em nosso exemplo anterior, quando nós multiplique dois números, uma função multiplicar
exibia os resultados de o cálculo no terminal.
Lembre-se, nós tínhamos isso declaração printf lá.
Além disso, tivemos um exemplo em que eram apenas uma função simples anteriormente.
Acabamos de imprimir os dados dentro da função.
Queríamos ser bons em vez de trazê-lo para fora porque
ele está realmente fazendo mais de uma coisa
Na verdade, imprimiu, o dados foram retornados e imprimiu
os dados na função principal.
Você pode nem sempre querer ter o resultados seus cálculos exibidos.
A função se torna mais flexível, mais genérico que por
sua vez permite que seja usado mais se você puder retornar dados.
Assim, as funções podem retornar dados usando sintaxe específica em c.
Devemos estar familiarizados com isso um pouco porque
lembre-se da nossa função principal no momento final, estamos retornando dados um pouco
em muitos dos exemplos.
Então, fomos um pouco expostos a isso.
Nós apenas não temos realmente entendeu o que isso significa.
Vamos dar uma outra olhada no forma geral de uma função.
Lembre-se, este cabeçalho de função.
Tínhamos um tipo de retorno que era a palavra que foi definida pela primeira vez.
E então tivemos o nome, e então tínhamos os parâmetros separados por
vírgulas entre parênteses.
Nós já conhecemos o nome e os parâmetros.
A primeira coisa é o tipo de retorno.
O tipo de retorno especifica o tipo de dados do valor
retornado pela função.
As funções podem retornar qualquer tipo de dado.
Você apenas tem que deixar o compilador saber que tipo de dados você está retornando se.
É um int, um flutuador, um duplo seja o que for, você deve especificar isso
no cabeçalho da função.
O tipo de retorno.
O tipo de retorno que vimos aqui, e você pode especificar o tipo de valor a
ser retornado por uma função contanto que seja um tipo legal em c.
Eu mencionei os principais, double, float e assim por diante.
Mas você também pode retornar enumerações e indicadores.
Não discutimos dicas, mas torna muito, muito flexível quando você
pode retornar ponteiros.
O tipo de retorno pode também ser evitar o tipo.
Você costuma ver esta palavra-chave vazio.
Agora entendemos o que isso significa.
Vazio significa que nenhum dado vai ser devolvido.
Se você vir vazio antes do nome da função, você não está
retornando nenhum dado.
Se você vir void dentro dos parâmetros lista, você não está passando nenhum dado.
Vazio é apenas uma palavra-chave geral que para tipos de retorno e para parâmetros, você também percebe que pode
usar void como um ponteiro também, mas chegaremos nisso
quando chegarmos lá.
Mas vazio é uma maneira de não dizer nada.
E a razão de você incluir vazio em oposição a simplesmente
não incluir nada porque torna o programa mais legível.
Na verdade, quando você passa dados para um função e
você não tem dados sendo passados, você pode ter são apenas parênteses vazios.
É fácil de ler se você tem vazio lá.
Mesmo com um tipo de retorno, exceto o tipo de retorno você deve ter void.
Você não pode deixá-lo apenas vazio.
Vazio significa que nenhum dado é vai ser devolvido.
A instrução de retorno.
Nós conversamos sobre como você pode identificar quais dados serão retornados, mas como fazer
você realmente retorna os dados.
Dentro do corpo da função, você tem que ter uma declaração onde você possa
dizer o que vai devolver.
Porque lembre-se do corpo de um função pode ter muitos dados.
Pode ter variáveis locais, pode tem qualquer coisa que você saiba que a função
pode estar fazendo um cálculo específico, talvez fazendo vários cálculos, o que
você deseja retornar.
Felizmente, há esta declaração com a palavra-chave return.
Se você fornecer o retorno sem nenhum nome de variável após ou expressão, isso
significa que você está apenas saindo da função.
É semelhante a uma pausa em um loop.
Voce esta apenas voltando da função.
E você pode fornecer isso em funções que são definidas como nulas.
Deixa claro quando você está saindo da função.
Você realmente só deveria ter o retorno em um ponto na
parte inferior da função.
Veremos isso mais tarde, mas você não pode tê-lo em qualquer lugar de uma função.
Se você vê-lo em qualquer lugar em uma função, significa que você
está pulando dessa função.
A razão pela qual é bom ter na parte inferior é muito claro quando
você está saindo da função.
Se você tiver várias devoluções mesmo se você estiver retornando dados em toda
a sua função, é difícil dizer quando você está voltando.
Então, o que eu gosto de fazer no meu funções são criar variáveis e retornar apenas
uma vez na parte inferior.
Se eu precisar devolver algo em uma função ou quero dizer em uma instrução if específica em uma função
ou algo vou definir a variável e, em seguida,
retorná-la na parte inferior.
Então, se você tem retorno e você não tem nada
depois disso, isso significa apenas que você está saindo do função sem dados retornados.
Isso realmente não é muito usado.
Você só o usa no vazio função, não retorna um valor.
A forma mais geral do a instrução de retorno está
retornando alguma variável ou alguma expressão.
X mais y ou retornando x.
Esta forma de declaração de retorno tem para ser usado com o tipo de retorno
especificado no cabeçalho da função.
Se você está retornando um int, qualquer variável ou expressão que você está
retornando deve ser um int.
Tem que avaliar para um int, se você estiver retornando um int.
Agora, se você está dobrando, tem que valor para dobrar.
Lembre-se, você pode ter muitos diferentes tipos de dados retornados.
O valor que é retornado para o programa de
chamada é o valor que resulta quando o expressão é avaliada assim.
Se você tiver x mais y, ele está retornando o resultado dessa expressão e tem que
ser do mesmo tipo que o declaração de função como mencionei.
Uma função que possui declarações no corpo
da função, mas não retorna um valor, deve ter o retornar tipo como vazio, tem que.
Você não pode não ter isso.
Se você não tem isso e você é não retornando
nenhum dado, você receberá uma mensagem de erro.
Quando você compila o programa e contém uma função com um tipo de retorno
void que tenta retorna um erro do compilador de valor.
Anular significa nenhum retorno de dados, não retorna uma variável uma expressão.
Se uma função não tem um vazio tipo de
retorno e tem um tipo de retorno válido, você obterá um mensagem de
erro se o compilador tentar retornar um tipo diferente de um especificado ou
se eles simplesmente retornaram sem nada depois.
Portanto, preste atenção a isso.
Essas palavras-chave no início do declaração funcional são importantes.
Afeta diretamente a implementação da função e a compilação vai te dizer se você estragar e você não
retorna os dados corretos ou se não
retornar nenhum dados ou se você retornar dados quando
não deveria retornar dados.
Se a expressão resultar em um valor isso é diferente,
um tipo diferente do tipo de retorno na função cabeçalho, c tentará convertê-lo.
O compilador vai tentar para convertê-lo, se puder.
Por exemplo, se você estiver voltando um float e sua expressão é I mais x com
dois ints, vai para apenas convertê-lo em um flutuador.
Se você estiver retornando um int e você
tem uma expressão que está fazendo cálculo flutuante, irá convertê-lo em um it.
Você vai perder dados nesse caso, mas fará a conversão.
Nem sempre é possivel para fazer a conversão.
Nos casos em que não for possível, você terá um erro
produzido pelo compilador.
Se você está tentando retornar um int quando
você deve retornar uma string ou quando você está tentando
para devolvê-lo quando você deveria retornar um enum, é vai reclamar do compilador.
Você também pode ter mais de um declaração de retorno uma função,
mencionei isso brevemente e porque você não quer fazer isso.
Mas você consegue fazer isso.
Você pode ter várias devoluções em toda a função.
Isso apenas torna o código mais difícil de siga porque você
está pulando da função para todos os lados.
Quando você voltar e você tiver vários valores de retorno, apenas
certifique-se novamente se você tem uma função que está
retornando algo, você tem uma expressão ou um valor de esse tipo ou pode ser convertido.
Agora que falamos sobre passando dados e retornando dados,
sabemos como invocar uma função, mas quero dizer algumas
outras coisas sobre a invocação.
Você chama uma função apenas usando o nome da função seguido pelos
argumentos que você passa que são entre os parênteses, nós sabemos
disso, até agora nós sabemos, mas eu deseja declarar formalmente, é assim que você
pode invocar uma função.
Quando você chama a função, o valores
dos argumentos que você especifica entre parênteses serão atribuídos a
parâmetros dentro da função.
Os parâmetros são representativos variáveis com um tipo de dados.
Você pode então usar essa variável qualquer lado do corpo funcional.
Quando a função é encerrada ou executada determinado código, ele usará os valores fornecidos como
argumentos, como mencionei.
Os argumentos que você especifica quando você chamar uma função deve concordar no
tipo de número e sequência quando o parâmetros no cabeçalho da função.
A ordem também importa, eu não enfatize isso, mas se
disser int x double y, primeiro você deve passe no int depois no double.
Você não pode passar no duplo e no int.
A ordem é muito, muito específica.
Portanto, certifique-se de passar os dados como um argumento quando você
invoca a função da mesma maneira que a função é declarado no cabeçalho da função
na lista de parâmetros, passando os tipos certos também.
Invocar uma função e atribuindo os dados retornados.
Se uma função está retornando dados, o função pode atribuir esses dados apenas usando
o operador igual e depois o retorno também ou você pode armazená-lo em uma variável
local, se desejar.
Também funcionará com uma expressão.
Então você pode dizer return x plus y, você pode dizer return x, você pode
dizer return a constante.
Este exemplo aqui é depois de você invoque a chamada quando quiser atribuir os dados
que são retornados.
Então você pode dizer que int x é igual a meu chamada de função, o que quer que
essa função retorne será atribuído a x.
E se minha chamada de função retornar x mais y, o resultado de x mais
y será atribuído a x.
Então você pode atribuir os dados que são retornado de
uma chamada de função apenas por ter uma variável no lado esquerdo do
igual e a invocação da função no lado direito dos iguais.
A função de chamada não tem para reconhecer ou processar o valor
retornado de uma função chamada.
Você não precisa ter essa atribuição lá.
Se uma função está retornando dados e você não se preocupa com esses dados, você
não precisa ter iguais, você pode simplesmente invocar a função.
Realmente não faria sentido porque se está retornando dados, significa
que provavelmente você precisa olhar isso, mas você não precisa fazer isso.
O compilador não vai reclame se você apenas invocar
uma função e não manipular os dados.
Depende de você como você deseja usar os dados retornados
de chamadas de função.
Aqui está um exemplo de invocação uma função e também retornando dados de
uma função.
Neste exemplo, multiplique dois números.
Este foi o exemplo que nós tinha anteriormente, mas o exemplo
anterior não retornou nenhum dado.
O exemplo anterior exibiu a saída.
Neste exemplo, somos não exibindo nenhuma saída.
Estamos retornando os dados e então estamos exibindo a
saída na função principal.
Aqui, nossos números multiplicam dois leva dois inteiros como parâmetros.
Multiplicamos esses dois inteiros.
E então, em vez de imprimir isso montante ou o valor, estamos usando a
palavra-chave return e, então, especificando uma variável chamada resultado e então temos
o ponto-e-vírgula para encerrá-la.
Quando você vê aquela palavra-chave de retorno dentro do corpo da função, você está
retornando esses dados.
E lembre-se, você pode tem vários lugares.
Mas você só pode fazer com que ele retorne um valor, você não pode retornar vários valores.
Então, se você tiver a palavra-chave return em vários lugares, deve estar dentro
de uma instrução if ou loop porque você está pulando na hora.
Se você tiver um retorno seguido por outro retorno, isso lhe
dará um erro porque diria que você tem dois retornos em ambos os casos.
Você está sempre voltando para resultados, você não pode fazer isso.
Mas a palavra-chave de retorno é importante.
Você está retornando uma variável.
E então você vê no principal função à qual os dados que estão sendo
retornados estão sendo atribuídos outra variável local chamada resultado.
Você notará que estamos usando os mesmos nomes aqui.
Isso tem a ver com função escopo sobre
o qual falaremos na próxima aula, local variáveis versus variáveis globais.
Tudo que você precisa para prestar atenção nesta palestra é o fato de
que esta função se multiplicou dois números estão retornando dados.
Como você devolve, você devolve usando a palavra-chave return
seguida pela variável da expressão.
Você também percebe que a multiplicação dois números especificam o tipo de retorno na
parte superior do cabeçalho da função.
Ele está retornando um int.
Portanto, temos que retornar um int.
Você também percebe que quando atribuímos os dados na
função principal, estamos atribuindo em int.
Atribuir isso muito fácil nós apenas tenha o operador igual.
Se não nos importássemos com os dados, poderia simplesmente ligar e multiplicar dois
números e depois não fazer nada com isso, mas.
Depois de obtermos os dados retornados da função, então
imprimimos usando uma função printf.
Isso torna a função mais coeso que leva dados.
Não estamos exibindo os resultados dentro da função.
Há momentos em que não queremos para exibir
os resultados, queremos apenas multiplicar dois números e depois podemos querer dividir o produto.
Flexibilidade com a transmissão de dados e os dados retornados são muito importantes.
Este é um exemplo simples.
Você vai ficar exposto a isso mais em nosso próximo desafio.