ทั้งสอง
ตัวอย่างแรกของคุณคือ verbose แน่นอนและชัดเจนมากขึ้น ... แต่ก็ยังต้องให้ฉันสแกนห้าบรรทัดแทนที่จะเป็นหนึ่ง เลวก็ deemphasizes วัตถุประสงค์ - newGuy.Boss
การกำหนดค่าให้กับ
ตัวอย่างที่สองของคุณอาจทำให้ฉันเสียค่าใช้จ่ายเป็นครั้งที่สองหากฉันไม่คุ้นเคยกับตัวดำเนินการรวมศูนย์ว่าง แต่ไม่ต้องสงสัยเลยว่ามีจุดประสงค์อะไรและถ้าฉันกำลังค้นหารูทีนขนาดใหญ่เพื่อหาแหล่งที่มาของค่า จะง่ายกว่ามากสำหรับฉันที่จะเลือกอันนี้
ตอนนี้ความคมชัดนี้:
if (boss == null) {
newGuy.Boss = GetDefaultBoss();
newGuy.IsTemp = true;
newGuy.AddTask("orientation");
} else {
newGuy.Boss = boss;
newGuy.IsTemp = false;
}
... ด้วย:
newGuy.Boss = boss ?? GetDefaultBoss();
newGuy.IsTemp = boss == null;
if ( boss == null ) newGuy.AddTask("orientation");
ตัวอย่างหลังนั้นสั้นกว่าเดิมมาก แต่ตอนนี้มันปิดบังจุดประสงค์ของมันโดยการทำให้งานที่เรียกโดยการทดสอบเดียวกันดูเหมือนจะชัดเจน ที่นี่ฉันรู้สึกฟุ่มเฟื่อยของอดีตเป็นธรรม