Return to Video

Variáveis Globais e Locais

  • 0:01 - 0:03
    Agora que você domina
    o básico de funções,
  • 0:03 - 0:08
    gostaria de falar sobre um tópico que
    pode se tornar um pouco complicado.
  • 0:08 - 0:11
    A diferença entre variáveis
    locais e globais.
  • 0:11 - 0:14
    Estes termos podem não significar
    nada para você agora.
  • 0:14 - 0:17
    Então, vamos começar
    com um exemplo.
  • 0:17 - 0:20
    Criei este programa para mostrar quantas
    polegadas cresci na minha infância.
  • 0:20 - 0:22
    Visto que humanos crescem
    a taxas diferentes,
  • 0:22 - 0:25
    desenvolvi esta função
    calcInches (calcPolegadas).
  • 0:25 - 0:26
    cujos argumentos são:
  • 0:26 - 0:28
    startAge (idadeInicial),
    endAge (idadeFinal)
  • 0:28 - 0:30
    e inchesPerYear (polegadasPorAno).
  • 0:30 - 0:35
    Ela calculará o crescimento total,
    em polegadas, durante aquele período
  • 0:35 - 0:37
    e então retornará o resultado
    para quem quer que a chamou.
  • 0:37 - 0:40
    Podemos ver aqui que de
    zero a oito anos
  • 0:40 - 0:45
    eu chamo calcInches e passo zero,
    oito e 2,5 como parâmetros.
  • 0:45 - 0:48
    porque eu cresci aproximadamente
    2,5 polegadas por ano.
  • 0:48 - 0:52
    Então ela faz o cálculo e retorna 20.
  • 0:52 - 0:58
    De oito para dezesseis, eu passei
    oito, dezesseis e dois.
  • 0:58 - 1:02
    porque eu não cresci tanto e pode-se
    ver que ela retorna dezesseis.
  • 1:02 - 1:05
    Isso é agradável, mas
    agora quero, na verdade,
  • 1:05 - 1:07
    mostrar quantas polegadas
    eu cresci no total,
  • 1:07 - 1:09
    durante toda minha infância.
  • 1:09 - 1:12
    Então, como faço isso?
  • 1:12 - 1:15
    Bem, eu poderia começar a olhar
    meu código e pensar...
  • 1:15 - 1:17
    quais valores eu tenho aqui?
  • 1:17 - 1:21
    Será que tenho alguma coisa que
    represente o total de polegadas?
  • 1:21 - 1:24
    Veja, eu tenho esta variável
    totalInches (totalPolegadas)
  • 1:24 - 1:26
    dentro da minha função
    calcInches (calcPolegadas).
  • 1:26 - 1:29
    Nesse caso, eu poderia
    simplesmente mostrá-la,
  • 1:29 - 1:31
    e ver seu valor, começar por aí.
  • 1:31 - 1:32
    Então, escrevemos:
  • 1:32 - 1:35
    text(totalInches, 10, 200)
  • 1:35 - 1:36
    e colocamos isso na parte inferior.
  • 1:36 - 1:38
    Ok, vamos ver o que temos.
  • 1:39 - 1:41
    Apareceu o cara do 'Oh noes!'.
  • 1:41 - 1:45
    E ele diz que há um problema:
    "totalInches não está definida."
  • 1:45 - 1:50
    Isso, é estranho porque definimos
    totalInches bem aqui, certo?
  • 1:50 - 1:52
    var totalInches igual...
  • 1:52 - 1:58
    Bem, o problema é que declaramos
    totalInches dentro de uma função,
  • 1:58 - 2:00
    nesta linha aqui.
  • 2:00 - 2:02
    E quando declaramos uma variável
    dentro de uma função,
  • 2:02 - 2:05
    a variável é considerada local.
  • 2:05 - 2:09
    Ela vive apenas dentro desta função aqui
  • 2:09 - 2:12
    e o código fora da função, isso tudo,
  • 2:12 - 2:16
    não enxerga variáveis locais
    dentro de funções.
  • 2:16 - 2:18
    Apenas vê o que quer
    que retorne da função.
  • 2:18 - 2:22
    Apenas vê o valor, mas não a variável.
  • 2:22 - 2:25
    Então quando tentamos usar
    totalInches fora da função,
  • 2:25 - 2:26
    o código não sabe o que é.
  • 2:26 - 2:30
    Ele apenas diz: "Ei, eu nunca vi esta
    variável antes. Ela não está definida.
  • 2:30 - 2:32
    Não posso mostrá-la."
  • 2:32 - 2:34
    Mas, existe uma maneira que
  • 2:34 - 2:38
    podemos fazer isso, tal que o código
    de fora possa ver esta variável, ou seja,
  • 2:38 - 2:43
    se tornarmos esta variável local
    em uma variável global.
  • 2:43 - 2:48
    Podemos fazer isso, movendo a definição
    dela para fora da função,
  • 2:48 - 2:51
    para o que chamamos de escopo global.
  • 2:51 - 2:54
    Agora, dentro da função, tudo que
    estamos fazendo é
  • 2:54 - 2:58
    mudando o valor dela cada vez e
    não definindo-a e declarando-a.
  • 2:58 - 3:03
    Veja que é mostrado "Crescimento
    total durante a vida: 16".
  • 3:03 - 3:07
    Então, ele encontrou a variável, porque
    a definimos em um escopo global.
  • 3:07 - 3:10
    Mas este não é exatamente o
    valor que estamos procurando.
  • 3:10 - 3:11
    Este é apenas o valor mais recente.
  • 3:11 - 3:14
    Isso é porque toda vez que
    chamamos esta função,
  • 3:14 - 3:18
    ela atribui a totalInches o que quer
    que esteja calculando daquela vez, certo?
  • 3:19 - 3:22
    O que realmente queremos
    é uma nova variável,
  • 3:22 - 3:25
    que usaremos apenas para
    armazenar o total geral,
  • 3:25 - 3:29
    a qual aumentaremos sempre que
    calcularmos o total para um período.
  • 3:29 - 3:34
    Nesse caso, vamos alterar isso de volta
    para ser uma variável local
  • 3:34 - 3:38
    e vamos criar uma nova variável global
    chamada lifeInches (vidaPolegadas).
  • 3:38 - 3:41
    Vamos iniciá-la com zero.
  • 3:41 - 3:43
    Depois, dentro da função,
  • 3:43 - 3:46
    incrementaremos esta
    variável global, escrevendo:
  • 3:46 - 3:49
    lifeInches += totalInches.
  • 3:49 - 3:50
    Então, adicionaremos a ela ...
  • 3:50 - 3:54
    qualquer tanto que for calculado cada vez
    que chamarmos esta função.
  • 3:54 - 3:56
    Iremos adicioná-lo à variável
    global lifeInches.
  • 3:56 - 3:59
    Depois, após a última linha,
    mostraremos lifeInches:
  • 3:59 - 4:00
    text(lifeInches, 10, 200)
  • 4:01 - 4:04
    Nosso crescimento total durante a vida.
  • 4:04 - 4:06
    Não é minha altura de verdade.
    Sou maior que isso.
  • 4:06 - 4:11
    Mas é porque começamos nascidos
    com comprimento maior que zero.
  • 4:11 - 4:14
    Então, se quero o total eu poderia
    talvez começar em 20.
  • 4:14 - 4:17
    E aí está! Essa é minha altura.
  • 4:17 - 4:19
    Certo, então vamos revisar.
  • 4:19 - 4:22
    totalInches é o que chamamos
    de variável local.
  • 4:22 - 4:26
    Sabemos isso porque ela foi
    declarada dentro desta função
  • 4:26 - 4:29
    e não fora de uma função.
  • 4:29 - 4:35
    Isso significa que este código de fora
    não conhece a variável totalInches.
  • 4:35 - 4:38
    Agora, lifeInches é o que chamamos
    de variável global.
  • 4:38 - 4:41
    Sabemos disso porque vemos sua
    declaração fora de qualquer função,
  • 4:41 - 4:44
    em um escopo global.
  • 4:44 - 4:47
    Então, tente lembrar disso quando estiver
    escrevendo funções e suas variáveis
  • 4:47 - 4:48
    e pense consigo mesmo
  • 4:48 - 4:52
    se você quer uma variável local para
    ser usada apenas por sua função
  • 4:52 - 4:55
    ou uma variável global, para
    se programa inteiro utilizar.
  • 4:55 - 4:58
    Não se preocupe se isso
    te faz quebrar a cabeça.
  • 4:58 - 5:00
    É um dos conceitos mais difíceis
    em programação
  • 5:00 - 5:02
    e em Javascript, em particular.
  • 5:02 - 5:04
    Você ficará bom nisso com a prática.
  • 5:04 - 5:06
    Legendado por [Carlos A. N. C. R.]
    Revisado por [Fernando dos Reis]
Title:
Variáveis Globais e Locais
Description:

Esta é apenas uma captura de tela da nossa conversação sobre programação interativa, feita para facilitar a legendagem e a tradução. É melhor assistir nossas conversações aqui: https://www.khanacademy.org/cs/programming/.

more » « less
Video Language:
English
Duration:
05:06

Portuguese, Brazilian subtitles

Revisions