Olá, seja bem-vindo de volta.
Nesta palestra, eu quero falar sobre variáveis locais e globais.
Este é realmente o conceito de função âmbito ou no âmbito geral do programa.
Tem a ver com quando você pode usar variáveis e quando
você não pode usá-los.
Nós sabemos o que são funções.
Então agora eu quero falar sobre variáveis locais.
Variáveis locais realmente têm que fazer com mais do que apenas funções.
Variáveis locais têm a ver com qualquer coisa que tenha um bloco de código.
Portanto, as variáveis definidas dentro de uma função são conhecidas
como variáveis locais automáticas.
Então, nesse corpo funcional, entre aqueles colchetes iniciais e finais,
se você declarar uma variável, que variável é uma variável local.
Será criado automaticamente cada vez que a função é chamada.
Além disso, quaisquer valores no o acesso a essa variável é apenas
local para a função.
Você não pode acessar essa variável fora dessa função.
Portanto, a variável não pode ser acessada em outras funções, se for
local para uma função específica.
É apenas acessível de onde é definido.
Se um valor inicial for dado a uma variável
dentro de uma função, esse valor inicial é atribuído à variável cada vez que
a função é chamada.
Se você deseja reter um valor em uma variável a cada chamada subsequente, há realmente
uma maneira de fazer isso em c, é chamado referido como uma
variável estática dentro de uma função.
Isso é, novamente, mais um avançado conceito não em uma
aula para iniciantes, mas é uma maneira que você pode na verdade, tem
dados diferentes toda vez que você invoca funções.
Então, se você quiser, por exemplo, manter um contador de quantas vezes uma função foi
chamada, você declararia um variável local dentro desse nome de função
estática, com uma palavra-chave estática.
Mas sem apenas regular as variáveis locais terão novos
valores a cada vez.
Você pode usar a palavra-chave auto antes o tipo de dados, mas não é necessário.
Isso o torna um um pouco mais preciso.
O compilador irá adicioná-lo por padrão se você não incluí-lo.
Mas se você incluí-lo, é só
vai deixar mais preciso, não é necessário.
Então é chamado de variável local automática.
Existe uma palavra-chave chamada auto em c, mas você não precisa fornecê-lo por padrão,
e é por isso você não vê isso em muitos exemplos onde as
variáveis estão sendo definidas e declarado dentro de uma função.
Variáveis locais também são aplicáveis a qualquer código onde a variável é criada
em um bloco, loops ou instruções if.
Novamente, se você tiver uma declaração if em o que é um bloco para uma instrução if,
é apenas onde começam os colchetes.
Isso é conhecido como bloqueio.
Os blocos podem estar em funções, os blocos podem ser instruções if, os
blocos podem estar em loops.
Os blocos podem estar em qualquer lugar que existem colchetes, essencialmente.
Em qualquer lugar há colchetes e você cria essa variável.
A criação da variável está declarando e talvez atribuindo valores a ele.
Mas se você declarar essa variável, você cria aquela variável dentro
de um bloco, você só pode usar essa variável dentro do bloco.
Se você tentar acessar isso variável fora do bloco, não
vai ser usada.
Então, se você tiver uma declaração if, dentro da instrução if
você declara uma variável, você pode acessar essa variável fora do bloco de instrução
if, o mesmo acontece com os loops.
Isso é muito importante para entender isso.
O compilador vai reclamar e fornecerá um erro se você
tentar acessá-lo em outro lugar.
E o que isso significa é o valores nos dados só
se aplicam a esse bloco.
Você não está compartilhando dados.
Variáveis globais são o oposto de uma variável local.
Variáveis globais podem ser acessadas por qualquer função no programa.
A maneira como você cria um global variável é você apenas colocá-la no
topo, fora de qualquer função.
Portanto, as variáveis globais são declaradas fora da função e não
pertencem a nenhuma função.
Lembre-se, a palavra-chave principal o principal é uma função.
Portanto, quaisquer variáveis definidas em a função principal está acessível
apenas na função principal.
Portanto, as variáveis principalmente função não são acessíveis em
nenhuma outra função.
Se você quer uma variável que é usado por todas as funções, você coloca a
variável fora de uma função, geralmente no topo do arquivo de
origem e geralmente marcá-lo como dizendo que esta é uma variável global.
A variável global é uma mentira para a totalidade do programa, desde o início
até quando ele pára, essa variável global vai ser
localizada na memória.
Qualquer função no programa pode mudar o valor dessa variável global porque eles têm acesso a ele,
eles podem modificá-lo.
E então você deve começar a pensar sobre uau, isso parece meio perigoso porque agora você tem
código que pode acessar os mesmos dados em qualquer
lugar, mas vamos chegar lá.
Se houver uma variável local declarada em uma
função com o mesmo nome de uma variável global, então função usará a variável local, mascarará
a variável global.
Então, se você tiver uma variável global chamada x e você tem uma
variável local chamada x dentro de uma função, o local variável vai ter precedência.
Não vai modificar os dados das variáveis globais.
Se você atribuir a isso variável, só
vai modificar a variável local.
Portanto, a variável global não é acessível quando você tem
o mesmo nome, e realmente não ser acessado dentro dessa função local,
então não use o mesmo nomes basicamente porque vai
ser confuso.
Para pessoas que programaram muitos programadores avançados, eles
notam isso imediatamente.
Eles vão dizer ei, isso só atua, é apenas modificar a
variável local, mesmo que eles vejam um verbo global com o mesmo nome.
Mas para iniciantes, é nem sempre muito claro.
Deixe-me lhe dar um exemplo.
Aqui neste exemplo, estamos criando uma variável global no
topo antes da função principal.
E a forma como você deseja organizar seu programa geralmente
inclui declarações no topo, após alguns comentários talvez, e então você pode ter algumas constantes
definidas e então você teria suas variáveis globais.
Variáveis globais parecem apenas como variáveis normais.
É apenas onde eles estão realmente declarado.
Se eles forem declarados fora de uma função, então eles são globais.
Portanto, neste exemplo, temos um variável global chamada meu global.
Estamos inicializando para 0.
Também podemos inicializar estes variáveis globais em qualquer lugar.
Podemos inicializá-los quando nós os declaramos ou podemos
inicializá-los em qualquer função.
É um número inteiro.
Também temos duas funções, a função principal em uma
função chamada minha função.
Lá dentro, temos variáveis que só são acessíveis
dentro dessas funções.
Na função principal, temos um meu principal local.
Você só pode acessar meu local principal dentro da função principal.
Mas porque meu global é uma variável isso é global, você também pode acessar
isso na função principal.
Portanto, o principal pode acessar dois variáveis, o local e o global.
E minha função tem uma variável local denominado x porque é declarado
dentro dos colchetes do corpo da função e podemos realmente acessar a variável global
que é meu global.
Também podemos acessar x, mas não podemos acessar meu local.
Meu principal local, devo dizer.
Porque meu principal local é apenas dentro da função principal.
Não temos acesso a isso.
Se tentarmos escrever ou ler meu variável principal local dentro da minha
função, o compilador é vai te dar um erro.
Você precisa entender isso conceito de local versus global.
Os locais são blocos de código internos.
Quando eles são declarados, você pode use-os apenas no bloco.
Se uma variável está fora de um bloco e está apenas em uma função ou
no próprio programa, você pode acessá-lo em qualquer função.
Variáveis globais devem ser evitadas.
Variáveis globais são tipo de coisa ruim.
A razão deles para o global variáveis sendo ruins e por que
você deve evitá-las é porque promove o acoplamento entre funções.
O que significa acoplamento?
Acoplamento significa dependências.
Se você tem uma variável global e está sendo usado
por quatro funções, o que significa que cada uma dessas funções pode ser
dependente da outra função.
O que há de errado com a dependência?
Dependência faz com que um programa seja muito mais difícil de depurar e encontrar erros.
Se você tiver um bug em seu programa e você está usando uma
variável global e a variável global está causando o bug, agora esse bug pode estar em
qualquer lugar em qualquer função que seja usando essa variável global.
Isso complica as coisas quando você tem dados globais.
Você tem uma variável global, ela poderia ser modificado na função um, função
dois, função três, função quatro.
Você não está restringindo o acesso a isso. Também é muito difícil quando você encontra
o erro e você isolar, pode ser
muito difícil consertá-lo.
Porque agora, quando você consertar, você pode causar problemas em outras funções
por causa dessas dependências.
Variáveis globais devem ser evitado tanto quanto possível por
causa deste acoplamento, por causa dessas dependências.
Há momentos em que você pode precisar para usá-lo, mas você deve evitá-lo.
E para ter em mente linguagens modernas na maioria das linguagens orientadas a
objetos como c ++ e java, nem mesmo tem o
conceito de variável global.
Eles têm variáveis estáticas que podem ser variáveis de classe, mas ainda estão
encapsuladas dentro de uma classe.
Porque os dados globais são tais uma coisa ruim, novas
linguagens realmente tentam proibir.
E você deve tentar evitar porque apenas complica o seu
programa e o torna mais difícil de encontrar e depurar erros.
Em vez de usar global dados, passe dados para funções.
Se uma função precisa de acesso para alguns dados, passe para ele.
Se - se houver muitos dados e você não deseja ter muitos parâmetros, em
teoria, você nunca deve realmente tem mais de cinco parâmetros.
Há um ótimo livro por aí chamado Código limpo que fala sobre a
qualidade do código e coisas a serem evitadas coisas a evitar, como variáveis globais.
Também fala sobre como muitos parâmetros que você deve
ter em suas funções.
E se uma função tem 20 parâmetros, é uma indicação de que algo
está errado, principalmente porque essa função provavelmente está fazendo muito.
Mas uma função pode ter acesso a dados apenas passando os dados para ele e você pode restringir o
uso de dados globais.
E para uma função que requer muito dados, você pode usar
algo chamado struct sobre o qual não falamos mas essa é outra maneira de fazer isso.
Portanto, não use tanto dados globais possível apenas quando necessário.
Certifique-se de entender o código.
Certifique-se de documentar é muito, muito bem.
Para que outra pessoa esteja procurando no código sabe
imediatamente que você está usando dados globais e sabe como tudo funciona.
Este é o conceito de escopo de função.
Você precisa entender isso, então preste atenção a todos esses slides.
E também usaremos alguns dados globais e alguns dados locais
em nosso próximo desafio. Obrigada.