บริบท
ในClean Codeหน้า 35 บอกไว้
นี่ก็หมายความว่าบล็อกภายในถ้าคำสั่งคำสั่งอื่นในขณะที่คำสั่งและอื่น ๆ ควรมีความยาวหนึ่งบรรทัด อาจเป็นไปได้ว่าสายควรจะเรียกฟังก์ชั่น สิ่งนี้ไม่เพียงทำให้ฟังก์ชั่นการปิดล้อมมีขนาดเล็ก แต่ยังเพิ่มมูลค่าเอกสารเพราะฟังก์ชั่นที่เรียกว่าภายในบล็อกสามารถมีชื่อที่สื่อความหมายได้ดี
ฉันเห็นด้วยอย่างสมบูรณ์ซึ่งทำให้รู้สึกมาก
ต่อมาในหน้า 40 มันพูดเกี่ยวกับข้อโต้แย้งฟังก์ชั่น
จำนวนอาร์กิวเมนต์ที่เหมาะสมที่สุดสำหรับฟังก์ชันคือศูนย์ (niladic) ถัดมาคือหนึ่ง (monadic) ตามมาด้วยสอง (dyadic) ควรหลีกเลี่ยงการโต้แย้งสามครั้ง (triadic) หากเป็นไปได้ มากกว่าสาม (polyadic) ต้องมีเหตุผลพิเศษมาก - จากนั้นไม่ควรใช้ต่อไป การโต้แย้งยาก พวกเขาใช้พลังความคิดมากมาย
ฉันเห็นด้วยอย่างสมบูรณ์ซึ่งทำให้รู้สึกมาก
ปัญหา
อย่างไรก็ตามบ่อยครั้งที่ฉันพบว่าตัวเองกำลังสร้างรายการจากรายการอื่นและฉันจะต้องอยู่กับหนึ่งในสองความชั่วร้าย
ฉันใช้สองบรรทัดในบล็อกหนึ่งรายการสำหรับสร้างสิ่งหนึ่งสำหรับเพิ่มไปยังผลลัพธ์:
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
Flurp flurp = CreateFlurp(badaBoom);
flurps.Add(flurp);
}
return flurps;
}
หรือฉันเพิ่มอาร์กิวเมนต์ให้กับฟังก์ชั่นสำหรับรายการที่สิ่งนั้นจะถูกเพิ่มเข้าไปทำให้ "อาร์กิวเมนต์หนึ่งแย่ลง"
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
CreateFlurpInList(badaBoom, flurps);
}
return flurps;
}
คำถาม
มีข้อดี (dis-) ที่ฉันไม่เห็นซึ่งทำให้หนึ่งในนั้นเป็นที่นิยมโดยทั่วไปหรือไม่ หรือมีข้อดีดังกล่าวในบางสถานการณ์; ในกรณีนั้นฉันควรพิจารณาอะไรเมื่อตัดสินใจ
f(g(x))
ขัดกับคู่มือนำสไตล์ของคุณฉันก็ไม่สามารถแก้ไขไกด์นำเที่ยวของคุณได้ ฉันหมายความว่าคุณไม่ได้แยกออกsqrt(x*x + y*y)
เป็นสี่บรรทัดใช่ไหม? และนั่นคือ subexpressions สามซ้อน (!) ซ้อนกันสองระดับ (!) ซ้อนกันภายใน (หอบ!) เป้าหมายของคุณควรอ่านได้ไม่ใช่คำสั่งของผู้ดำเนินการ ถ้าคุณต้องการในภายหลังดีฉันมีภาษาที่สมบูรณ์แบบสำหรับคุณ: Assembler
mov
คำสั่งx86 และหนึ่งเดียวjmp toStart
ในตอนท้าย มีคนสร้างคอมไพเลอร์ที่ทำเช่นนั้นจริงๆ: D
rlwimi
คำสั่งที่น่าอับอายใน PPC (นั่นหมายถึง Rotate Left Word Insert Mask ทันที) คำสั่งนี้ใช้เวลาไม่น้อยกว่าห้าตัวถูกดำเนินการ (สองรีจิสเตอร์และค่าทันทีสามค่า) และดำเนินการดังต่อไปนี้: เนื้อหารีจิสเตอร์หนึ่งหมุนโดยกะทันที สร้างด้วยการรัน 1 บิตเดียวซึ่งถูกควบคุมโดยตัวถูกดำเนินการทันทีอีกสองตัวและบิตที่ตรงกับ 1 บิตในรูปแบบนั้นในตัวถูกดำเนินการลงทะเบียนอื่นถูกแทนที่ด้วยบิตที่สอดคล้องกันของรีจิสเตอร์หมุน คำสั่งเด็ดมาก :-)
flurps.Add(CreateFlurp(badaBoom));
?