นี่คือมากตัวอย่างง่าย นี่ไม่ใช่คำถามเฉพาะภาษาและฉันขอให้คุณเพิกเฉยต่อวิธีการอื่น ๆ ที่สามารถเขียนฟังก์ชันและการเปลี่ยนแปลงที่เกิดขึ้นได้ . สีเป็นประเภทที่ไม่ซ้ำกัน
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
else
{
return "No you can't";
}
}
ผู้คนจำนวนมากที่ฉันได้พบ ReSharper และผู้ชายคนนี้ (ซึ่งความคิดเห็นเตือนฉันฉันกำลังมองหาที่จะถามในขณะนี้) จะแนะนำการ refactoring รหัสเพื่อลบelse
บล็อกออกจากนี้:
(ฉันจำไม่ได้ว่าคนส่วนใหญ่พูดอะไรฉันอาจไม่ได้ถามอย่างอื่น)
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
return "No you can't";
}
คำถาม:มีความซับซ้อนเพิ่มขึ้นโดยไม่รวมelse
บล็อกหรือไม่
ฉันอยู่ภายใต้การแสดงผลelse
ความตั้งใจระบุโดยตรงโดยระบุความจริงที่ว่ารหัสในบล็อกทั้งสองเกี่ยวข้องโดยตรง
นอกจากนี้ฉันพบว่าฉันสามารถป้องกันข้อผิดพลาดเล็กน้อยในเชิงตรรกะโดยเฉพาะอย่างยิ่งหลังจากการแก้ไขโค้ดในภายหลัง
นำตัวอย่างที่ง่ายของฉันไปใช้ (ไม่สนใจข้อเท็จจริงที่or
ผู้ดำเนินการเนื่องจากนี่เป็นตัวอย่างที่เข้าใจง่าย)
bool CanLeaveWithoutUmbrella()
{
if(sky.Color != Color.Blue)
{
return false;
}
return true;
}
ขณะนี้มีคนสามารถเพิ่มif
บล็อกใหม่โดยยึดตามเงื่อนไขหลังจากตัวอย่างแรกโดยไม่ต้องรับรู้ทันทีว่าเงื่อนไขแรกคือการวางข้อ จำกัด ตามเงื่อนไขของตนเอง
หากมีelse
บล็อกอยู่ใครก็ตามที่เพิ่มเงื่อนไขใหม่จะถูกบังคับให้ย้ายเนื้อหาของelse
บล็อก (และถ้าพวกเขาขัดเงามันฮิวริสติกจะแสดงว่ารหัสนั้นไม่สามารถเข้าถึงได้ซึ่งจะไม่อยู่ในกรณีที่มีการif
บังคับอีกข้อ) .
แน่นอนว่ายังมีวิธีอื่น ๆ ที่ควรกำหนดตัวอย่างที่เฉพาะเจาะจงอย่างไรก็ตามทั้งหมดนี้ป้องกันสถานการณ์ดังกล่าว แต่เป็นเพียงตัวอย่างเท่านั้น
ความยาวของตัวอย่างที่ฉันให้อาจบิดเบือนมุมมองภาพของสิ่งนี้ดังนั้นสมมติว่าพื้นที่ที่นำไปไว้ในวงเล็บนั้นไม่มีความสำคัญกับวิธีที่เหลือ
ฉันลืมที่จะพูดถึงกรณีที่ฉันเห็นด้วยกับการละเว้นของบล็อกอื่นและเมื่อใช้if
บล็อกเพื่อใช้ข้อ จำกัด ที่จะต้องมีเหตุผลทางตรรกะสำหรับรหัสต่อไปนี้ทั้งหมดเช่นการตรวจสอบ null (หรือยามอื่น ๆ ) .
else
ประโยค (ตามรสนิยมของฉันมันจะยิ่งอ่านง่ายขึ้นเมื่อออกจากวงเล็บที่ไม่จำเป็น แต่ฉันคิดว่าตัวอย่างไม่ได้เลือกอย่างดีเพราะใน กรณีข้างต้นผมจะเขียนreturn sky.Color == Color.Blue
(โดยหาก / อื่น) ตัวอย่างที่มีประเภทผลตอบแทนที่แตกต่างกันกว่าบูลอาจจะทำเรื่องนี้ให้ชัดเจน..