นี่เป็นกฎการจัดรูปแบบโค้ดเดียวที่ฉันได้พบจริง ๆ แล้วส่งผลกระทบต่อการอ่านและแทบจะไม่ต้องใช้ความพยายามเลย (สมมติว่าโปรแกรมแก้ไขโค้ดของคุณไม่ได้เริ่มต่อสู้กับคุณ)
การออกแบบภาษาโปรแกรมที่ดีมีชื่อปรากฏอยู่ในตำแหน่งที่สอดคล้องกันในการประกาศ / คำจำกัดความ เหตุผลคือตรงไปตรงมา: คุณมีสมอที่มองเห็นได้ดี (รั้งเป็นลอนหรือเป็นรอยเว้าที่ห้อย) ที่คุณสามารถใช้เพื่อค้นหาชื่อเริ่มต้นได้ทันที คุณไม่จำเป็นต้องแยกวิเคราะห์ภาษาเมื่อสแกนไฟล์เพื่อค้นหาชื่อ
มันเหมือนกับเมื่อคุณจัดรูปแบบเอกสาร: เมื่อคุณเริ่มส่วนใหม่คุณใส่ชื่อไว้ด้านหน้าเป็นตัวหนา - มักจะอยู่ในบรรทัดของตัวเอง - ไม่ฝังอยู่ที่ไหนสักแห่งไม่แตกต่างในประโยคยาว
ต้นซีมีลายเซ็นที่สั้นมาก: ชนิดส่งคืนเป็นทางเลือกและชนิดอาร์กิวเมนต์ถูกประกาศหลังจากลายเซ็น ชื่อมักจะสั้นมาก สิ่งนี้จะลดผลกระทบของการมีชนิดส่งคืนเป็นครั้งคราวเพื่อชดเชยชื่อ
double dot(x, y);
ยังคงย่อยสลายได้สวย
C ++ ทำให้สิ่งนี้เลวร้ายลงเล็กน้อย มันย้ายข้อมูลจำเพาะชนิดอาร์กิวเมนต์ไปยังลายเซ็นทำให้ลายเซ็นยาวขึ้น ไวยากรณ์นี้ถูกนำมาใช้ในภายหลังในช่วงมาตรฐานของ C.
static struct origin *find_origin(struct scoreboard *sb,
struct commit *parent,
struct origin *origin)
ย่อยได้น้อยลง แต่ไม่เลวร้ายเกินไป (ข้อความที่ตัดตอนมาจาก Git)
ในตอนนี้ให้พิจารณาวิธีการเขียนโปรแกรมที่ทันสมัยด้วยชื่อที่สื่อความหมายยาวยาวและประเภท parametrized และดูว่าทางเลือกนี้กลายเป็นหายนะอย่างไร ตัวอย่างจากส่วนหัวของ Boost:
template <class A1, class A2, class A3, class A4, class A5, class A6>
inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&)
{
typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type result_type;
return result_type();
}
หากคุณกำลังเขียนรหัสทั่วไปลายเซ็นเช่นนั้นจะไม่ผิดปกติ คุณสามารถหาตัวอย่างของกรณีที่เลวร้ายกว่านี้ได้โดยไม่ต้องพยายามมากเกินไป
C, C ++, และอนุพันธ์ของพวกเขา, Java และ C #, ดูเหมือนจะเป็นข้อยกเว้นสำหรับการประกาศ / คำจำกัดความที่อ่านได้ ผู้บุกเบิกและเพื่อนยอดนิยมของพวกเขา (Fortran, ALGOL, Pascal) วางชื่อก่อนประเภทผลลัพธ์และต้องขอบคุณผู้สืบทอดหลายคน (Go, Scala, TypeScript และ Swift เพื่อชื่อไม่กี่คน) ได้เลือกไวยากรณ์ที่อ่านได้มากขึ้นเช่นกัน