YouTube

Got a YouTube account?

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

Japanese subtitles

← Cola Wars 1 - Solution

Get Embed Code
13 Languages

Showing Revision 2 created 10/30/2015 by Nobuko Hamaguchi.

  1. まず 最初に私があなたに聞いたのは
  2. udacicolaVotesがローカル変数か
    グローバル変数かです
  3. そして あなたはローカル変数だと
    決定すべきでした
  4. これを見つけ出すには変数が宣言された場所
    つまり ここへ行き
  5. そのデータタイプはここなので
    それが宣言されているのが分かります
  6. メソッドの中で宣言されているかどうか
  7. つまり波カッコの中で宣言されているか
    外で宣言されているどうかです
  8. メソッドの中で宣言されている場合
  9. それはローカル変数であることを
    意味しています
  10. 実のところ それはメソッドの中で
    宣言されていることがと明らかです
  11. だから それはローカル変数です
  12. どういうことでしょうか?
  13. 私たちは私たち自身にも
    問いかけるべきです
  14. ローカル変数として何かを示した時
    それで良いかどうか考えましょう
  15. このケースについて考えてみましょう
  16. ここに私たちの携帯があります
  17. そして 私たちは udacicolaについて
    話しています
  18. udacicolaボタンをクリックした時だけに
    注目してみましょう
  19. このボタンをクリックした時
    このメソッドはスタートします
  20. udacicolaVotesを0にセットし
    0であるudacicolaVotesに
  21. 1を加えます
  22. 従って udacicolaVotesは
    1になります
  23. さて この方法の終わりに
    udacicolaVotesはローカル変数なので
  24. このメソッドの終わりにudacicolaVotesは
    いわば死んだようなもので削除されます
  25. ローカル変数なので udacicolaVotesが
    このメソッドの終わりに 破棄される
  26. またはなくなるという事実は
    いくつかの問題を引き起こします
  27. では なぜ問題なのでしょう?
  28. もし それぞれ3人がボタンを押して
    udacicolaに投票したら
  29. あなたはudacicolaVvotesが
    3になるべきだと思うでしょう
  30. ここで実は何が起こっているかと言うと
    ボタンを初めて押したら
  31. udacicolaは0になります
  32. 1つ加えると1になります
  33. そして破棄されます
  34. udacicolaはもう存在していません
  35. 2度目にudacicolaVotesを
    誰かがクリックします
  36. udacicolaVotesは
    また最初から作成されます
  37. 再度宣言されます
  38. なぜなら 覚えていますか?最初に
    udacicolaVotesは基本的に破棄されます
  39. だから再度作り直す必要があります
  40. そして作り直された時
    0にセットされます
  41. さて 再度1を追加します
    しかし 覚えていますか?ここでの値は0です
  42. だから たとえボタンが2度押されたとしても
    udacicolaVotesはまだ1です
  43. そして3度目にボタンが押されても
    同じことが起こります
  44. まだ1のままで 実際にudacicolaVotesは
    この方法の最後には再度破棄されます
  45. これが最初の問題です
  46. ボタンクリックの間で
    状態が保存されていません
  47. 何人の人がudacicolaに
    投票しているかに記憶しません
  48. しかし 他の問題はここにあります
    このコードは実はエラーを投げます
  49. そしてその理由は udacicolaVotesは
  50. ここでその存在が始まる
    またはそのスコープが始まります
  51. そしてこのvoteudacicolaメソッドの最後に
  52. 破棄されます
    存在していません
  53. つまりここにくるとvoteudacicolaは
    本当は存在していないことを意味します
  54. もっと専門的には
    この変数はスコープ外と私たちは言います
  55. スコープはここで宣言されています
    そして ここで終了しました
  56. しかし 私たちはここで
    使用しようとしています
  57. そして使用できません
  58. udacicolaVotesをローカル変数とすることは
    このケースでは正しい選択ではありません
  59. そして私はこの2つのポイントを使って
    なぜなのかまとめる事ができます
  60. それはボタンクリック間で投票数を
    保存していないこと
  61. showMeVotesメソッドの
    スコープ内でないことです
  62. つまり これが実は
    エラーを引き起こします
  63. つまり これは
    実はコンパイルできません
  64. それでは このプログラムの
    他の変数をみてみましょう