‫เอาล่ะ ยินดีต้อนรับกลับ
‫ในวิดีโอนี้ เราจะแก้ไขจุดบกพร่องที่เรามี และเราจะดูว่าเราจะแก้ไขได้อย่างไร
‫ในตัวอย่างนี้ มันเป็นสิ่งพื้นฐานมาก
‫และเรารู้จริง ๆ ว่าเรามีวิธีนี้ซึ่งใช้ตรรกะได้ถูกต้อง
‫นี่คือสิ่งที่คิดออกว่าเพื่อนคือเพื่อนปาร์ตี้หรือไม่
‫และนั่นคือสิ่งที่โดยทั่วไปจะช่วยให้คุณสามารถดีบักได้ เพราะถ้าคุณรู้ว่าวิธีการเฉพาะจะทำอะไร
‫คุณสามารถสร้างเบรกพอยต์ ณ จุดนั้นได้
‫ไม่เป็นไร.
‫ดังนั้น หากคุณทำงานในโปรแกรมที่คุณไม่เคยใช้มาก่อนหรือเคยเห็นมาก่อน แน่นอน
‫ก่อนอื่น คุณต้องพิจารณาและทำความเข้าใจว่าวิธีการทั้งหมดนั้นทำอย่างไร
‫และนั่นเป็นเหตุผลว่าทำไมจึงเป็นประโยชน์ที่จะมีบทสรุปของสิ่งที่เกิดขึ้นที่นี่
‫ไม่เป็นไร.
‫ดังนั้นอธิบาย
‫ตกลง.
‫รายการทำอะไร?
‫บทสรุปของวิธีนี้คืออะไร?
‫ดังนั้นคุณสามารถใช้สามขั้นตอนที่นี่แล้วเพิ่มข้อมูลสรุปเล็กน้อย
‫ดังนั้นนี่คือตรรกะที่จะคิดออกว่าใครคือเพื่อนปาร์ตี้หรือเพื่อนปาร์ตี้หรืออะไรทำนองนั้น
‫ไม่ใช่ภาษาอังกฤษที่สมบูรณ์แบบที่นี่ แต่ฉันคิดว่าคุณเข้าใจแนวคิดนี้
‫เมื่อคุณทำอย่างนั้น คุณจะรู้ โอเค
‫เอาล่ะ นี่คือที่มาของตรรกะ
‫และโปรแกรมของเราทำงานด้วยตัวเองใช่ไหม
‫ดังนั้นมันจึงทำงานตามที่ตั้งใจไว้ไม่มากก็น้อย ยกเว้น แน่นอน มันแสดงให้เราเห็น เพื่อน
‫ๆ เรามีชื่อยาว ไม่ใช่ชื่อย่อ
‫เป็นไปได้มากว่าปัญหาจะอยู่ที่ตรรกะที่เราเลือกบางอย่าง
‫ตรงนี้เราคงได้เห็นแล้ว
‫เอาล่ะอาจจะ
‫นี่คือวิธีที่เรามีปัญหาเพื่อให้เราสามารถกำจัดเบรกพอยต์นี้และอันนี้ได้เช่นกัน
‫จากนั้นเราก็มาดูวิธีการของเราที่นี่
‫ลองเพิ่มเบรกพอยต์และหรือรับวิธีเพื่อนปาร์ตี้แล้วเรามาดูกัน
‫มาเริ่มกันเลยดีกว่า
‫และที่สำคัญคือ ค่านิยม จริงไหม?
‫เราจึงอยากทราบค่า
‫และในกรณีนี้ เราสนใจชื่อที่สั้นที่สุด และบางทีก็อาจยาวด้วย เพราะนั่นคือตรรกะ
‫ใช่ไหม
‫สิ่งที่เราจะทำคือไปที่ขั้นตอนต่อไป
‫และเราจะเห็นว่า โอเค รายการประกอบด้วยค่าเจ็ดค่า ไม่เป็นไร
‫ดูเหมือนว่าจะใช้ได้ผล
‫เรามีเพื่อนทุกคนอยู่ในนั้น
‫จนถึงจุดนั้นทุกอย่างดูเหมือนจะเรียบร้อย
‫จากนั้นเราไปขั้นตอนต่อไป
‫ดังนั้นเราจึงมีตาของเราซึ่งเป็นของเรา
‫เคาน์เตอร์และอยู่ที่ศูนย์
‫เอาล่ะ นั่นคือ OC
‫และจำนวนส่วนลดอยู่ที่เจ็ด ดังนั้นเราจึงสามารถไปยังขั้นตอนถัดไปได้
‫ตอนนี้เรามีการเปรียบเทียบที่นี่
‫หากรายการฉันยาวกว่าความยาวที่สั้นที่สุด
‫และที่นั่นเราจะเห็นชื่อที่สั้นที่สุดคือแฟรงค์
‫นั่นคือสิ่งที่เราเริ่มต้นด้วย
‫ใช่ไหม
‫ดังนั้นรายการจึงเริ่มต้นด้วยแฟรงค์
‫ในรายการ I ซึ่งเป็นศูนย์ เราจะมีแฟรงค์
‫ก็ไม่เป็นไร
‫ทีนี้ ไปที่ขั้นตอนต่อไปอย่างที่เห็น เงื่อนไขนี้ในคำสั่ง if ไม่เป็นความจริง
‫ไม่เป็นไร.
‫จากนั้นเราสามารถไปที่การวนซ้ำถัดไปหรือขั้นตอนถัดไปและเปรียบเทียบอีกครั้ง
‫ตอนนี้เราสามารถเห็นรายชื่อยังคงเป็นเจ็ดคน
‫แล้วเราก็มีความยาวสตริงที่ส่งคืนด้วยสามและอีกอันหนึ่งเป็นห้า
‫เกิดอะไรขึ้นที่นี่?
‫เรากำลังพิจารณาว่าโจและโจน่าจะเป็นคนต่อไปที่อยู่ในรายชื่อเพราะเขามีชื่อที่สั้นกว่าแฟรงค์
‫และนั่นคือสิ่งที่เรารู้เพราะเราเขียนโปรแกรม
‫แต่ด้วยเหตุผลบางอย่าง แน่นอนว่าชื่อนี้ยังคงเป็นแฟรงค์
‫เมื่อถึงจุดนี้เราก็สามารถตระหนักถึงพวกเขาได้
‫ไม่เป็นไร.
‫อาจเป็นเพราะเรามีข้อผิดพลาดที่นี่
‫ดังนั้นเราจึงเปรียบเทียบว่ามากกว่า แม้ว่าควรจะน้อยกว่าทั้งหมดหรือน้อยกว่าก็ตาม
‫และตอนนี้ถ้าเรากำจัดเบรกพอยต์และรันโปรแกรมของเราอีกครั้ง เราก็จะได้เห็น
‫โอเค เราได้ชื่อที่สั้นที่สุดแล้ว โจกับดี แฟรงค์กับมาเรีย
‫ได้เลย เยี่ยมไปเลย
‫ตอนนี้โปรแกรมของเรากลับมาฟรีแล้ว
‫และแน่นอน ไม่ใช่เพราะเรายังมีปัญหามากมายที่นี่
‫หนึ่งในนั้นคือเรามีรายชื่อนี้กับแฟรงค์ โจ มิเชลล์ และอื่นๆ
‫ไม่เป็นไร.
‫ดังนั้นเราจึงสร้างรายการด้วยตนเองเพื่อให้รู้ว่ามีอะไรอยู่ในนั้น
‫แต่ตอนนี้ สมมติว่าสิ่งที่เราพยายามทำคือ เราพยายามเชิญคนสิบคน แต่ลูกสาวของเราเพิ่งให้รายชื่อเจ็ดคนแก่เรา
‫มาลองรันโค้ดนี้กัน
‫และ.
‫เรามีข้อยกเว้น
‫สมบูรณ์แบบ.
‫นั่นคือข้อดีของข้อยกเว้น
‫คุณทราบดีว่ามีบางอย่างผิดปกติกับโค้ดของคุณ และคุณสามารถแก้ไขได้ เพราะในบางครั้ง อย่างที่เราเพิ่งเห็น
‫ถ้าคุณไม่เห็นข้อบกพร่อง สิ่งเหล่านี้แก้ไขได้ยากมาก
‫และนี่คืออาร์กิวเมนต์นอกช่วง ดัชนีข้อยกเว้นอยู่นอกช่วงต้องไม่เป็นค่าลบและน้อยกว่าขนาดของคอลเล็กชัน
‫จึงสามารถดูรายละเอียดเกี่ยวกับเรื่องนี้ได้
‫คุณสามารถดูเพิ่มเติมเล็กน้อยเกี่ยวกับข้อยกเว้นนี้ และมันจะบอกคุณทุกสิ่งที่คุณจำเป็นต้องรู้
‫ถูกต้อง.
‫ข้อมูลมากมาย
‫ส่วนใหญ่มันมากเกินไป
‫แต่สิ่งนี้บอกว่าเรากำลังพยายามเข้าถึงองค์ประกอบในรายการที่อยู่นอกขอบเขตของเรา
‫แล้วมันจะเป็นอย่างไร?
‫อาจเป็นรายการที่เราพยายามเข้าถึงเพื่อไปที่นี่
‫และเราจะเห็นว่าเรามีข้อยกเว้น
‫เรามีรายการ นับศูนย์
‫เกิดอะไรขึ้น?
‫ทำไมรายการถึงเป็นศูนย์?
‫เพราะเราเห็นก่อนเป็นรายการเซเว่น
‫ถูกต้อง.
‫เหตุใดรายการจึงเป็นศูนย์
‫เพราะเราไม่เคย
‫เราดูรายการและลบรายการ
‫ถูกต้อง.
‫ดี.
‫สิ่งที่เราทำคือเราลบองค์ประกอบของรายการ
‫ดังนั้นเราจึงกล่าวว่ารายการที่ลบ
‫และนั่นเป็นความผิดพลาดของผู้เริ่มต้น ดังนั้น อย่างที่ฉันบอกคุณไปก่อนหน้านี้ เรากำลังผ่านการอ้างอิง
‫เราไม่ผ่านคุณค่า
‫ความแตกต่างมีดังต่อไปนี้เมื่อเราพูด
‫ที่เราต้องการจะมีรายชื่ออยู่ที่นี่
‫และเมื่อวิธีนี้ถูกเรียก ซึ่งเป็นกรณีของที่นี่ ให้เรียกเพื่อนปาร์ตี้ที่นี่ และเราผ่านรายการที่เรียกว่าเพื่อน
‫ดังนั้นเราจึงส่งรายการนี้ที่นี่ ซึ่งไม่ได้หมายความว่าเราส่งค่าที่เราไม่ได้ส่งผ่าน จริง ๆ แล้วเราส่งการอ้างอิงถึงค่าเหล่านั้น
‫ซึ่งหมายความว่าค่าเหล่านั้นทั้งหมดนั้นอยู่ที่ไหนสักแห่งในความทรงจำของเรา
‫ดังนั้นพวกมันจึงอยู่ในหน่วยความจำของคอมพิวเตอร์ของเรา
‫ถูกต้อง.
‫และเรากำลังอ้างอิงถึงค่าเหล่านั้น
‫เราเลยบอกว่า โอเค ฉันอยากจะไปที่ความทรงจำนี้ ที่คุณมีเพื่อนทั้งหมด
‫ฉันก็เลยอยากไปแฟรงค์ อยากไปหาโจ และอื่น ๆ
‫ตัวอย่างเช่น เมื่อเราทำงานกับรายการนี้ เราจะลบองค์ประกอบของรายการนั้น
‫เราไม่ได้สร้างสำเนาที่มีค่า จากนั้นเราจะดำเนินการลบองค์ประกอบออกจากรายการ
‫แต่เรากำลังลบในหน่วยความจำนี้จริงๆ
‫เรากำลังลบแฟรงก์ออกจากรายการ เราลบโจออกจากรายการ
‫ดังนั้นคุณจะเห็นได้ง่าย ๆ ว่าถ้าคุณใช้สิ่งนี้กับแต่ละลูปเพื่อตรวจสอบเพื่อนของคุณ
‫โอเค ผมจะลดมันอีกครั้งเพื่อให้เราเห็นอะไรบางอย่าง
‫ฉันจะผ่านสิ่งนี้สำหรับแต่ละลูป
‫และอย่างที่คุณเห็น มีเพียงแองเจลิน่าเท่านั้นที่ปรากฏขึ้น
‫ทำไมเพียงแองเจลิน่า?
‫เพราะแองเจลิน่าอยู่ในรายชื่อที่เจ็ด และฉันเพิ่งลบคนหกคนออกจากรายชื่อ
‫ลองทำอีกครั้งกับสี่คน
‫เพียงเพื่อให้คุณเห็นว่ามาเรีย คาร์ลอส และแองเจลิน่ายังคงอยู่ที่นั่น
‫คุณจะเห็นว่าที่จริงแล้ว มันคือมิเชล
‫ไม่เป็นไร.
‫ดียิ่งขึ้นไปอีก ตอนนี้เรามีสถานการณ์ที่แปลกประหลาดมาก ซึ่งก็คือ Michelle, Carlos และ Angelina ที่ยังอยู่ในรายชื่อ
‫ดังนั้นเราจึงลบบางคนออกจากรายชื่ออย่างต่อเนื่องและนั่นก็สร้างปัญหามากมาย
‫เพราะหากมีคนอื่นหรือถ้าเราใช้รายชื่อเพื่อนนี้ที่อื่น มันก็จะว่างเปล่าและเสียหาย
‫มันจะไม่มีค่าเริ่มต้นอยู่ในนั้น และนั่นคือสิ่งที่เราไม่ควรทำ
‫สิ่งที่เราทำได้คือสร้างบัฟเฟอร์ที่นี่
‫ฉันกำลังจะสร้างตัวแปรใหม่ชื่อ buffer และนั่นจะเป็นรายการสตริงใหม่
‫และมันจะเป็นรายการของฉัน ดังนั้นฉันจะส่งรายชื่อที่ส่งถึงฉันในตอนนี้
‫ไม่เป็นไร.
‫และฉันจะเก็บมันไว้ในบัฟเฟอร์
‫ดังนั้นมันจะเป็นรายการใหม่
‫และตอนนี้ที่เราเห็นคือ แน่นอนว่าเราต้องลบออกจากบัฟเฟอร์
‫ดังนั้นเราจะลบออกจากสำเนาของรายการนี้
‫เราจะไม่ลบออกจากรายการ
‫ไม่เป็นไร.
‫นั่นคือความแตกต่างที่สำคัญที่เราต้องทำ
‫เรากำลังลบออกจากสำเนาในขณะนี้
‫แน่นอน เรายังต้องใช้บัฟเฟอร์ตรงนี้เพื่อจัดงานปาร์ตี้
‫ไม่เป็นไร.
‫เพราะไม่เช่นนั้นเราจะไม่ปล่อยของออกจากรายการ
‫นั่นจะเป็นเจ็ดคนเสมอ
‫ดังนั้นแม้จะอยู่ในรายการบัฟเฟอร์นี้ มันจะเป็นเจ็ดคนเสมอและจากนั้นก็จะทำงานไม่ถูกต้อง
‫ไม่เป็นไร.
‫เพื่อให้เราคือแฟรงค์ โจ มิเชล ทุกอย่างยังอยู่ในรายการ
‫ตกลง.
‫ดังนั้น for each loop จึงทำงานได้ดี
‫และในการเปรียบเทียบ สิ่งที่เราสามารถทำได้คือเราสามารถสร้างลูปใหม่และตรวจสอบกับเพื่อนในปาร์ตี้เพื่อดูว่าตอนนี้เรามีเพื่อนปาร์ตี้เจ็ดคนหรือสามคนเท่านั้น
‫คุณจะเห็นได้ว่าจริงๆ แล้วมันคือเพื่อนบุคคลที่สี่
‫ดังนั้นพวกเขาทั้งหมดจึงอยู่ที่นั่น และโจกับแฟรงค์และมาเรียยังอยู่ในนั้นด้วย
‫เราไม่ได้ลบรายชื่อเพื่อน เราลบองค์ประกอบออกจากรายการบัฟเฟอร์
‫และตอนนี้ แน่นอน เราไม่ต้องการสิ่งนี้อีกต่อไป
‫นี่เป็นเพียงเพื่อการทดสอบและการดีบัก
‫แต่ตอนนี้เรามีโปรแกรมที่ทำงานได้ดี
‫ตอนนี้คุณสามารถพูดได้เลย เราไม่มีข้อบกพร่องอีกต่อไป
‫แต่เรายังไม่ได้แก้ไขจุดบกพร่องที่เคยมีมาก่อน ซึ่งถ้าเราป้อนสิบตรงนี้
‫เราจะ.
‫มีข้อบกพร่องหรือข้อผิดพลาดหรือไม่?
‫อันที่จริง อาร์กิวเมนต์อยู่นอกช่วงข้อยกเว้น
‫แล้วเรามาทำอะไรที่นี่?
‫เนื่องจากเรากำลังพยายามเข้าถึงองค์ประกอบที่ไม่มีอยู่จริง
‫ดังนั้นเราจึงพยายามเข้าถึงองค์ประกอบรายการแม้ว่ารายการของเราจะว่างเปล่า
‫จำนวนรายการจึงเป็นศูนย์
‫และนั่นคือสิ่งที่เราจะแก้ไขในวิดีโอหน้า เพราะอีกครั้ง วิดีโอนี้มีความยาวมากกว่า 10 นาที
‫ดังนั้นจึงไม่อยากสร้างวิดีโอที่ยาวมาก
‫ดังนั้นผมจะแสดงวิธีแก้ไขปัญหานี้ในวิดีโอหน้าเพราะเรามีปัญหามากมายที่เกิดจากสิ่งนี้
‫ไม่เป็นไร.
‫มาแก้ไขกันในวิดีโอหน้า
‫แล้วเจอกัน.