1
00:00:00,387 --> 00:00:04,096
Continuemos explorando o que
podemos fazer com objetos.
2
00:00:04,109 --> 00:00:08,305
Voltamos para o programa que
usamos no tutorial de funções.
3
00:00:08,305 --> 00:00:14,343
Este programa tem esta função drawWinston
que sabe desenhar Winston em certo X e Y.
4
00:00:14,521 --> 00:00:16,441
E, aqui, chamamos drawWinston
5
00:00:16,441 --> 00:00:18,361
4 vezes, cada uma com um conjunto
6
00:00:18,361 --> 00:00:21,521
diferente de coordenadas X e Y.
7
00:00:21,521 --> 00:00:23,776
Bem, você me conhece, quando vejo
8
00:00:23,776 --> 00:00:28,379
estas quatro chamadas para drawWinton
que se parecem tanto,
9
00:00:28,379 --> 00:00:31,779
tudo que penso é: como seria
melhor se pudéssemos
10
00:00:31,779 --> 00:00:36,329
usar um loop e chamá-la apenas
uma vez dentro do loop,
11
00:00:36,329 --> 00:00:40,369
mudando X e Y em cada interação do loop.
12
00:00:40,369 --> 00:00:47,036
Para isso, precisamos guardar esses X e Y
em um vetor para poder iterá-lo.
13
00:00:47,036 --> 00:00:50,200
Bem, temos dois conjuntos de valores.
14
00:00:50,200 --> 00:00:56,524
Então, poderíamos ter 2 vetores. Um para
a posição X e outro para a posição Y.
15
00:00:56,524 --> 00:01:02,805
Nas posições X podemos ter
99, 294, 101 e 294,
16
00:01:02,805 --> 00:01:09,946
e nas posições Y teremos
117, 117, 316, 316.
17
00:01:09,946 --> 00:01:17,979
Ok, e agora podemos iterá-los com nosso loop
for var i = 0; i < xPositions.length; i++
18
00:01:17,979 --> 00:01:22,174
Para cada elemento de
xPositions, dizemos
19
00:01:22,174 --> 00:01:30,019
drawWinston ( xPositions[ i ],
yPositions [ i ] );
20
00:01:30,019 --> 00:01:33,926
Ok, vejamos se funciona...
deletando...
21
00:01:33,926 --> 00:01:36,200
Certo, funcionou!
22
00:01:36,200 --> 00:01:40,459
Agora podemos apenas chamar
essa única linha de código que
23
00:01:40,459 --> 00:01:45,518
executa drawWinston, mas o faz
para cada posição do vetor xPositions.
24
00:01:45,518 --> 00:01:48,396
Podemos vir aqui e adicionar
mais a isso ... dizendo...
25
00:01:48,396 --> 00:01:57,874
tipo 10, então adicionamos 1, e então 1,
e então 1, e então 100, e 1.
26
00:01:57,874 --> 00:02:03,472
Agora... agora está ficando um pouco
confuso e não estou gostando,
27
00:02:03,472 --> 00:02:09,914
porque está bem difícil ver que X
se relaciona com qual Y.
28
00:02:09,914 --> 00:02:15,559
Eu quero poder apenas bater o olho e
saber quais são os pares X e Y,
29
00:02:15,559 --> 00:02:22,454
ao invés de ter que garantir que os estou
alinhando corretamente, um sobre o outro
30
00:02:22,454 --> 00:02:26,729
Preciso encontrar uma forma diferente
de armazenar essas posições.
31
00:02:26,729 --> 00:02:30,791
Uma ideia é que poderíamos
armazená-las como objetos.
32
00:02:30,791 --> 00:02:35,780
Pense nisso, cada posição é na verdade
duas informações: o X e o Y.
33
00:02:35,780 --> 00:02:39,106
Então, poderíamos ter um objeto com as
propriedades X e Y,
34
00:02:39,106 --> 00:02:44,002
e poderíamos ter um vetor -de objetos
com todas essas posições X-Y.
35
00:02:44,002 --> 00:02:45,968
Vamos fazer!
36
00:02:45,968 --> 00:02:51,395
Vamos dizer var positions
igual a um vetor.
37
00:02:51,395 --> 00:02:55,852
Mas, cada elemento, ao invés de ser
um número, será um objeto.
38
00:02:55,852 --> 00:03:04,691
Aqui abrimos chave e vamos apenas
dizer X:99, Y:117.
39
00:03:04,691 --> 00:03:13,392
Ok, temos agora nossas posições aqui,
e vamos adicionar outra aqui.
40
00:03:13,392 --> 00:03:32,877
Certo, X deve ser 294, 117, e o terceiro
será 101, 316, e o último é 294 e 316.
41
00:03:32,877 --> 00:03:37,524
Ok! Agora, temos um vetor de objetos onde
cada objeto tem propriedades X e Y.
42
00:03:37,524 --> 00:03:44,228
Aqui em baixo, no loop for, mudamos apenas
isso aqui para iterar por positions.length
43
00:03:44,228 --> 00:03:48,993
Então passamos o objeto.
44
00:03:48,993 --> 00:03:53,238
Agora estamos passando o objeto inteiro,
mas queremos passar o X e o Y,
45
00:03:53,238 --> 00:03:59,548
então precisamos de
positions [ i ].X e positions [ i ].Y
46
00:03:59,548 --> 00:04:00,808
Ta-da!
47
00:04:00,808 --> 00:04:04,999
Agora podemos nos livrar destes
vetores antigos confusos.
48
00:04:04,999 --> 00:04:10,034
Ótimo, parece-me bem melhor e
torna o código mais legível
49
00:04:10,034 --> 00:04:12,959
e sempre que pudermos ter código
mais legível, melhor.
50
00:04:12,959 --> 00:04:14,956
E também está mais fácil adicionar.
51
00:04:14,956 --> 00:04:19,204
Se quisermos adicionar um, só precisamos
adicionar o par junto,
52
00:04:19,204 --> 00:04:25,142
e aí podemos dizer X é 200, Y 200, nos dá um
pequeno Winston aqui no meio.
53
00:04:26,872 --> 00:04:27,961
Beleza.
54
00:04:27,961 --> 00:04:31,266
Agora quero mostrar algo
ainda mais sofisticado.
55
00:04:31,266 --> 00:04:38,635
Percebe que nossa função aceita dois
números e depois os usa.
56
00:04:38,635 --> 00:04:42,166
Bem, poderíamos mudar nossa função
para que espere um objeto
57
00:04:42,166 --> 00:04:45,697
e depois pegue o X e Y do objeto,
58
00:04:45,697 --> 00:04:49,230
o que significa que aqui embaixo só
teríamos que passar o objeto.
59
00:04:50,060 --> 00:04:50,846
Vamos tentar!
60
00:04:50,846 --> 00:04:53,596
Passamos o objeto, agora não funciona.
61
00:04:53,596 --> 00:04:58,208
Isso porque nossa função ainda espera dois
objetos e está recebendo apenas um,
62
00:04:59,278 --> 00:05:00,050
então vamos mudá-la
63
00:05:00,050 --> 00:05:02,370
para dizer que recebe facePosition,
64
00:05:04,220 --> 00:05:06,710
e agora deu erro porque faceX
não está definido,
65
00:05:06,710 --> 00:05:12,196
por que antes estávamos passando faceX
como argumento, mas agora ele não existe,
66
00:05:12,196 --> 00:05:12,862
temos apenas um objeto.
67
00:05:12,862 --> 00:05:21,159
O que podemos fazer, é salvar a posição X
de um objeto dentro da variável faceX.
68
00:05:21,159 --> 00:05:24,945
Estamos dizendo que temos este objeto,
sabemos que ele tem uma propriedade X,
69
00:05:24,945 --> 00:05:28,271
então vamos apenas guardá-la
na variável faceX.
70
00:05:28,871 --> 00:05:33,637
Podemos fazer o mesmo com Y,
então faceY = facePosition.y;
71
00:05:33,637 --> 00:05:34,850
Ta-da!
72
00:05:34,850 --> 00:05:38,167
E então, o resto da função usa
faceX e faceY.
73
00:05:38,167 --> 00:05:40,146
Agora, temos que ter certeza
que soletramos corretamente,
74
00:05:40,146 --> 00:05:44,805
se escrevermos xx, não vai funcionar,
porque não é o que está aqui embaixo
75
00:05:44,805 --> 00:05:48,125
no nosso vetor de objetos. Precisa bater.
76
00:05:48,125 --> 00:05:52,136
Isso é bem legal, porque agora você pode
ter um vetor de objetos,
77
00:05:52,136 --> 00:05:54,117
pode ter funções que recebem objetos
78
00:05:54,117 --> 00:06:00,160
e você vai ver que seus programas ficarão
poderosos com essa estrutura de dados.
79
00:06:00,160 --> 00:06:04,434
Especialmente porque é tão comum querer
junto um par X e Y.
80
00:06:04,434 --> 00:06:08,926
Será especialmente útil nos seus programas
de desenho e animação aqui.
81
00:06:08,926 --> 00:06:10,869
Então, vá fundo e se divirta!
82
00:06:10,869 --> 00:06:15,589
[Legendado por: Fred Guth] [Revisado por: Alef Almeida]