คำถามติดแท็ก conditions

19
ฉันควรกลับจากฟังก์ชันก่อนหน้าหรือใช้คำสั่ง if [ปิด]
ฉันมักจะเขียนฟังก์ชันประเภทนี้ทั้งสองรูปแบบและฉันสงสัยว่ารูปแบบใดรูปแบบหนึ่งที่ต้องการมากกว่าอีกรูปแบบหนึ่งและทำไม public void SomeFunction(bool someCondition) { if (someCondition) { // Do Something } } หรือ public void SomeFunction(bool someCondition) { if (!someCondition) return; // Do Something } ฉันมักจะเขียนโค๊ดกับอันแรกเพราะนั่นเป็นวิธีที่สมองของฉันทำงานขณะเขียนโค้ดถึงแม้ว่าฉันคิดว่าฉันชอบอันที่สองเพราะมันจะจัดการกับข้อผิดพลาดในการจัดการทันทีและฉันอ่านง่ายขึ้น

15
นักพัฒนายืนยันว่าคำสั่งไม่ควรมีเงื่อนไขที่ไม่สนใจและควรมีบล็อกอื่นอยู่เสมอ
ฉันมีความคุ้นเคยนักพัฒนาที่มีประสบการณ์มากกว่าฉัน เรากำลังพูดถึงวิธีปฏิบัติในการเขียนโปรแกรมและฉันถูกผงะโดยวิธีการของเขาในงบ 'ถ้า' เขายืนยันในการปฏิบัติบางอย่างเกี่ยวกับว่าข้อความที่ฉันพบค่อนข้างแปลก ประการแรกคำสั่ง if ควรจะตามด้วยคำสั่ง else ไม่ว่าจะมีบางสิ่งที่จะใส่เข้าไปหรือไม่ ซึ่งนำไปสู่รหัสที่มีลักษณะเช่นนี้: if(condition) { doStuff(); return whatever; } else { } ประการที่สองจะเป็นการดีกว่าที่จะทดสอบค่าจริงแทนที่จะเป็นเท็จ นั่นหมายความว่าเป็นการดีกว่าที่จะทดสอบตัวแปร 'doorClosed' แทนที่จะเป็นตัวแปร '! doorOpened' เหตุผลของเขาคือทำให้ชัดเจนว่ารหัสกำลังทำอะไร ซึ่งทำให้ฉันสับสนเล็กน้อยเนื่องจากการรวมกันของกฎทั้งสองสามารถนำเขาไปสู่การเขียนโค้ดชนิดนี้หากเขาต้องการทำอะไรบางอย่างเมื่อเงื่อนไขไม่ตรง if(condition) { } else { doStuff(); return whatever; } ความรู้สึกของฉันเกี่ยวกับเรื่องนี้ก็คือมันน่าเกลียดมากและ / หรือว่าการปรับปรุงคุณภาพถ้ามีมีเล็กน้อย แต่ในฐานะรุ่นน้องฉันมักจะสงสัยสัญชาตญาณของตัวเอง ดังนั้นคำถามของฉันคือ: มันเป็นการปฏิบัติที่ดี / ไม่ดี / "ไม่สำคัญ"? มันเป็นเรื่องธรรมดา

24
วิธีการที่สง่างามในการจัดการถ้า (ถ้ามี) อย่างอื่น
นี่เป็นอาการง่อยเล็กน้อย แต่ทุกครั้งที่ฉันต้องเขียนโค้ดแบบนี้การทำซ้ำจะทำให้ฉันรำคาญใจ แต่ฉันไม่แน่ใจว่าวิธีแก้ปัญหาใด ๆ จะไม่แย่ลง if(FileExists(file)) { contents = OpenFile(file); // <-- prevents inclusion in if if(SomeTest(contents)) { DoSomething(contents); } else { DefaultAction(); } } else { DefaultAction(); } มีชื่อสำหรับตรรกะชนิดนี้หรือไม่? ฉันเป็น OCD ด้วยหรือเปล่า ฉันเปิดให้คำแนะนำรหัสชั่วร้ายเพียงเพื่อความอยากรู้อยากเห็นของ ...

25
ผู้ประกอบการพิจารณาว่าเป็นอันตรายหรือไม่? [ปิด]
ตัวอย่างเช่นคุณต้องการซับไลเนอร์นี้หรือไม่ int median(int a, int b, int c) { return (a<b) ? (b<c) ? b : (a<c) ? c : a : (a<c) ? a : (b<c) ? c : b; } หรือโซลูชัน if / else ที่เกี่ยวข้องกับคำสั่ง return หลายรายการ? เมื่อใด?:ที่เหมาะสมและเมื่อใด ควรสอนหรือซ่อนเร้นจากผู้เริ่มต้นหรือไม่

11
ทำไมเราต้องใช้เบรกสวิตช์?
ใครเป็นผู้ตัดสินใจ (และขึ้นอยู่กับแนวคิดใด) ที่การswitchก่อสร้าง (ในหลายภาษา) ต้องใช้breakในแต่ละข้อความ ทำไมเราต้องเขียนสิ่งนี้: switch(a) { case 1: result = 'one'; break; case 2: result = 'two'; break; default: result = 'not determined'; break; } (สังเกตสิ่งนี้ใน PHP และ JS อาจมีหลายภาษาที่ใช้สิ่งนี้) ถ้าswitchเป็นทางเลือกifทำไมเราไม่สามารถใช้สิ่งก่อสร้างเดียวกันนี้เพื่อif? เช่น: switch(a) { case 1: { result = 'one'; } case 2: { result = 'two'; } …
74 conditions 

4
if ('constant' == $ variable) vs. if ($ variable == 'constant')
เมื่อเร็ว ๆ นี้ฉันได้ทำงานกับ PHP มากและโดยเฉพาะภายในกรอบ WordPress ฉันสังเกตเห็นรหัสจำนวนมากในรูปแบบของ: if ( 1 == $options['postlink'] ) ที่ฉันคาดว่าจะเห็น: if ( $options['postlink'] == 1 ) นี่เป็นข้อตกลงที่พบในบางภาษา / กรอบงานหรือไม่? มีเหตุผลใดที่แนวทางก่อนหน้านี้เป็นที่นิยมกว่าในภายหลัง (จากมุมมองการประมวลผลหรือมุมมองการแยกวิเคราะห์หรือแม้แต่มุมมองของมนุษย์?) หรือมันเป็นเพียงเรื่องของการลิ้มรส? ฉันมักจะคิดว่ามันจะดีกว่าเมื่อทำการทดสอบว่ารายการตัวแปรที่ทดสอบกับค่าคงที่อยู่ทางซ้าย ดูเหมือนว่าแผนที่ดีกว่าวิธีที่เราจะถามคำถามในภาษาธรรมชาติ: "ถ้าเค้กช็อคโกแลต" มากกว่า "ถ้าช็อคโกแลตเป็นเค้ก"

13
ฉันจะแก้ไขเชนของ if-else ได้อย่างไรถ้าข้อความที่เป็นไปตามหลักการ Clean Code ของลุงบ็อบ?
ฉันกำลังพยายามทำตามคำแนะนำที่ชัดเจนของลุงบ็อบและโดยเฉพาะอย่างยิ่งเพื่อให้วิธีการสั้น ฉันพบว่าตัวเองไม่สามารถตัดทอนตรรกะนี้ได้แม้ว่า: if (checkCondition()) {addAlert(1);} else if (checkCondition2()) {addAlert(2);} else if (checkCondition3()) {addAlert(3);} else if (checkCondition4()) {addAlert(4);} ฉันไม่สามารถลบ elses และแยกสิ่งทั้งหมดออกเป็นบิตขนาดเล็กทำให้ "else" ใน "else if" ช่วยประสิทธิภาพการทำงาน - การประเมินเงื่อนไขเหล่านั้นมีราคาแพงและถ้าฉันสามารถหลีกเลี่ยงการประเมินเงื่อนไขด้านล่างได้ เป็นจริงฉันต้องการหลีกเลี่ยงพวกเขา แม้แต่การพูดเชิงความหมายการประเมินเงื่อนไขถัดไปหากพบก่อนหน้านี้ก็ไม่สมเหตุสมผลจากมุมมองทางธุรกิจ แก้ไข: คำถามนี้ถูกระบุว่าเป็นที่ซ้ำกันเป็นไปได้ของวิธีที่สง่างามในการจับถ้า (ถ้าอื่น) อื่น ฉันเชื่อว่านี่เป็นคำถามที่แตกต่างกัน (คุณสามารถเห็นได้ด้วยการเปรียบเทียบคำตอบของคำถามเหล่านั้น) คำถามของฉันคือการตรวจสอบสำหรับเงื่อนไขแรกยอมรับที่จะจบได้อย่างรวดเร็ว คำถามที่เชื่อมโยงนั้นกำลังพยายามยอมรับเงื่อนไขทั้งหมดเพื่อที่จะทำอะไรสักอย่าง (เห็นได้ดีขึ้นในคำตอบสำหรับคำถามนี้: https://softwareengineering.stackexchange.com/a/122625/96955 )

6
วิธีการจัดรูปแบบที่อ่านง่ายที่สุดหากมีเงื่อนไข [ปิด]
ifสภาพที่คดเคี้ยวยาวควรหลีกเลี่ยงหากเป็นไปได้ แต่บางครั้งเราทุกคนก็เขียนลงไป แม้ว่ามันจะเป็นเงื่อนไขที่ง่ายมากบางครั้งข้อความที่เกี่ยวข้องก็เป็นคำที่ใช้ง่ายมากดังนั้นเงื่อนไขทั้งหมดจึงมีความยาวมาก วิธีการจัดรูปแบบที่อ่านง่ายที่สุดคืออะไร if (FoobarBaz::quxQuux(corge, grault) || !garply(waldo) || fred(plugh) !== xyzzy) { thud(); } หรือ if ( FoobarBaz::quxQuux(corge, grault) || !garply(waldo) || fred(plugh) !== xyzzy ) { thud(); } หรือ if (FoobarBaz::quxQuux(corge, grault) || !garply(waldo) || fred(plugh) !== xyzzy) { thud(); } หรือ thudable = FoobarBaz::quxQuux(corge, grault); thudable …


7
ควรใช้ "อย่างอื่น" ในสถานการณ์ที่การควบคุมการไหลทำให้ซ้ำซ้อนหรือไม่?
บางครั้งฉันสะดุดกับรหัสที่คล้ายกับตัวอย่างต่อไปนี้ (สิ่งที่ฟังก์ชั่นนี้ทำไม่ตรงกับขอบเขตของคำถามนี้): function doSomething(value) { if (check1(value)) { return -1; } else if (check2(value)) { return value; } else { return false; } } ในขณะที่คุณสามารถดูif, else ifและelseงบที่ใช้ร่วมกับreturnคำสั่ง ดูเหมือนว่าจะใช้งานง่ายสำหรับผู้สังเกตการณ์ทั่วไป แต่ฉันคิดว่ามันจะดูสง่างามกว่า (จากมุมมองของนักพัฒนาซอฟต์แวร์) เพื่อวางelse-s และทำให้รหัสง่ายขึ้นดังนี้: function doSomething(value) { if (check1(value)) { return -1; } if (check2(value)) { return value; } return false; } …

5
ถ้าอื่น ๆ - ตรรกะของรหัสซ้ำแล้วซ้ำอีก
เจ้านายของฉันให้โครงการฉันด้วยตรรกะเฉพาะ ฉันต้องพัฒนาเว็บเพจที่มีการนำทางผ่านหลาย ๆ กรณีจนกว่าเขา / เธอจะมาถึงผลิตภัณฑ์ นี่คือรูปแบบเส้นทางของการนำทางในไซต์: สำคัญ! ในหน้าผลิตภัณฑ์เนวิเกเตอร์สามารถเลือกตัวกรองที่ต้องการ ถ้า A เขา / เธอต้องผ่าน B (และแน่นอน C) หรือ C และถึงผลิตภัณฑ์ ถ้า B เขา / เธอจะต้องผ่าน C และเข้าถึงผลิตภัณฑ์ ถ้า C เขา / เธอเข้าถึงผลิตภัณฑ์โดยตรง แน่นอนว่าถ้าฉันเริ่มต้นจาก AI กำลังติดตามเส้นทางที่ยาวที่สุดและเมื่อฉันไปถึงผลิตภัณฑ์ฉันมีตัวกรองที่ใช้งานอยู่ 3 ตัว จนถึงตอนนี้ฉันพัฒนาโค้ดต่อไปนี้ซึ่งใช้งานได้ดี if filter_A if filter_B filter_C() .. else .. else filter_C .. else …


3
มันจะดีกว่าที่จะป้องกันวิธีการโทรหรือวิธีการเอง?
ฉันกำลังเขียนใบสมัครและฉันมาถึงจุดนี้: private void SomeMethod() { if (Settings.GiveApples) { GiveApples(); } if (Settings.GiveBananas) { GiveBananas(); } } private void GiveApples() { ... } private void GiveBananas() { ... } นี่ดูตรงไปตรงมาสวย มีเงื่อนไขบางอย่างและหากเป็นจริงวิธีการที่จะถูกเรียก อย่างไรก็ตามฉันคิดว่ามันค่อนข้างดีกว่าที่จะทำสิ่งนี้: private void SomeMethod() { GiveApples(); GiveBananas(); } private void GiveApples() { if (!Settings.GiveApples) { return; } ... } private …

5
หาก - อื่น ๆ บันไดที่ควรจะจับเงื่อนไขทั้งหมด - ควรเพิ่มประโยคสุดท้ายซ้ำซ้อน?
นี่คือสิ่งที่ฉันทำมากเมื่อเร็ว ๆ นี้ ตัวอย่าง: setCircle(circle, i, { current }) { if (i == current) { circle.src = 'images/25CE.svg' circle.alt = 'Now picking' } else if (i < current) { circle.src = 'images/25C9.svg' circle.alt = 'Pick failed' } else if (i > current) { circle.src = 'images/25CB.svg' circle.alt = 'Pick chance' …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.