YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Portuguese, Brazilian subtitles

← 07-16 Cola Wars 1 - Solution

Get Embed Code
13 Languages

Showing Revision 2 created 12/17/2015 by Fran Ontanaya.

  1. Então a primeira coisa
    que perguntei a você,
  2. foi se udacicolaVotes
    é uma variável local ou uma variável global.
  3. E você deveria ter respondido
    que é uma variável local.
  4. Bem, para descobrir isto, você vai para
    onde a variável é declarada, que é
  5. aqui, e você sabe que é declarado,
    porque o tipo de dado é aqui mesmo.
  6. E você vê que é declarada dentro de um
    método, ou seja, entre as duas
  7. chaves aqui, ou
    é declarada fora do método?
  8. Agora, se ele é declarado
    dentro de um método,
  9. que significa que é uma
    variável local, e
  10. podemos ver muito claramente que é
    na verdade declarada dentro de um método.
  11. Portanto, é uma variável local.
  12. Bem, o que isso significa?
  13. Devemos também nos perguntar,
  14. se eu declarei algo como uma variável
    local, eu deveria tê-lo feito?
  15. Vamos pensar sobre isto neste caso.
  16. Aqui está o nosso celular.
  17. E nós temos falado sobre o
    botão udacicola, assim
  18. vamos apenas focar quando
    clicarmos no botão udacicola.
  19. Ao clicarmos neste botão,
    este método inicializa.
  20. Ele define votos udacicola a zero, e
    depois, adiciona um a udacicolaVotes,
  21. que é zero.
  22. Assim, udacicolaVotes
    se torna um.
  23. Agora, por udacicolaVotes ser uma
    variável local, no fim deste método,
  24. na verdade meio que morre,
    ou é apagado.
  25. O fato do udacicolaVotes ser
    descartadom ou apagao, no fim deste método
  26. é por ele ser uma variável local,
    causa alguns problemas.
  27. Então, por que este é um problema?
  28. Bem, você pensaria que se
    três pessoas diferentes votassem
  29. udacicola clicando no botão,
    aquele udacicolaVvotes deveria ser três.
  30. Bem, o que realmente acontece é que
    na primeira vez que você clica no
  31. botão, udacicola se torna zero.
  32. Ela recebe um adicionado a ele,
    tornando-se um.
  33. E então ele vai para a
    lixeira.
  34. Ela não existe mais.
  35. A segunda vez que alguém
    clicar em udacicolaVotes,
  36. bem udacicolaVotes é
    todo refeito.
  37. É declarado novamente.
  38. Porque,lembre-se, na primeira vez
    tinha essencialmente sido descartado.
  39. Por isto, precisa ser refeito.
  40. E quando ele permanece,
    ele é definido como zero.
  41. Agora adicionamos um novo para ele,
    mas lembre-se que o valor é zero.
  42. Então udacicolaVotes ainda é um,
    mesmo depois de se clicar duas vezes.
  43. E a mesma coisa acontece quando
    for clicado pela terceira vez,
  44. ainda é um e é, na verdade,
    descartado no final deste método.
  45. Então esse é o primeiro problema.
  46. Não é realmente salvar o estado
    entre cliques de botão.
  47. Sobre quantas pessoas votou
    udacicola.
  48. Mas outro problema aqui embaixo,
    este código na verdade errará.
  49. E o raciocínio para isso é porque
    lembre-se, eu disse que udacicolaVotes
  50. meio que começa a existir ou
    seu escopo começa bem aqui.
  51. E, em seguida, no final de
    este método voteudacicola.
  52. É lixo, qnã existe.
  53. O que significa que quando eu vir para cá,
    udacicolaVotes realmente não existe.
  54. Mais tecnicamente, dizemos que
    esta variável está fora do escopo.
  55. O seu escopo era aqui, ficou
    declarado aqui, e terminou aqui.
  56. Mas estamos tentando usá-lo aqui.
  57. E não pode ser utilizado.
  58. Tendo udacicolaVotes para um local
    não foi uma decisão certa neste caso.
  59. E eu posso resumir as razões
    com estes dois pontos.
  60. Não está salvando o voto entre
    cliques de botão, e não está no escopo
  61. para o método showmevotes.
  62. Então, isto vai realmente causará erros.
  63. Então, isto realmente não compilará.
  64. Bem, então vamos olhar a outra
    variável deste programa.