YouTube

Got a YouTube account?

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

Spanish subtitles

← 07-16 Guerra de colas 1 - Solución

Get Embed Code
13 Languages

Showing Revision 3 created 10/23/2015 by Néstor Noziglia.

  1. Lo primero que te pregunté
  2. era si udacicolaVotes
    es una variable local o global.
  3. Debes haber notado
    que es una variable local.
  4. Para averiguarlo ve a donde
    está declarada la variable, aquí.
  5. Sabes que se ha declarado
    porque está escrita aquí.
  6. ¿Se ha declarado dentro de un método,
    entre estas dos llaves,
  7. o fuera de ese método?
  8. Si se ha declarado dentro de un método,
    quiere decir que es una variable local.
  9. Aquí se ve claramente
    que se ha declarado dentro de un método.
  10. Así que es una variable local.
  11. ¿Qué significa esto?
  12. La pregunta que deberíamos hacernos es
  13. si se debería haber declarado
    como una variable local.
  14. ¿Debería?
  15. Vamos a pensar este caso.
  16. Aquí está nuestro teléfono.
  17. Hemos estado hablando sobre Udacicola,
  18. así que fijémonos únicamente
    en cuando pulsamos el botón de Udacicola.
  19. Cuando pulsamos este botón,
    empieza a ejecutarse este método.
  20. Pone en cero udacicolaVotes
  21. y luego añade 1 a udacicolaVotes,
    que está en cero.
  22. Y udacicolaVotes pasa a ser 1.
  23. Como udacicolaVotes es una variable local,
  24. cuando acaba este método
    se destruye, se borra.
  25. El hecho de que udacicolaVotes se borre
    o se destruya al final de este método,
  26. dado que es una variable local,
    provoca algunos problemas.
  27. ¿Por qué?
  28. Pensarás que si tres personas diferentes
    votan por Udacicola apretando este botón
  29. udacicolaVotes debería ser 3.
  30. Lo que en verdad ocurre
    es que la primera vez que pulsas el botón
  31. udacicolaVotes es cero.
  32. Después se añade 1,
  33. y luego se borra, ya no existe.
  34. La segunda vez que alguien pulsa
    para votar Udacicola
  35. udacicolaVotes vuelve a empezar de cero,
    vuelve a declararse.
  36. Recuerda que la primera vez
    se había destruido,
  37. así que vuelve a ejecutarse.
  38. Y cuando vuelve a ejecutarse,
    se pone en cero.
  39. Vuelve a añadirse un 1
    pero recuerda que el valor era cero,
  40. así que udacicolaVotes es 1
    aunque el botón se haya pulsado dos veces.
  41. Y lo mismo ocurre
    cuando se pulsa por tercera vez.
  42. Todavía está en 1 y vuelve a borrarse
    al final de este método.
  43. Ese es el primer problema,
  44. que no se está guardando el estado
    conforme se pulsa el botón.
  45. No se guarda el número de personas
    que están votando.
  46. Pero hay otro problema aquí abajo:
  47. este código va a generar un error.
  48. El motivo es que, si lo recuerdas,
    he dicho que udacicolaVotes
  49. aparece aquí,
    su visibilidad empieza aquí.
  50. Y, al final del método voteUdacicola,
  51. se destruye, deja de existir.
  52. Lo que significa que cuando vengo aquí,
    udacicolaVotes ya no existe.
  53. Técnicamente decimos
    que esta variable no es visible.
  54. Su visibilidad está aquí.
  55. Se declara aquí y se acaba aquí.
  56. Pero estamos intentando usarla aquí
    y no se puede.
  57. Que udacicolaVotes sea una variable local
    no es una decisión acertada en este caso.
  58. Resumo los motivos en dos puntos:
  59. no guarda los votos
    al pulsar varias veces el botón
  60. y no es visible
    dentro del método showMeVotes,
  61. así que esto dará error.
  62. Esto de aquí no se compilará.
  63. Vamos a echar un vistazo
    a la otra variable de este programa.