ตัวดำเนินการรวมศูนย์ Null (??)
โดยส่วนตัวฉันไม่เห็นข้อเสียในการใช้โอเปอเรเตอร์นี้ พิจารณาตัวอย่างรหัสสามตัวอย่างต่อไปนี้จากตัวดำเนินการใหม่ 'ง่าย' ถึง 'ซับซ้อน'
ไม่มีเวทมนตร์:
bool isNameSet = false;
string name;
if ( isNameSet )
{
Console.WriteLine( name );
}
else
{
Console.WriteLine( "No name set." );
}
ผู้ประกอบการที่สาม:
bool isNameSet = false;
string name;
Console.WriteLine( isNameSet ? name : "No name set." );
รวมกันเป็นศูนย์:
string name = null;
Console.WriteLine( name ?? "No name set." );
เหตุผลประกอบการเหล่านี้ถูกคิดค้นขึ้นเป็นเพราะพวกเขาเป็นตัวแทนของการดำเนินงานการเขียนโปรแกรมที่พบบ่อยมาก ไม่ต้องการที่จะใช้พวกเขาเพราะคุณไม่ได้ใช้พวกเขาเป็นเพียงการปากแข็ง ภาษาวิวัฒนาการพัฒนาคุณสมบัติเรียนรู้ที่จะใช้พวกเขา!
คำหลัก var
ฉันมีความเห็นแตกต่างกันเล็กน้อยเกี่ยวกับคำหลัก var ประเภทของตัวแปรมักจะให้ข้อมูลเพิ่มเติมเกี่ยวกับรหัสของคุณ ฉันพบว่าการซ่อนประเภทโดยใช้คำหลัก var บางครั้งทำให้โค้ดอ่านน้อยลง คุณรู้น้อยกว่าสิ่งที่คาดหวังโดยไม่ต้องใช้การเติมให้อัตโนมัติหรือโฮเวอร์เหนือตัวบ่งชี้เพื่อดูว่ามันคืออะไร ในความคิดของฉันผลลัพธ์นี้ในรหัสซึ่งช้ากว่าการอ่าน / เขียน
ฉันใช้คำหลักเมื่อพบว่าประเภทไม่ให้ข้อมูลเพิ่มเติมมากนัก
- ส่วนใหญ่อยู่ในลูป foreachซึ่งฉันได้เรียนรู้จาก Resharper เนื่องจากเป็นฉากที่มี ส่วนใหญ่แล้วคุณจะรู้ว่าคอลเล็กชันประเภทใดที่คุณกำลังทำการสำรวจดังนั้นคุณรู้ว่าคุณคาดหวังไอเท็มจากภายในคอลเล็กชันนั้น
- คำสั่ง Linq ผลลัพธ์ของการสืบค้น linq มักจะเป็นประเภทสามัญที่ซับซ้อนมาก การแสดงประเภทนี้จะเป็นอันตรายมากกว่าดี
- ชื่อเกมแบบยาวที่เริ่มต้นได้อย่างง่ายดายด้วยตัวสร้าง คุณสามารถบอกได้ว่าประเภทคืออะไรโดยดูที่ตัวสร้าง
เป็นตัวอย่างสำหรับคำสั่งสุดท้าย:
ThisIsSomeSpecializedTypeRightHere duplication =
new ThisIsSomeSpecializedTypeRightHere();
var justAsReadable =
new ThisIsSomeSpecializedTypeRightHere(); // Less duplication.
// But I still prefer the following ...
int number = 9;
SomeCreatedType foo = Factory.CreateSomeType();
??
ตัวดำเนินการรวมศูนย์ได้หลังจากอธิบายแล้วพวกเขาไม่ควรได้รับอนุญาตใกล้รหัสการผลิต