YouTube

Got a YouTube account?

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

Russian subtitles

← 07-16 Cola Wars 1 - Solution

Get Embed Code
13 Languages

Showing Revision 1 created 10/11/2015 by sp14.

  1. Первое, о чем я вас спросила,
  2. это является переменная udacicolaVotes
    локальной или глобальной.
  3. И вы должны были определить,
    что она локальная.
  4. Чтобы понять это, смотрим туда,
    где объявлена переменная, это здесь
  5. и мы знаем, что она объявлена,
    так как здесь прописан тип данных.
  6. Вы видите, она объявлена внутри метода,
    то есть между двумя волнистыми скобками,
  7. или же снаружи метода?
  8. Если переменная объявлена внутри метода,
  9. это будет значить, что она локальная,
  10. и мы ясно видим, что она действительно
    объявлена внутри метода.
  11. Значит, эта переменная - локальная.
  12. Хорошо, а что это означает?
  13. Нам стоит также спросить себя,
  14. правильно ли мы поступили,
    объявив какую-либо переменную локальной?
  15. Давайте поразмышляем на данном примере.
  16. Вот наш телефон.
  17. Мы говорили об udacicola, так что
  18. сосредоточимся на том,
    когда мы нажимаем эту кнопку.
  19. При нажатии на кнопку запускается метод.
  20. Количество голосов за udacicola
    задается нулевым,
  21. затем прибавляется один к udacicolaVotes,
    которое равно нулю.
  22. Так udacicolaVotes становится
    равным единице.
  23. udacicolaVotes - локальная переменная,
    так что по окончании этого метода
  24. она, на самом деле, как бы умирает,
    или удаляется.
  25. Факт, что udacicolaVotes выбрасывается,
    исчезает по окончании метода
  26. приносит, в действительности,
    пару проблем.
  27. Так почему это проблема?
  28. Вы можете подумать, что если
    три различных человека голосуют за
  29. udacicola нажатием кнопки,
    то udacicolaVvotes станет равно трем.
  30. На самом деле, когда кнопку
    нажимают впервые,
  31. значение udacicola становится равным нулю.
  32. При следующем нажатии
    оно станет единицей.
  33. А затем отправится в мусор.
  34. Перестанет существовать.
  35. Когда udacicolaVotes
    нажимают во второй раз,
  36. она, на самом деле, заново создается.
  37. Заново объявляется.
  38. Так как, вспомните, в первый раз она,
    по сути, была выброшена.
  39. Поэтому ее необходимо переделать.
  40. И снова ей придается
    нулевое значение.
  41. Теперь мы снова прибавляем один, помня,
    что значение переменной равно нулю.
  42. Так что udacicolaVotes все еще единица,
    хотя на кнопку уже нажали дважды.
  43. И то же самое происходит
    при третьем нажатии,
  44. она все еще единица и в действительности
    отправляется в мусор по окончании метода.
  45. Это первая проблема.
  46. Это не совсем сохранение состояния
    между нажатиями кнопки.
  47. О том, как много людей
    проголосовали за udacicola.
  48. Вторая проблема - вот здесь, этот код
    в действительности выдаст ошибку.
  49. И причина лежит в том, что,
    как я уже говорила, udacicolaVotes
  50. в своем роде зарождается здесь,
    ее область действия начинается именно тут.
  51. А затем, по окончании метода voteudacicola
  52. отправляется на свалку,
    прекращает существовать.
  53. Это значит, что когда я обращаюсь сюда,
    udacicolaVotes уже не существует.
  54. Говоря техническим языком,
    мы вне области действия переменной.
  55. Область ее действия была здесь, здесь она
    была объявлена и здесь она закончилась.
  56. Мы же пытаемся использовать ее тут.
  57. А она не может быть использована.
  58. Назначение udacicolaVotes локальной
    не было верным решением в нашем случае.
  59. Я могу суммировать все это двумя пунктами.
  60. Она не сохраняет голоса между
    нажатиями кнопки и находится
  61. вне области действия метода showMeVotes.
  62. Так что это вызовет ошибки.
  63. В действительности код не будет скомпилирован.
  64. Посмотрим на другую
    переменную данной программы.