ไม่มีอะไรผิดปกติอย่างแน่นอนหรือจำเป็นต้องเลวเกี่ยวกับลูปซ้อนกัน อย่างไรก็ตามมีข้อควรพิจารณาและข้อผิดพลาดบางประการ
บทความที่คุณนำไปสู่น่าจะเป็นชื่อของความกะทัดรัดหรือเนื่องจากกระบวนการทางจิตวิทยาที่รู้จักกันว่าถูกเผาไหม้ข้ามไปเฉพาะ
การถูกไฟไหม้คือเมื่อคุณมีประสบการณ์ในแง่ลบกับบางสิ่งที่มีความหมายว่าคุณกำลังหลีกเลี่ยง ตัวอย่างเช่นฉันอาจตัดผักด้วยมีดที่คมแล้วตัดตัวเอง ฉันอาจจะพูดว่ามีดคม ๆ ไม่ดีอย่าใช้มันเพื่อตัดผักเพื่อพยายามทำให้มันเป็นไปไม่ได้สำหรับประสบการณ์เลวร้ายที่จะเกิดขึ้นอีกครั้ง เห็นได้ชัดว่าทำไม่ได้อย่างมาก ในความเป็นจริงคุณแค่ต้องระวัง หากคุณกำลังบอกให้คนอื่นตัดผักคุณก็จะมีความรู้สึกที่แข็งแกร่งกว่านี้ ถ้าฉันสั่งให้เด็ก ๆ หั่นผักฉันจะรู้สึกอย่างยิ่งที่จะบอกพวกเขาว่าอย่าใช้มีดปลายแหลมโดยเฉพาะถ้าฉันไม่สามารถดูแลพวกเขาอย่างใกล้ชิด
ปัญหาคือในการเขียนโปรแกรมคือคุณจะไม่ได้รับประสิทธิภาพสูงสุดหากคุณต้องการความปลอดภัยก่อนเสมอ ในกรณีนี้เด็กสามารถตัดผักอ่อนได้เท่านั้น เผชิญหน้ากับสิ่งอื่นและพวกเขาจะทำเรื่องวุ่นวายโดยใช้มีดทื่อ สิ่งสำคัญคือการเรียนรู้การใช้ลูปอย่างเหมาะสมรวมถึงลูปซ้อนและคุณไม่สามารถทำเช่นนั้นได้หากพวกเขาถือว่าไม่ดีและคุณไม่เคยลองใช้มัน
เนื่องจากคำตอบมากมายที่นี่ชี้ให้เห็นการซ้อนกันวนรอบเพื่อเป็นการบ่งบอกถึงลักษณะการทำงานของโปรแกรมของคุณซึ่งอาจทำให้การซ้อนแต่ละครั้งแย่ลงอย่างมาก นั่นคือ O (n), O (n ^ 2), O (n ^ 3) และอื่น ๆ ซึ่งประกอบด้วย O (n ^ depth) โดยที่ความลึกแสดงถึงจำนวนลูปที่คุณซ้อนกัน เมื่อการทำรังของคุณเติบโตขึ้นเวลาที่ต้องใช้จะเพิ่มขึ้นแบบทวีคูณ ปัญหาก็คือว่ามันไม่แน่นอนว่าเวลาหรือพื้นที่ของคุณจะซับซ้อน (บ่อยครั้งที่ * b * c แต่ไม่ใช่ว่าทุกวนรังอาจทำงานตลอดเวลาอย่างใดอย่างหนึ่ง) และไม่แน่ใจว่าคุณจะ มีปัญหาด้านประสิทธิภาพแม้ว่าจะเป็นเช่นนั้นก็ตาม
สำหรับคนจำนวนมากโดยเฉพาะนักเรียนนักเขียนและอาจารย์ที่จะพูดจาตรงไปตรงมาไม่ค่อยมีโปรแกรมสำหรับการใช้ชีวิตหรือเป็นแบบวันต่อวันสำหรับลูปอาจเป็นสิ่งที่พวกเขาไม่คุ้นเคย นี่เป็นประเด็นที่มีปัญหาเพราะมีช่วงการเรียนรู้อยู่เสมอและการหลีกเลี่ยงมันจะไม่มีประสิทธิภาพในการแปลงนักเรียนเป็นโปรแกรมเมอร์
ลูปที่ซ้อนกันสามารถไปในป่าได้นั่นคือพวกมันสามารถซ้อนกันได้ลึกมาก ถ้าฉันผ่านแต่ละทวีปจากนั้นผ่านแต่ละประเทศจากนั้นผ่านแต่ละเมืองจากนั้นผ่านร้านค้าแต่ละแห่งจากนั้นผ่านแต่ละชั้นวางแล้วผ่านแต่ละผลิตภัณฑ์ถ้าเป็นถั่วกระป๋องผ่านถั่วแต่ละตัวและวัดขนาดเพื่อให้ได้ค่าเฉลี่ยแล้วคุณล่ะ สามารถเห็นว่ามันจะทำรังลึกมาก คุณจะมีปิรามิดและพื้นที่ว่างเปล่ามากมายห่างจากขอบด้านซ้าย คุณอาจท้ายออกไปหน้า
นี่เป็นปัญหาที่จะมีความสำคัญมากกว่าในอดีตที่หน้าจอมีขนาดเล็กและมีความละเอียดต่ำ ในกรณีเหล่านั้นแม้แต่การทำรังสองสามระดับก็อาจใช้พื้นที่จำนวนมากอย่างแท้จริง นี่เป็นข้อกังวลที่น้อยกว่าในวันนี้ซึ่งเกณฑ์สูงกว่าแม้ว่ามันจะยังคงสามารถแสดงปัญหาได้หากมีการทำรังเพียงพอ
ที่เกี่ยวข้องคืออาร์กิวเมนต์ความงาม หลายคนไม่พบว่ามีการซ้อนกันของลูปที่ชื่นชอบในทางตรงกันข้ามกับเลย์เอาต์ที่มีการจัดเรียงที่สอดคล้องกันมากขึ้นซึ่งอาจหรือไม่อาจเชื่อมโยงกับสิ่งที่ผู้คนคุ้นเคยการติดตามสายตาและความกังวลอื่น ๆ อย่างไรก็ตามมันเป็นปัญหาในการที่มันมักจะเสริมกำลังด้วยตนเองและในที่สุดอาจทำให้รหัสยากที่จะอ่านเป็นทำลายบล็อกของรหัสและ encapsulating วนรอบหลัง abstractions เช่นฟังก์ชั่นยังมีความเสี่ยงทำลายการทำแผนที่ของรหัสเพื่อการไหลของการดำเนินการ
มีแนวโน้มตามธรรมชาติต่อสิ่งที่ผู้คนคุ้นเคย หากคุณกำลังเขียนโปรแกรมบางอย่างด้วยวิธีที่ง่ายที่สุดความน่าจะเป็นที่ไม่จำเป็นต้องทำรังมากที่สุดความน่าจะเป็นที่จะต้องลดลงหนึ่งระดับตามลำดับความสำคัญความน่าจะเป็นสำหรับอีกระดับจะลดลงอีกครั้ง ความถี่ที่ลดลงและโดยพื้นฐานแล้วหมายถึงยิ่งการทำรังสัมผัสกับความรู้สึกของมนุษย์น้อยลง
เกี่ยวข้องกับสิ่งนั้นนั่นคือในโครงสร้างที่ซับซ้อนใด ๆ ซึ่งสามารถพิจารณาลูปซ้อนได้ดังนั้นคุณควรถามเสมอว่าทางออกที่ง่ายที่สุดเท่าที่จะเป็นไปได้เนื่องจากมีโอกาสสำหรับโซลูชันที่ไม่ได้รับซึ่งต้องการลูปน้อยกว่า ประชดคือการแก้ปัญหาที่ซ้อนกันมักจะเป็นวิธีที่ง่ายที่สุดในการผลิตสิ่งที่ทำงานกับจำนวนของความพยายามขั้นต่ำความซับซ้อนและภาระการรับรู้ บ่อยครั้งที่เป็นธรรมชาติในการทำรังสำหรับลูป หากคุณพิจารณาตัวอย่างคำตอบข้อใดข้อหนึ่งข้างต้นซึ่งวิธีที่เร็วกว่าแบบซ้อนสำหรับลูปนั้นก็มีความซับซ้อนและประกอบด้วยรหัสที่มากขึ้น
การดูแลรักษาเป็นสิ่งจำเป็นเนื่องจากมักจะเป็นไปได้ที่บทคัดย่อจะวนออกไปหรือทำให้แบน แต่ผลสุดท้ายก็คือการรักษาที่เลวร้ายยิ่งกว่าโรคโดยเฉพาะอย่างยิ่งหากคุณไม่ได้รับการยกระดับประสิทธิภาพที่สามารถวัดได้และสำคัญจากความพยายาม
เป็นเรื่องปกติมากที่ผู้คนจะประสบปัญหาเกี่ยวกับประสิทธิภาพในการเชื่อมโยงกับลูปซึ่งบอกให้คอมพิวเตอร์ทำการกระทำซ้ำหลาย ๆ ครั้งและมักจะเกี่ยวข้องกับปัญหาคอขวดในการทำงาน น่าเสียดายที่การตอบสนองต่อสิ่งนี้อาจตื้นมาก มันกลายเป็นเรื่องธรรมดาสำหรับคนที่จะเห็นลูปและดูปัญหาด้านประสิทธิภาพเมื่อไม่มีและซ่อนลูปจากสายตาเป็นไม่มีผลจริง รหัส "ดู" เร็ว แต่วางไว้บนถนนกุญแจสำคัญในการจุดระเบิดปูพื้นคันเร่งและดูที่มาตรวัดความเร็วและคุณอาจพบว่ามันยังเร็วพอ ๆ กับหญิงชราคนหนึ่งที่เดินเฟรมไม้เท้าของเธอ
การซ่อนตัวแบบนี้คล้ายกับหากคุณมีนักเล่นกลสิบคนในเส้นทางของคุณ ถ้าแทนที่จะมีเส้นทางตรงไปยังที่ที่คุณต้องการจะไปคุณก็จัดการมันเพื่อที่จะมีผู้ร้ายอยู่ทุกซอกทุกมุมมันจะให้ภาพลวงตาเมื่อคุณเริ่มต้นการเดินทางว่าไม่มีพวกมิจฉาชีพ เมื่ออยู่ไกลใจก็ห่าง. คุณจะยังคงได้รับการปล้นสิบครั้ง แต่ตอนนี้คุณจะไม่เห็นมันมา
คำตอบสำหรับคำถามของคุณคือทั้งคู่ แต่ไม่มีข้อกังวลใด ๆ พวกมันมีทั้งแบบอัตนัยหรือแบบบริบทเท่านั้น แต่น่าเสียดายที่บางครั้งความคิดเห็นส่วนตัวหรือค่อนข้างจะใช้เวลาก่อนหน้าและครอบงำ
ตามกฎของหัวแม่มือหากต้องการวนซ้ำซ้อนกันหรือที่ดูเหมือนว่าขั้นตอนที่ชัดเจนต่อไปก็จะดีที่สุดที่จะไม่พิจารณาและทำมัน อย่างไรก็ตามหากมีข้อสงสัยใด ๆ ก็ควรจะตรวจสอบในภายหลัง
กฎง่ายๆอีกข้อหนึ่งก็คือคุณควรตรวจสอบความสำคัญของหัวใจและถามตัวเองว่าการวนซ้ำนี้จะเป็นปัญหาหรือไม่ ในตัวอย่างก่อนหน้าของฉันฉันผ่านเมืองต่างๆ สำหรับการทดสอบฉันอาจผ่านไปสิบเมือง แต่จำนวนสูงสุดของเมืองที่สมเหตุสมผลในการใช้งานจริงคืออะไร ฉันอาจคูณมันด้วยทวีปเดียวกัน มันเป็นกฎง่ายๆที่ต้องคำนึงถึงลูปเสมอโดยเฉพาะอย่างยิ่งย้ำจำนวนครั้ง (ตัวแปร) แบบไดนามิกสิ่งที่อาจแปลลงบรรทัด
โดยไม่คำนึงถึงสิ่งที่ทำงานก่อนเสมอ วิธีที่คุณเห็นโอกาสในการปรับให้เหมาะสมคุณสามารถเปรียบเทียบโซลูชันที่ได้รับการปรับให้เหมาะสมกับวิธีที่ง่ายที่สุดในการทำงานและยืนยันว่าได้รับประโยชน์ที่คาดหวัง นอกจากนี้คุณยังสามารถใช้เวลาเพิ่มประสิทธิภาพก่อนกำหนดได้นานเกินไปก่อนที่จะทำการวัดและสิ่งนี้นำไปสู่ YAGNI หรือเสียเวลามากและพลาดกำหนด