1 00:00:07,010 --> 00:00:09,640 [Powered by Google Translate] Funções são seções de código utilizadas dentro de um programa maior 2 00:00:09,640 --> 00:00:11,430 para executar uma determinada tarefa. 3 00:00:11,430 --> 00:00:15,060 Eles também são conhecidos como procedimentos, rotinas, e subprogramas, 4 00:00:15,060 --> 00:00:18,320 uma vez que eles realmente são apenas mini programas dentro de programas. 5 00:00:18,320 --> 00:00:20,340 Mesmo que você pode não ter notado, 6 00:00:20,340 --> 00:00:24,090 você definitivamente ter usado funções se você já tiver programado em C. 7 00:00:24,090 --> 00:00:26,770 Quando você escrever coisas na tela usando printf, 8 00:00:26,770 --> 00:00:29,380 você está realmente usando uma função chamada printf. 9 00:00:29,380 --> 00:00:33,760 Da mesma forma, GetInt e GetString são funções que CS50 oferece para você. 10 00:00:33,760 --> 00:00:37,750 Como programadores, usamos as funções de um certo número de razões. 11 00:00:37,750 --> 00:00:41,240 >> Tendo funções para realizar tarefas comuns como a escrita para a tela 12 00:00:41,240 --> 00:00:44,480 e avisar o usuário para a entrada nos poupa tempo na programação. 13 00:00:44,480 --> 00:00:47,510 Não é necessário escrever código para fazer as mesmas coisas 14 00:00:47,510 --> 00:00:49,520 uma vez que está já fez por nós. 15 00:00:49,520 --> 00:00:54,580 Não é mesmo necessário para que possamos entender exatamente como as funções funcionam internamente. 16 00:00:54,580 --> 00:00:58,880 Em vez disso, apenas tem que saber como usar ou chamá-los em nossos programas. 17 00:00:58,880 --> 00:01:02,040 Também é útil para escrever funções em programas de maiores 18 00:01:02,040 --> 00:01:04,330 mesmo se você não está pensando em ter outros usá-los, 19 00:01:04,330 --> 00:01:06,830 apenas para dividir a maior tarefa na mão. 20 00:01:06,830 --> 00:01:11,910 Desta forma, você dá a estrutura para o seu código muito parecido com você daria estrutura para um ensaio, 21 00:01:11,910 --> 00:01:15,180 e com projetos realmente grandes, você permitir que várias pessoas 22 00:01:15,180 --> 00:01:16,730 para trabalhar em diferentes partes ao mesmo tempo, 23 00:01:16,730 --> 00:01:20,480 uma vez que está claro que o trabalho de uma pessoa termina e outro começa. 24 00:01:20,480 --> 00:01:26,530 >> Funções tipicamente operam em uma ou mais entradas, conhecidos como argumentos ou parâmetros, 25 00:01:26,530 --> 00:01:30,520 transformando esses insumos em um valor de saída, que depois é devolvido. 26 00:01:30,520 --> 00:01:34,950 No entanto, também é possível ter funções que não utilizam quaisquer argumentos de entrada 27 00:01:34,950 --> 00:01:36,400 e não retornam uma saída. 28 00:01:36,400 --> 00:01:38,790 Ok, chega com o material macio. 29 00:01:38,790 --> 00:01:41,790 Vamos dar uma olhada em algumas funções reais em C. 30 00:01:41,790 --> 00:01:45,570 >> Aqui nós temos uma função chamada praça que, acredite ou não, 31 00:01:45,570 --> 00:01:47,570 calcula o quadrado da entrada. 32 00:01:47,570 --> 00:01:49,490 Vamos dissecar a sintaxe dela. 33 00:01:49,490 --> 00:01:51,860 A primeira palavra que você vê na função, int, 34 00:01:51,860 --> 00:01:57,460 especifica o tipo de retorno da função, ou seja, o tipo C de saída da função. 35 00:01:57,460 --> 00:02:00,370 Esta função irá gerar um valor com tipo int. 36 00:02:00,370 --> 00:02:04,100 A próxima palavra que você vê é o nome da função, a praça neste caso. 37 00:02:04,100 --> 00:02:07,390 Nomeando funções de forma adequada é especialmente importante 38 00:02:07,390 --> 00:02:11,260 uma vez que é, provavelmente, a documentação mais visível do que a função faz. 39 00:02:11,260 --> 00:02:14,880 Pode ser legal para nomear esta função shazam ou booyah, 40 00:02:14,880 --> 00:02:18,340 mas isso não nos diz nada sobre o que a função faz. 41 00:02:18,340 --> 00:02:23,470 >> Seguindo o nome da função, vêm as entradas para a função, os argumentos. 42 00:02:23,470 --> 00:02:26,380 Eles estão listados no interior de um conjunto de parênteses 43 00:02:26,380 --> 00:02:30,160 tanto com o seu tipo e um nome a ser usado para eles dentro do corpo da função. 44 00:02:30,160 --> 00:02:34,030 Praça leva apenas um argumento, o int a praça, 45 00:02:34,030 --> 00:02:36,160 que eu decidi dar o nome x. 46 00:02:36,160 --> 00:02:40,760 Isto termina a declaração de função ou protótipo. 47 00:02:40,760 --> 00:02:43,320 As chaves que cercam o resto da função 48 00:02:43,320 --> 00:02:45,870 denotam o início eo fim do corpo da função, 49 00:02:45,870 --> 00:02:48,320 a definição da função em si. 50 00:02:48,320 --> 00:02:50,300 Praça é uma função bem simples. 51 00:02:50,300 --> 00:02:54,100 Ele só tem uma linha, uma vez que tudo o que temos a fazer é multiplicar x por si só. 52 00:02:54,100 --> 00:02:59,250 O retorno palavra especifica o valor de saída e desencadeia o final da função. 53 00:02:59,250 --> 00:03:03,430 Para usar a função quadrado, temos de fornecer os insumos adequados 54 00:03:03,430 --> 00:03:05,310 e capturar a saída. 55 00:03:05,310 --> 00:03:08,140 Aqui, você vê um par de maneiras de fazer isso. 56 00:03:08,140 --> 00:03:13,600 Podemos passar um int-prima, como 6, ou podemos passar uma variável como um. 57 00:03:13,600 --> 00:03:15,700 Observe que cada vez que nós chamamos de quadrado, 58 00:03:15,700 --> 00:03:18,330 que capturar a saída em uma variável e, em seguida, imprimi-lo. 59 00:03:18,330 --> 00:03:22,690 No entanto, não temos para armazenar o valor de retorno em uma variável e depois imprimir. 60 00:03:22,690 --> 00:03:27,090 Nós poderíamos apenas enviá-lo diretamente para printf como fazemos quando quadrado 10, 61 00:03:27,090 --> 00:03:30,580 mas isso não significa que não temos acesso ao valor de retorno da praça 10 62 00:03:30,580 --> 00:03:32,230 em qualquer outra parte do código. 63 00:03:32,230 --> 00:03:34,890 Vejamos outro exemplo simples. 64 00:03:34,890 --> 00:03:38,750 >> Desta vez, vamos somar dois carros alegóricos juntos para que possamos ver o que uma função parece 65 00:03:38,750 --> 00:03:41,220 quando tem duas entradas, em vez de apenas 1. 66 00:03:41,220 --> 00:03:43,950 Como você pode ver, não é muito diferente. 67 00:03:43,950 --> 00:03:47,330 Tudo o que fazemos é adicionar no argumento segundo, um ponto flutuante chamado b, 68 00:03:47,330 --> 00:03:51,820 à lista de argumentos usando uma vírgula para separá-lo do primeiro argumento, flutuar um. 69 00:03:51,820 --> 00:03:55,550 Então, a nossa praça e funções soma são muito fácil de entender 70 00:03:55,550 --> 00:03:58,930 porque eles são equivalentes às funções que você já viu antes na aula de matemática. 71 00:03:58,930 --> 00:04:01,610 Agora, vamos olhar para uma função que é ligeiramente diferente. 72 00:04:01,610 --> 00:04:04,620 Em vez de retornar um valor, ele modifica um estado. 73 00:04:04,620 --> 00:04:07,260 Isto é conhecido como tendo um efeito colateral. 74 00:04:07,260 --> 00:04:10,750 Neste programa, a função printf_fudd_style 75 00:04:10,750 --> 00:04:13,410 tem um tipo de retorno que nós não vimos antes, vazio. 76 00:04:13,410 --> 00:04:16,730 >> Vazio é usada para dizer que uma função não retorna nada. 77 00:04:16,730 --> 00:04:19,410 Não há variáveis ​​de tipo void 78 00:04:19,410 --> 00:04:22,760 por isso, se você tentar retornar algo de uma função como printf_fudd_style, 79 00:04:22,760 --> 00:04:24,290 o compilador vai gritar com você. 80 00:04:24,290 --> 00:04:29,390 Dentro printf_fudd_style, vemos que enquanto a função ainda executa uma tarefa, 81 00:04:29,390 --> 00:04:31,890 ou seja, mudar tudo Rs para Ws, 82 00:04:31,890 --> 00:04:36,380 o ponto da função é modificar a seqüência e depois imprimi-lo na tela, 83 00:04:36,380 --> 00:04:39,400 a alteração do estado do programa, em vez de retornar um resultado. 84 00:04:39,400 --> 00:04:43,700 Usando esta função é muito parecida com a nossa praça e funções de soma, 85 00:04:43,700 --> 00:04:46,950 exceto nós não armazenar o resultado em uma variável ou passá-lo para outra função 86 00:04:46,950 --> 00:04:49,520 já que não há resultado para falar. 87 00:04:49,520 --> 00:04:53,180 Então, quando nós compilar e executar o nosso programa de Elmer Fudd, 88 00:04:53,180 --> 00:04:56,970 você vê que "Você rascally coelho!" se transforma direito de 89 00:04:56,970 --> 00:04:58,730 "Você wascally Wabbit!" 90 00:04:58,730 --> 00:05:02,250 >> Finalmente, há uma função mais vale a pena discutir 91 00:05:02,250 --> 00:05:06,810 desde que você se usá-lo em todos os programas de C que você já escreveu, principal. 92 00:05:06,810 --> 00:05:09,450 Principal é uma função muito como qualquer outro. 93 00:05:09,450 --> 00:05:13,580 Ele tem um tipo de retorno, um nome, uma lista de argumentos, e um corpo. 94 00:05:13,580 --> 00:05:16,110 O tipo de retorno principal é sempre um int, 95 00:05:16,110 --> 00:05:19,120 e isso int é usado para comunicar o status do programa quando ele terminar. 96 00:05:19,120 --> 00:05:23,360 >> Será que ele executar com sucesso, ou ele terminar mais cedo por causa de um erro? 97 00:05:23,360 --> 00:05:26,390 Retorno a zero indica um funcionamento bem sucedido, 98 00:05:26,390 --> 00:05:29,510 e devolver qualquer valor diferente de zero indica um erro. 99 00:05:29,510 --> 00:05:31,950 Dependendo do tipo de programa que você está escrevendo, 100 00:05:31,950 --> 00:05:34,960 retornando códigos diferentes para os diferentes erros podem ser úteis 101 00:05:34,960 --> 00:05:37,210 para pessoas que usam o seu programa mais tarde. 102 00:05:37,210 --> 00:05:40,220 Argumentos de linha são um pouco mais complicado. 103 00:05:40,220 --> 00:05:42,150 >> A lista de argumentos pode ser vazia, 104 00:05:42,150 --> 00:05:45,330 que indicar por escrito vazio entre os parênteses, 105 00:05:45,330 --> 00:05:50,220 ou a lista pode ter dois argumentos: uma int e uma matriz de char * s. 106 00:05:50,220 --> 00:05:52,820 Estes são utilizados quando o programa pretende usar 107 00:05:52,820 --> 00:05:56,490 argumentos passados ​​na linha de comando quando o programa é invocado. 108 00:05:56,490 --> 00:05:59,690 O argumento int é normalmente chamado argc, 109 00:05:59,690 --> 00:06:03,300 e é o comprimento igual a matriz de char *, conhecido como argv. 110 00:06:03,300 --> 00:06:07,080 Argv contém os argumentos de linha de comando passados ​​para o programa. 111 00:06:07,080 --> 00:06:11,440 Em outro curta, vamos falar sobre como usar essas variáveis ​​em mais detalhes. 112 00:06:11,440 --> 00:06:15,220 Por enquanto, você pode se sentir livre para declarar uma ou outra maneira principal. 113 00:06:15,220 --> 00:06:19,410 Eu normalmente optar por escrever o caminho mais curto, sem argumentos, quando possível. 114 00:06:19,410 --> 00:06:22,230 >> Agora que você sabe como escrever funções, 115 00:06:22,230 --> 00:06:25,030 você está bem em seu caminho para o desenvolvimento de programas maiores, mais complexas. 116 00:06:25,030 --> 00:06:29,740 Meu nome é Nate Hardison. Este é CS50.