‫さて､ お帰りなさい｡
‫このビデオでは､ 私たちが持っていたバグを修正し､ それをどのように解決するかを見ていきます｡
‫この例では､ ごく基本的なものなんですね｡
‫そして､ 私たちは､ この方法がロジックを正しく行うものであることを本当に知っているのです｡
‫つまり､ 友達がパーティーの友達かどうかを判断するものですね｡
‫そして､ これは一般的にデバッグに役立つものです｡ なぜなら､ 特定のメソッドが何をするのかがわかれば､
‫その時点でブレークポイントを作ることができるからです｡
‫わかりました｡
‫ですから､ もしあなたが今まで使ったことも見たこともないようなプログラムで仕事をするのであれば､ もちろん､
‫まず､ そのプログラムについて調べ､ すべてのメソッドが何をするものかを理解する必要があります｡
‫だからこそ､ ここで､ もちろん､ まとめがあると便利なのですが｡
‫わかりました｡
‫では､ 説明してください｡
‫なるほど｡
‫リストの役割は？
‫この方法の概要は？
‫ですから､ ここは3重のステップで､ あとはちょっとしたサマリーをつければいいんです｡
‫つまり､ 誰がパーティーフレンドなのか､ パーティーフレンドが誰になるのか､ そういうことを把握するためのロジックなんですね｡
‫ここは完璧な英語ではありませんが､ 考え方は理解してもらえたと思います｡
‫だから､ 一度やれば､ わかるよ､ 大丈夫｡
‫よし､ ここで理屈を言う｡
‫そして､ 私たちのプログラムはそれ自体で機能するのですね？
‫もちろん､ 私たち､ つまり長い名前の友達は表示され､ 短い名前の友達は表示されないことを除けば､ ほぼ意図したとおりに動いています｡
‫つまり､ 何かを選択するロジックに問題があるのでしょう｡
‫だから､ ここではすでに見ることができたのです｡
‫わかった､ たぶんね｡
‫このメソッドで問題が発生しているので､ このブレークポイントとこのブレークポイントを取り除くことができます｡
‫そして､ ここで私たちのメソッドを見てもらうことができます｡
‫そこで､ ブレークポイントを追加するか､ パーティフレンドメソッドを取得すれば､ 調べることができます｡
‫では､ さっそく始めてみましょう｡
‫そして､ 大切なのは､ もちろん価値観ですよね｡
‫だから､ その値を知りたいのです｡
‫この場合､ 最短の名前に興味がありますし､ 長さにも興味があります｡
‫そこで､ 私たちは次のステップに進みます｡
‫そして､ リストが7つの値で構成されていることがわかりますので､ 大丈夫です｡
‫だから､ これは有効だと思われます｡
‫友達もみんな入っていますよ｡
‫だから､ それまでは何も問題ないようです｡
‫そして､ 次のステップに進みます｡
‫だから､ 私たちには私たちの目があるのです｡
‫カウンターで､ ゼロになった｡
‫よし､ これでOCだ｡
‫そして､ 割引のカウントが7になったので､ 次のステップに進むことができます｡
‫さて､ ここで比較をしてみましょう｡
‫リストIの長さが最短の長さより大きい場合｡
‫そして､ そこには､ 最も短い名前がフランクであることがわかります｡
‫ということで､ まずはこの1枚｡
‫そうだろ？
‫だから､ このリストはフランクから始まるのです｡
‫だから､ リストIで､ ゼロになると､ フランクがいることになる｡
‫だから､ それでいいんです｡
‫さて､ どうやらif文のこの条件は真でなかったようなので､ 次のステップに進みましょう｡
‫わかりました｡
‫それで､ 次のイテレーションや次のステップに進むと､ また比較をしているのです｡
‫これで､ リストがまだ7人であることがわかる｡
‫そして､ 文字列の長さが3で返されるものと､ 5で返されるものがあったんです｡
‫それで､ どうしたんですか？
‫ジョーに注目しているのですが､ ジョーはフランクより短い名前なので､ 次に登場するはずです｡
‫そしてそれは､ 私たちがプログラムを書いたからこそわかることなのです｡
‫でも､ なぜか確かに､ この名前はまだフランクなんです｡
‫そうすれば､ この時点で私たちは自分たちを実現することができるのです｡
‫わかりました｡
‫だから､ おそらくここにエラーがあるということなのでしょう｡
‫つまり､ 本来は less than all right か smaller than であるべきなのに､ greater と比較しているのです｡
‫そして､ ブレークポイントを解除して､ もう一度プログラムを実行すると､ 次のようになります｡
‫では､ 一番短い名前､ ジョーとD､ フランクとマリアを紹介します｡
‫なるほど､ それは素晴らしい｡
‫それで今､ 私たちのプログラムは無料に戻りました｡
‫まあ､ もちろん､ ここでも問題は山積みですから｡
‫そのひとつは､ フランク､ ジョー､ ミシェルなどのリストがあります｡
‫わかりました｡
‫そこで､ 何が入っているかわかるように､ 手動でリストを作成しました｡
‫でも､ 例えば､ 10人を招待しようとしたら､ 娘が7人のリストを出してきたとします｡
‫では､ このコードを実行してみましょう｡
‫と｡
‫例外があるんです｡
‫完璧です｡
‫それが例外の素晴らしいところなんですね｡
‫なぜなら､ 先ほど見たように､ バグに気づかないと､ 修正するのが超困難な場合があるからです｡
‫そして､ ここでは､ 範囲外の例外インデックスが範囲外であった引数は､ 非負で､ コレクションのサイズよりも小さくなければなりません｡
‫そこで､ これに関する詳細を表示することができます｡
‫この例外についてもう少し詳しく見てみると､ 必要なことがわかると思います｡
‫そうですね｡
‫だから､ たくさんの情報がある｡
‫たいていの場合､ それはやりすぎです｡
‫しかし､ これはリストの範囲外の要素にアクセスしようとしていることを意味します｡
‫では､ 何が原因なのでしょうか？
‫まあ､ ここに行けるように､ アクセスしようとしているリストかもしれませんね｡
‫そして､ 例外があることがわかります｡
‫リストがある､ カウントゼロだ｡
‫それで､ どうしたんですか？
‫なぜリストがゼロなのか？
‫なぜなら､ リストが7つになる前に見たからです｡
‫そうですね｡
‫では､ なぜいきなりリストがゼロになるのか｡
‫なぜなら､ 私たちは決して本気ではないからです｡
‫リストを見て､ リストを削除しました｡
‫そうですね｡
‫まあね｡
‫私たちが行ったのは､ リストの要素を1つ削除することです｡
‫そこで､ 私たちは「List that remove」と言いました｡
‫そして､ これはいわば初心者のミスで､ 先ほどお話したように参照渡しをするわけですから｡
‫価値で渡すのではありません｡
‫と言うと､ 次のような違いがあります｡
‫ここにリストが欲しいということ｡
‫そして､ このメソッドが呼ばれると､ つまりここでは､ get party friendsが呼ばれ､ friendsというリストを渡しているのです｡
‫このリストを渡していますが､ これは値を渡すという意味ではなく､
‫実際には値への参照を渡しています｡
‫つまり､ コンピュータのメモリに保存されているのです｡
‫そうですね｡
‫そして､ その値を参照するのです｡
‫そこで､ よし､ この友達ばかりの思い出の場所に行ってみたい､ と言うわけです｡
‫だから､ フランクのところにも行きたいし､ ジョーのところにも行きたいし､ いろいろあるんです｡
‫ですから､ 一度このリストを操作して､ 例えば､ そのリストの要素を削除します｡
‫値でコピーを作らず､ そのままリストから要素を削除していくのです｡
‫でも､ 実際にはこのメモリの中で削除しているんです｡
‫つまり､ リストからフランクを削除し､ ジョーを削除しているのです｡
‫ですから､ これを各ループで使って仲間をチェックすれば､ かなりわかりやすいと思います｡
‫では､ 実際に何かを見ることができるように､ もう一度縮小してみます｡
‫だから､ このfor each loopを繰り返しているんだ｡
‫そして､ ご覧の通り､ アンジェリーナだけが表示されています｡
‫なぜアンジェリーナだけなのか？
‫だって､ アンジェリーナは7人目だし､ 6人抜いただけだし｡
‫それをもう一度4人でやってみましょう｡
‫ただ､ マリア､ カルロス､ アンジェリーナが残っているのがわかると思います｡
‫だから､ ほら､ 実はミシェルなんです｡
‫わかりました｡
‫だからなおさら､ 今はミシェル､ カルロス､ アンジェリーナの3人がリストに残っているという､ とても奇妙な状況になっています｡
‫そのため､ 常に誰かをリストから削除することになり､ 多くの問題が発生します｡
‫他の誰かが､ あるいは私たちがこの友人リストをどこかで使用すると､ リストが空になってしまい､ 破損してしまうからです｡
‫初期値が入っていないことになりますから､ それはやってはいけないことなんです｡
‫そこでできることは､ ここにバッファを作ることです｡
‫そこで､ bufferという新しい変数を作って､ それが新しい文字列のリストになるようにするだけです｡
‫そして､ それは私のリストになるので､ この時点で渡された私のリストを渡すだけです｡
‫わかりました｡
‫そして､ それをバッファに格納する｡
‫だから､ 新しいリストになるんです｡
‫そして今､ 私たちは､ もちろん､ バッファから削除しなければならないことを確認しました｡
‫そこで､ このコピーのリストから削除することにします｡
‫リスト自体から削除することはありません｡
‫わかりました｡
‫そこが重要な差別化ポイントです｡
‫現在､ コピーから削除しています｡
‫さて､ もちろんここでもバッファを使ってパーティーフロントを
‫わかりました｡
‫そうでなければ､ リストから何かをリリースすることはできないからです｡
‫それが必ず7人になる｡
‫そのため､ このバッファリストでも必ず7人になってしまい､ 正しく動作しなくなるのです｡
‫わかりました｡
‫フランク､ ジョー､ ミッシェル､ すべてがリストに残っているわけです｡
‫なるほど｡
‫だから､ for eachループはうまくいくんです｡
‫それに比べて､ もう1つループを作り､ パーティーの友達と一緒にチェックすることで､ パーティーの友達が7人なのか3人なのかを確認することができます｡
‫だから､ 実は4人目の仲間だということがわかる｡
‫だから全員いるし､ ジョーとフランクとマリアもまだいる｡
‫つまり､ 友達リストを削除したのではなく､ バッファリストから要素を削除したのです｡
‫そして今､ もちろんこれはもう必要ない｡
‫だから､ これはあくまでテスト用で､ デバッグのためだったんです｡
‫しかし､ 今はうまく機能するプログラムになっています｡
‫これで､ よし､ もうバグはない､ と言えるでしょう｡
‫でも､ 前にあったバグがまだ直ってないんですよ､ ここに10を入力すると｡
‫私たちなら｡
‫バグやエラーが発生しましたか？
‫実は､ 引数範囲外例外｡
‫では､ ここで何ができるのか？
‫なぜなら､ 存在しない要素にアクセスしようとしているからです｡
‫つまり､ リストが空であるにもかかわらず､ リスト要素にアクセスしようとしているのです｡
‫そのため､ リストカウントは0です｡
‫このビデオは10分以上あるので､ 超長いビデオは作りたくないので､ 次のビデオで修正するつもりです｡
‫というわけで､ ここから生じる問題は山ほどあるので､ 次のビデオでその解決方法を紹介します｡
‫わかりました｡
‫では､ 次のビデオでそれらを修正しましょう｡
‫現地でお会いしましょう｡