0:00:00.387,0:00:04.096
Continuemos explorando o que [br]podemos fazer com objetos.
0:00:04.109,0:00:08.305
Voltamos para o programa que[br]usamos no tutorial de funções.
0:00:08.305,0:00:14.343
Este programa tem esta função drawWinston[br]que sabe desenhar Winston em certo X e Y.
0:00:14.521,0:00:16.441
E, aqui, chamamos drawWinston[br]
0:00:16.441,0:00:18.361
4 vezes, cada uma com um conjunto
0:00:18.361,0:00:21.521
diferente de coordenadas X e Y.
0:00:21.521,0:00:23.776
Bem, você me conhece, quando vejo
0:00:23.776,0:00:28.379
estas quatro chamadas para drawWinton[br]que se parecem tanto,
0:00:28.379,0:00:31.779
tudo que penso é: como seria[br]melhor se pudéssemos
0:00:31.779,0:00:36.329
usar um loop e chamá-la apenas [br]uma vez dentro do loop,
0:00:36.329,0:00:40.369
mudando X e Y em cada interação do loop.
0:00:40.369,0:00:47.036
Para isso, precisamos guardar esses X e Y[br]em um vetor para poder iterá-lo.
0:00:47.036,0:00:50.200
Bem, temos dois conjuntos de valores.
0:00:50.200,0:00:56.524
Então, poderíamos ter 2 vetores. Um para[br]a posição X e outro para a posição Y.
0:00:56.524,0:01:02.805
Nas posições X podemos ter [br]99, 294, 101 e 294,
0:01:02.805,0:01:09.946
e nas posições Y teremos[br]117, 117, 316, 316.
0:01:09.946,0:01:17.979
Ok, e agora podemos iterá-los com nosso loop[br]for var i = 0; i < xPositions.length; i++
0:01:17.979,0:01:22.174
Para cada elemento de[br]xPositions, dizemos
0:01:22.174,0:01:30.019
drawWinston ( xPositions[ i ],[br]yPositions [ i ] );
0:01:30.019,0:01:33.926
Ok, vejamos se funciona...[br]deletando...
0:01:33.926,0:01:36.200
Certo, funcionou!
0:01:36.200,0:01:40.459
Agora podemos apenas chamar [br]essa única linha de código que
0:01:40.459,0:01:45.518
executa drawWinston, mas o faz[br]para cada posição do vetor xPositions.
0:01:45.518,0:01:48.396
Podemos vir aqui e adicionar [br]mais a isso ... dizendo...
0:01:48.396,0:01:57.874
tipo 10, então adicionamos 1, e então 1, [br]e então 1, e então 100, e 1.
0:01:57.874,0:02:03.472
Agora... agora está ficando um pouco[br]confuso e não estou gostando,
0:02:03.472,0:02:09.914
porque está bem difícil ver que X[br]se relaciona com qual Y.
0:02:09.914,0:02:15.559
Eu quero poder apenas bater o olho e[br]saber quais são os pares X e Y,
0:02:15.559,0:02:22.454
ao invés de ter que garantir que os estou[br]alinhando corretamente, um sobre o outro
0:02:22.454,0:02:26.729
Preciso encontrar uma forma diferente[br]de armazenar essas posições.
0:02:26.729,0:02:30.791
Uma ideia é que poderíamos [br]armazená-las como objetos.
0:02:30.791,0:02:35.780
Pense nisso, cada posição é na verdade[br]duas informações: o X e o Y.
0:02:35.780,0:02:39.106
Então, poderíamos ter um objeto com as[br]propriedades X e Y,
0:02:39.106,0:02:44.002
e poderíamos ter um vetor -de objetos[br]com todas essas posições X-Y.
0:02:44.002,0:02:45.968
Vamos fazer!
0:02:45.968,0:02:51.395
Vamos dizer var positions[br]igual a um vetor.
0:02:51.395,0:02:55.852
Mas, cada elemento, ao invés de ser[br]um número, será um objeto.
0:02:55.852,0:03:04.691
Aqui abrimos chave e vamos apenas[br]dizer X:99, Y:117.
0:03:04.691,0:03:13.392
Ok, temos agora nossas posições aqui, [br]e vamos adicionar outra aqui.
0:03:13.392,0:03:32.877
Certo, X deve ser 294, 117, e o terceiro[br]será 101, 316, e o último é 294 e 316.
0:03:32.877,0:03:37.524
Ok! Agora, temos um vetor de objetos onde[br]cada objeto tem propriedades X e Y.
0:03:37.524,0:03:44.228
Aqui em baixo, no loop for, mudamos apenas[br]isso aqui para iterar por positions.length
0:03:44.228,0:03:48.993
Então passamos o objeto.
0:03:48.993,0:03:53.238
Agora estamos passando o objeto inteiro,[br]mas queremos passar o X e o Y,
0:03:53.238,0:03:59.548
então precisamos de [br]positions [ i ].X e positions [ i ].Y
0:03:59.548,0:04:00.808
Ta-da!
0:04:00.808,0:04:04.999
Agora podemos nos livrar destes[br]vetores antigos confusos.
0:04:04.999,0:04:10.034
Ótimo, parece-me bem melhor e[br]torna o código mais legível
0:04:10.034,0:04:12.959
e sempre que pudermos ter código[br]mais legível, melhor.
0:04:12.959,0:04:14.956
E também está mais fácil adicionar.
0:04:14.956,0:04:19.204
Se quisermos adicionar um, só precisamos[br]adicionar o par junto,
0:04:19.204,0:04:25.142
e aí podemos dizer X é 200, Y 200, nos dá um[br]pequeno Winston aqui no meio.
0:04:26.872,0:04:27.961
Beleza.
0:04:27.961,0:04:31.266
Agora quero mostrar algo[br]ainda mais sofisticado.
0:04:31.266,0:04:38.635
Percebe que nossa função aceita dois[br]números e depois os usa.
0:04:38.635,0:04:42.166
Bem, poderíamos mudar nossa função[br]para que espere um objeto
0:04:42.166,0:04:45.697
e depois pegue o X e Y do objeto,
0:04:45.697,0:04:49.230
o que significa que aqui embaixo só[br]teríamos que passar o objeto.
0:04:50.060,0:04:50.846
Vamos tentar!
0:04:50.846,0:04:53.596
Passamos o objeto, agora não funciona.
0:04:53.596,0:04:58.208
Isso porque nossa função ainda espera dois[br]objetos e está recebendo apenas um,
0:04:59.278,0:05:00.050
então vamos mudá-la
0:05:00.050,0:05:02.370
para dizer que recebe facePosition,[br]
0:05:04.220,0:05:06.710
e agora deu erro porque faceX[br]não está definido,
0:05:06.710,0:05:12.196
por que antes estávamos passando faceX[br]como argumento, mas agora ele não existe,
0:05:12.196,0:05:12.862
temos apenas um objeto.
0:05:12.862,0:05:21.159
O que podemos fazer, é salvar a posição X[br]de um objeto dentro da variável faceX.
0:05:21.159,0:05:24.945
Estamos dizendo que temos este objeto,[br]sabemos que ele tem uma propriedade X,
0:05:24.945,0:05:28.271
então vamos apenas guardá-la[br]na variável faceX.
0:05:28.871,0:05:33.637
Podemos fazer o mesmo com Y, [br]então faceY = facePosition.y;
0:05:33.637,0:05:34.850
Ta-da!
0:05:34.850,0:05:38.167
E então, o resto da função usa[br]faceX e faceY.
0:05:38.167,0:05:40.146
Agora, temos que ter certeza[br]que soletramos corretamente,
0:05:40.146,0:05:44.805
se escrevermos xx, não vai funcionar,[br]porque não é o que está aqui embaixo
0:05:44.805,0:05:48.125
no nosso vetor de objetos. Precisa bater.
0:05:48.125,0:05:52.136
Isso é bem legal, porque agora você pode[br]ter um vetor de objetos,
0:05:52.136,0:05:54.117
pode ter funções que recebem objetos
0:05:54.117,0:06:00.160
e você vai ver que seus programas ficarão [br]poderosos com essa estrutura de dados.
0:06:00.160,0:06:04.434
Especialmente porque é tão comum querer[br]junto um par X e Y.
0:06:04.434,0:06:08.926
Será especialmente útil nos seus programas[br]de desenho e animação aqui.
0:06:08.926,0:06:10.869
Então, vá fundo e se divirta!
0:06:10.869,0:06:15.589
[Legendado por: Fred Guth] [Revisado por: Alef Almeida]