< Return to Video

Vetores de Objetos (Versão em Vídeo)

  • 0:00 - 0:04
    Continuemos explorando o que
    podemos fazer com objetos.
  • 0:04 - 0:08
    Voltamos para o programa que
    usamos no tutorial de funções.
  • 0:08 - 0:14
    Este programa tem esta função drawWinston
    que sabe desenhar Winston em certo X e Y.
  • 0:15 - 0:16
    E, aqui, chamamos drawWinston
  • 0:16 - 0:18
    4 vezes, cada uma com um conjunto
  • 0:18 - 0:22
    diferente de coordenadas X e Y.
  • 0:22 - 0:24
    Bem, você me conhece, quando vejo
  • 0:24 - 0:28
    estas quatro chamadas para drawWinton
    que se parecem tanto,
  • 0:28 - 0:32
    tudo que penso é: como seria
    melhor se pudéssemos
  • 0:32 - 0:36
    usar um loop e chamá-la apenas
    uma vez dentro do loop,
  • 0:36 - 0:40
    mudando X e Y em cada interação do loop.
  • 0:40 - 0:47
    Para isso, precisamos guardar esses X e Y
    em um vetor para poder iterá-lo.
  • 0:47 - 0:50
    Bem, temos dois conjuntos de valores.
  • 0:50 - 0:57
    Então, poderíamos ter 2 vetores. Um para
    a posição X e outro para a posição Y.
  • 0:57 - 1:03
    Nas posições X podemos ter
    99, 294, 101 e 294,
  • 1:03 - 1:10
    e nas posições Y teremos
    117, 117, 316, 316.
  • 1:10 - 1:18
    Ok, e agora podemos iterá-los com nosso loop
    for var i = 0; i < xPositions.length; i++
  • 1:18 - 1:22
    Para cada elemento de
    xPositions, dizemos
  • 1:22 - 1:30
    drawWinston ( xPositions[ i ],
    yPositions [ i ] );
  • 1:30 - 1:34
    Ok, vejamos se funciona...
    deletando...
  • 1:34 - 1:36
    Certo, funcionou!
  • 1:36 - 1:40
    Agora podemos apenas chamar
    essa única linha de código que
  • 1:40 - 1:46
    executa drawWinston, mas o faz
    para cada posição do vetor xPositions.
  • 1:46 - 1:48
    Podemos vir aqui e adicionar
    mais a isso ... dizendo...
  • 1:48 - 1:58
    tipo 10, então adicionamos 1, e então 1,
    e então 1, e então 100, e 1.
  • 1:58 - 2:03
    Agora... agora está ficando um pouco
    confuso e não estou gostando,
  • 2:03 - 2:10
    porque está bem difícil ver que X
    se relaciona com qual Y.
  • 2:10 - 2:16
    Eu quero poder apenas bater o olho e
    saber quais são os pares X e Y,
  • 2:16 - 2:22
    ao invés de ter que garantir que os estou
    alinhando corretamente, um sobre o outro
  • 2:22 - 2:27
    Preciso encontrar uma forma diferente
    de armazenar essas posições.
  • 2:27 - 2:31
    Uma ideia é que poderíamos
    armazená-las como objetos.
  • 2:31 - 2:36
    Pense nisso, cada posição é na verdade
    duas informações: o X e o Y.
  • 2:36 - 2:39
    Então, poderíamos ter um objeto com as
    propriedades X e Y,
  • 2:39 - 2:44
    e poderíamos ter um vetor -de objetos
    com todas essas posições X-Y.
  • 2:44 - 2:46
    Vamos fazer!
  • 2:46 - 2:51
    Vamos dizer var positions
    igual a um vetor.
  • 2:51 - 2:56
    Mas, cada elemento, ao invés de ser
    um número, será um objeto.
  • 2:56 - 3:05
    Aqui abrimos chave e vamos apenas
    dizer X:99, Y:117.
  • 3:05 - 3:13
    Ok, temos agora nossas posições aqui,
    e vamos adicionar outra aqui.
  • 3:13 - 3:33
    Certo, X deve ser 294, 117, e o terceiro
    será 101, 316, e o último é 294 e 316.
  • 3:33 - 3:38
    Ok! Agora, temos um vetor de objetos onde
    cada objeto tem propriedades X e Y.
  • 3:38 - 3:44
    Aqui em baixo, no loop for, mudamos apenas
    isso aqui para iterar por positions.length
  • 3:44 - 3:49
    Então passamos o objeto.
  • 3:49 - 3:53
    Agora estamos passando o objeto inteiro,
    mas queremos passar o X e o Y,
  • 3:53 - 4:00
    então precisamos de
    positions [ i ].X e positions [ i ].Y
  • 4:00 - 4:01
    Ta-da!
  • 4:01 - 4:05
    Agora podemos nos livrar destes
    vetores antigos confusos.
  • 4:05 - 4:10
    Ótimo, parece-me bem melhor e
    torna o código mais legível
  • 4:10 - 4:13
    e sempre que pudermos ter código
    mais legível, melhor.
  • 4:13 - 4:15
    E também está mais fácil adicionar.
  • 4:15 - 4:19
    Se quisermos adicionar um, só precisamos
    adicionar o par junto,
  • 4:19 - 4:25
    e aí podemos dizer X é 200, Y 200, nos dá um
    pequeno Winston aqui no meio.
  • 4:27 - 4:28
    Beleza.
  • 4:28 - 4:31
    Agora quero mostrar algo
    ainda mais sofisticado.
  • 4:31 - 4:39
    Percebe que nossa função aceita dois
    números e depois os usa.
  • 4:39 - 4:42
    Bem, poderíamos mudar nossa função
    para que espere um objeto
  • 4:42 - 4:46
    e depois pegue o X e Y do objeto,
  • 4:46 - 4:49
    o que significa que aqui embaixo só
    teríamos que passar o objeto.
  • 4:50 - 4:51
    Vamos tentar!
  • 4:51 - 4:54
    Passamos o objeto, agora não funciona.
  • 4:54 - 4:58
    Isso porque nossa função ainda espera dois
    objetos e está recebendo apenas um,
  • 4:59 - 5:00
    então vamos mudá-la
  • 5:00 - 5:02
    para dizer que recebe facePosition,
  • 5:04 - 5:07
    e agora deu erro porque faceX
    não está definido,
  • 5:07 - 5:12
    por que antes estávamos passando faceX
    como argumento, mas agora ele não existe,
  • 5:12 - 5:13
    temos apenas um objeto.
  • 5:13 - 5:21
    O que podemos fazer, é salvar a posição X
    de um objeto dentro da variável faceX.
  • 5:21 - 5:25
    Estamos dizendo que temos este objeto,
    sabemos que ele tem uma propriedade X,
  • 5:25 - 5:28
    então vamos apenas guardá-la
    na variável faceX.
  • 5:29 - 5:34
    Podemos fazer o mesmo com Y,
    então faceY = facePosition.y;
  • 5:34 - 5:35
    Ta-da!
  • 5:35 - 5:38
    E então, o resto da função usa
    faceX e faceY.
  • 5:38 - 5:40
    Agora, temos que ter certeza
    que soletramos corretamente,
  • 5:40 - 5:45
    se escrevermos xx, não vai funcionar,
    porque não é o que está aqui embaixo
  • 5:45 - 5:48
    no nosso vetor de objetos. Precisa bater.
  • 5:48 - 5:52
    Isso é bem legal, porque agora você pode
    ter um vetor de objetos,
  • 5:52 - 5:54
    pode ter funções que recebem objetos
  • 5:54 - 6:00
    e você vai ver que seus programas ficarão
    poderosos com essa estrutura de dados.
  • 6:00 - 6:04
    Especialmente porque é tão comum querer
    junto um par X e Y.
  • 6:04 - 6:09
    Será especialmente útil nos seus programas
    de desenho e animação aqui.
  • 6:09 - 6:11
    Então, vá fundo e se divirta!
  • 6:11 - 6:16
    [Legendado por: Fred Guth] [Revisado por: Alef Almeida]
Title:
Vetores de Objetos (Versão em Vídeo)
Description:

Este é apenas uma captura de tela da nossa programação interativa, preparada de forma a tornar a legendagem e tradução mais fáceis. É melhor assistir nossa conversa aqui:
https://www.khanacademy.org/cs/programming/

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

Portuguese, Brazilian subtitles

Revisions