ฉันจะเรียกวิธีปฏิบัติที่ "ชัดเจนอย่างอื่น" ที่คุณอ้างถึงว่าเป็นรูปแบบการต่อต้านเนื่องจากจะปิดบังความจริงที่ว่าไม่มีรหัสตัวพิมพ์พิเศษเป็นอย่างอื่นหากคุณ
โดยทั่วไปแล้วความสามารถในการอ่าน / การบำรุงรักษาจะได้รับการปรับปรุงเมื่อคุณไม่มีอะไรมากนอกจากโครงสร้างโค้ดโฟลว์ที่จำเป็นและคุณย่อให้เล็กลง ซึ่งหมายความว่าเอลเซ่ที่ซ้ำซ้อนและถ้าของซึ่งจะเพิ่มขอบเขตให้กับฟังก์ชั่นทั้งหมดทำตามและรักษามันยากขึ้น
พูดเช่นคุณมีฟังก์ชั่นนี้:
public void ConfigureOblogon(Oblogon oblogonToConfigure)
{
if (_validColors.Contains(oblogonToConfigure.Color))
{
oblogonToConfigure.ColorIndex = _validColors.IndexOf(oblogonToConfigure.Color);
}
else
{
oblogonToConfigure.Color = _validColors[0];
oblogonToConfigure.ColorIndex = 0;
}
}
ตอนนี้ความต้องการมาในระหว่างการกำหนดค่าคุณควรระบุดัชนีประเภท / ประเภทของ oblogon มีหลายขอบเขตที่บางคนสามารถวางรหัสนั้นและท้ายด้วยรหัสที่ไม่ถูกต้องเช่น
public void ConfigureOblogon(Oblogon oblogonToConfigure)
{
if (!_validOblogons.Contains(oblogonToConfigure.Type))
{
oblogonToConfigure.Type = _validOblogons[0];
oblogonToConfigure.TypeIndex = 0;
if (_validColors.Contains(oblogonToConfigure.Color))
{
oblogonToConfigure.ColorIndex = _validColors.IndexOf(oblogonToConfigure.Color);
}
else
{
oblogonToConfigure.Color = _validColors[0];
oblogonToConfigure.ColorIndex = 0;
}
}
else
{
oblogonToConfigure.TypeIndex = _validOblogons.IndexOf(oblogonToConfigure.Type);
}
}
เปรียบเทียบสิ่งนี้กับถ้ารหัสต้นฉบับถูกเขียนด้วยโครงสร้างการควบคุมการไหลที่น้อยที่สุดที่จำเป็นและย่อให้เล็กสุดที่นั้น
public void ConfigureOblogon(Oblogon oblogonToConfigure)
{
if (!_validColors.Contains(oblogonToConfigure.Color))
{
oblogonToConfigure.Color = _validColors[0];
}
oblogonToConfigure.ColorIndex = _validColors.IndexOf(oblogonToConfigure.Color);
}
ตอนนี้มันจะยากกว่าที่จะตั้งใจใส่บางอย่างผิดขอบเขตหรือจบลงด้วยการทำให้เกิดการซ้ำซ้อนในการเติบโตระยะยาวและการบำรุงรักษาฟังก์ชั่นนี้ นอกจากนี้ยังเห็นได้ชัดว่ากระแสที่เป็นไปได้ในฟังก์ชั่นนี้คืออะไร
ฉันรู้ว่ามันเป็นตัวอย่างเล็กน้อย แต่ฉันได้เห็นหลายครั้ง
SomeFunction()
{
if (isvalid)
{
/* ENTIRE FUNCTION */
}
/* Nothing should go here but something does on accident, and an invalid scenario is created. */
}
ดังนั้นการกำหนดกฎเหล่านั้นให้เป็นระเบียบเกี่ยวกับโครงสร้างการควบคุมการไหลฉันคิดว่าอาจช่วยให้ผู้คนพัฒนาสัญชาตญาณที่จำเป็นในการดมกลิ่นบางอย่างเมื่อพวกเขาเริ่มเขียนโค้ดเช่นนั้น จากนั้นพวกเขาก็จะเริ่มเขียน ..
SomeFunction()
{
if (!isvalid)
{
/* Nothing should go here, and it's so small no one will likely accidentally put something here */
return;
}
/* ENTIRE FUNCTION */
}
else
ว่าเป็นการหลอกลวง บ่อยครั้งที่ไม่มีอะไรจะใส่ลงในelse
บล็อกได้เว้นแต่คุณจะก้มตัวไปข้างหลัง