1
00:00:00,710 --> 00:00:03,134
Agora que você domina
o básico de funções,
2
00:00:03,134 --> 00:00:07,574
gostaria de falar sobre um tópico que
pode se tornar um pouco complicado.
3
00:00:07,574 --> 00:00:11,228
A diferença entre variáveis
locais e globais.
4
00:00:11,228 --> 00:00:14,241
Estes termos podem não significar
nada para você agora.
5
00:00:14,241 --> 00:00:16,542
Então, vamos começar
com um exemplo.
6
00:00:16,542 --> 00:00:20,178
Criei este programa para mostrar quantas
polegadas cresci na minha infância.
7
00:00:20,178 --> 00:00:22,329
Visto que humanos crescem
a taxas diferentes,
8
00:00:22,329 --> 00:00:24,681
desenvolvi esta função
calcInches (calcPolegadas).
9
00:00:24,681 --> 00:00:25,690
cujos argumentos são:
10
00:00:25,690 --> 00:00:27,921
startAge (idadeInicial),
endAge (idadeFinal)
11
00:00:27,921 --> 00:00:29,661
e inchesPerYear (polegadasPorAno).
12
00:00:29,661 --> 00:00:34,601
Ela calculará o crescimento total,
em polegadas, durante aquele período
13
00:00:34,601 --> 00:00:37,456
e então retornará o resultado
para quem quer que a chamou.
14
00:00:37,456 --> 00:00:40,329
Podemos ver aqui que de
zero a oito anos
15
00:00:40,329 --> 00:00:44,840
eu chamo calcInches e passo zero,
oito e 2,5 como parâmetros.
16
00:00:44,840 --> 00:00:48,426
porque eu cresci aproximadamente
2,5 polegadas por ano.
17
00:00:48,426 --> 00:00:52,373
Então ela faz o cálculo e retorna 20.
18
00:00:52,373 --> 00:00:58,000
De oito para dezesseis, eu passei
oito, dezesseis e dois.
19
00:00:58,000 --> 00:01:01,710
porque eu não cresci tanto e pode-se
ver que ela retorna dezesseis.
20
00:01:01,710 --> 00:01:04,852
Isso é agradável, mas
agora quero, na verdade,
21
00:01:04,852 --> 00:01:07,035
mostrar quantas polegadas
eu cresci no total,
22
00:01:07,035 --> 00:01:09,011
durante toda minha infância.
23
00:01:09,011 --> 00:01:11,623
Então, como faço isso?
24
00:01:11,623 --> 00:01:15,094
Bem, eu poderia começar a olhar
meu código e pensar...
25
00:01:15,094 --> 00:01:17,094
quais valores eu tenho aqui?
26
00:01:17,094 --> 00:01:20,758
Será que tenho alguma coisa que
represente o total de polegadas?
27
00:01:20,758 --> 00:01:24,088
Veja, eu tenho esta variável
totalInches (totalPolegadas)
28
00:01:24,088 --> 00:01:26,471
dentro da minha função
calcInches (calcPolegadas).
29
00:01:26,471 --> 00:01:28,665
Nesse caso, eu poderia
simplesmente mostrá-la,
30
00:01:28,665 --> 00:01:30,555
e ver seu valor, começar por aí.
31
00:01:30,555 --> 00:01:31,530
Então, escrevemos:
32
00:01:31,530 --> 00:01:34,525
text(totalInches, 10, 200)
33
00:01:34,525 --> 00:01:36,336
e colocamos isso na parte inferior.
34
00:01:36,336 --> 00:01:37,879
Ok, vamos ver o que temos.
35
00:01:39,210 --> 00:01:41,201
Apareceu o cara do 'Oh noes!'.
36
00:01:41,201 --> 00:01:45,470
E ele diz que há um problema:
"totalInches não está definida."
37
00:01:45,470 --> 00:01:49,735
Isso, é estranho porque definimos
totalInches bem aqui, certo?
38
00:01:49,739 --> 00:01:52,018
var totalInches igual...
39
00:01:52,018 --> 00:01:57,772
Bem, o problema é que declaramos
totalInches dentro de uma função,
40
00:01:57,772 --> 00:01:59,520
nesta linha aqui.
41
00:01:59,520 --> 00:02:02,139
E quando declaramos uma variável
dentro de uma função,
42
00:02:02,139 --> 00:02:05,229
a variável é considerada local.
43
00:02:05,229 --> 00:02:09,043
Ela vive apenas dentro desta função aqui
44
00:02:09,043 --> 00:02:12,077
e o código fora da função, isso tudo,
45
00:02:12,077 --> 00:02:15,613
não enxerga variáveis locais
dentro de funções.
46
00:02:15,613 --> 00:02:18,216
Apenas vê o que quer
que retorne da função.
47
00:02:18,216 --> 00:02:21,538
Apenas vê o valor, mas não a variável.
48
00:02:21,538 --> 00:02:24,524
Então quando tentamos usar
totalInches fora da função,
49
00:02:24,524 --> 00:02:26,147
o código não sabe o que é.
50
00:02:26,147 --> 00:02:29,847
Ele apenas diz: "Ei, eu nunca vi esta
variável antes. Ela não está definida.
51
00:02:29,847 --> 00:02:31,581
Não posso mostrá-la."
52
00:02:31,971 --> 00:02:34,183
Mas, existe uma maneira que
53
00:02:34,183 --> 00:02:38,003
podemos fazer isso, tal que o código
de fora possa ver esta variável, ou seja,
54
00:02:38,003 --> 00:02:42,602
se tornarmos esta variável local
em uma variável global.
55
00:02:42,602 --> 00:02:47,575
Podemos fazer isso, movendo a definição
dela para fora da função,
56
00:02:47,575 --> 00:02:51,105
para o que chamamos de escopo global.
57
00:02:51,105 --> 00:02:54,476
Agora, dentro da função, tudo que
estamos fazendo é
58
00:02:54,476 --> 00:02:58,489
mudando o valor dela cada vez e
não definindo-a e declarando-a.
59
00:02:58,489 --> 00:03:02,715
Veja que é mostrado "Crescimento
total durante a vida: 16".
60
00:03:02,715 --> 00:03:06,584
Então, ele encontrou a variável, porque
a definimos em um escopo global.
61
00:03:06,584 --> 00:03:09,717
Mas este não é exatamente o
valor que estamos procurando.
62
00:03:09,717 --> 00:03:11,460
Este é apenas o valor mais recente.
63
00:03:11,460 --> 00:03:13,726
Isso é porque toda vez que
chamamos esta função,
64
00:03:13,726 --> 00:03:18,476
ela atribui a totalInches o que quer
que esteja calculando daquela vez, certo?
65
00:03:19,087 --> 00:03:22,035
O que realmente queremos
é uma nova variável,
66
00:03:22,035 --> 00:03:24,748
que usaremos apenas para
armazenar o total geral,
67
00:03:24,748 --> 00:03:29,231
a qual aumentaremos sempre que
calcularmos o total para um período.
68
00:03:29,231 --> 00:03:33,853
Nesse caso, vamos alterar isso de volta
para ser uma variável local
69
00:03:33,853 --> 00:03:38,333
e vamos criar uma nova variável global
chamada lifeInches (vidaPolegadas).
70
00:03:38,333 --> 00:03:40,762
Vamos iniciá-la com zero.
71
00:03:40,762 --> 00:03:42,996
Depois, dentro da função,
72
00:03:42,996 --> 00:03:46,053
incrementaremos esta
variável global, escrevendo:
73
00:03:46,053 --> 00:03:48,970
lifeInches += totalInches.
74
00:03:48,970 --> 00:03:50,403
Então, adicionaremos a ela ...
75
00:03:50,403 --> 00:03:53,607
qualquer tanto que for calculado cada vez
que chamarmos esta função.
76
00:03:53,607 --> 00:03:56,233
Iremos adicioná-lo à variável
global lifeInches.
77
00:03:56,233 --> 00:03:58,888
Depois, após a última linha,
mostraremos lifeInches:
78
00:03:58,888 --> 00:04:00,319
text(lifeInches, 10, 200)
79
00:04:01,267 --> 00:04:03,670
Nosso crescimento total durante a vida.
80
00:04:03,670 --> 00:04:06,383
Não é minha altura de verdade.
Sou maior que isso.
81
00:04:06,383 --> 00:04:10,756
Mas é porque começamos nascidos
com comprimento maior que zero.
82
00:04:10,756 --> 00:04:14,196
Então, se quero o total eu poderia
talvez começar em 20.
83
00:04:14,196 --> 00:04:17,087
E aí está! Essa é minha altura.
84
00:04:17,087 --> 00:04:18,783
Certo, então vamos revisar.
85
00:04:18,783 --> 00:04:22,292
totalInches é o que chamamos
de variável local.
86
00:04:22,292 --> 00:04:26,072
Sabemos isso porque ela foi
declarada dentro desta função
87
00:04:26,072 --> 00:04:28,597
e não fora de uma função.
88
00:04:28,597 --> 00:04:34,703
Isso significa que este código de fora
não conhece a variável totalInches.
89
00:04:34,703 --> 00:04:37,632
Agora, lifeInches é o que chamamos
de variável global.
90
00:04:37,632 --> 00:04:41,451
Sabemos disso porque vemos sua
declaração fora de qualquer função,
91
00:04:41,451 --> 00:04:43,524
em um escopo global.
92
00:04:43,524 --> 00:04:47,195
Então, tente lembrar disso quando estiver
escrevendo funções e suas variáveis
93
00:04:47,195 --> 00:04:48,400
e pense consigo mesmo
94
00:04:48,400 --> 00:04:51,682
se você quer uma variável local para
ser usada apenas por sua função
95
00:04:51,682 --> 00:04:54,743
ou uma variável global, para
se programa inteiro utilizar.
96
00:04:54,743 --> 00:04:57,524
Não se preocupe se isso
te faz quebrar a cabeça.
97
00:04:57,524 --> 00:05:00,116
É um dos conceitos mais difíceis
em programação
98
00:05:00,116 --> 00:05:01,892
e em Javascript, em particular.
99
00:05:01,892 --> 00:05:04,428
Você ficará bom nisso com a prática.
100
00:05:04,428 --> 00:05:06,000
Legendado por [Carlos A. N. C. R.]
Revisado por [Fernando dos Reis]