การจัดรูปแบบโค้ด: การจัดวางฟังก์ชันตามลำดับชั้นการโทรภายในไฟล์คลาสหรือไม่


10

คำแนะนำจาก "รหัสสะอาด" ของบ็อบมาร์ตินทำให้ฉันเกาหัวของฉัน .. "หากฟังก์ชั่นหนึ่งโทรไปหาอีกสายหนึ่งพวกเขาควรจะปิดในแนวตั้ง

จนถึงตอนนี้ฉันติดมากขึ้นหรือน้อยลงใกล้กับแนวทาง. Net ซึ่งสมาชิกกลุ่มในกลุ่มตามประเภท (คุณสมบัติ, ctors, ฟังก์ชั่น) และการมองเห็น (สาธารณะ / prot. / ส่วนตัว) เคล็ดลับดูเหมือนจะเป็นปัญหาในตอนแรก .. แต่มัน "อาจจะได้ผล" ฉันได้พบกับกรณีที่ฉันชอบเลย์เอาต์นี้ง่ายกว่าที่จะเจาะลึกเมื่อคุณอยู่ในสายการโทรที่ถูกต้อง

แนวคิดเบื้องหลังคำแนะนำนั้นดูดี แต่สถานการณ์อื่น ๆ เช่น "ให้ฉันดูที่ส่วนต่อสาธารณะของคลาสนี้" อาจแย่กว่านี้ บางทีลุง Bob เป็นธนาคารในชั้นเรียนขนาดเล็กและการสนับสนุน IDE สำหรับการดูประเภท ...

มีใครลองทำดูเป็นระยะเวลานานไหม?

อัปเดต: ดูเหมือนว่ามีข้อมูลโค้ดอยู่ในลำดับ

class SomeType()
{
  /// fields, ctors, et. all
  public void Method1()   { // calls HelperMethod1 and HelperMethod2 }
  private void HelperMethod1 { // calls HelperMethod3 }
  private void HelperMethod3 {}
  private void HelperMethod2 {}

  public void Method2 () { // and so on... }

}

2
น่ากลัว "ลุงบ๊อบ" ไม่ใช่ดินสอที่คมชัดที่สุดในกล่อง
Neil Butterworth

1
ความคิดเป็นเพียง "ให้ฉันภาพใหญ่ก่อนรายละเอียด nitty-gritty" ปรับเปลี่ยนตามความจำเป็น
Ryan Culpepper

2
อินทรีต้องใกล้ชิดกันอีกครั้งเพราะฉันพบว่าตัวเองเห็นด้วยกับความคิดเห็นของนีล ฉันเติบโตขึ้นมาพร้อมกับ PASCAL และ "ใส่ของเล็ก ๆ น้อย ๆ เป็นอันดับแรก" เพราะ PASCAL คอมไพเลอร์ทุกสิ่งที่จำเป็นต้องมีการกำหนดไว้ก่อนที่พวกเขาจะถูกอ้างอิงและการประกาศไปข้างหน้าโดยทั่วไปขมวดคิ้ว
John R. Strohm

@ Neil - ฉันพยายามตัดสินข้อดีของคำแนะนำ .. โดยไม่คำนึงถึงแหล่งที่มา @ John - และเคล็ดลับอยู่ตรงข้ามกับการประกาศไปข้างหน้า .. คุณใส่ผู้โทรก่อน .. ผู้ประกาศจะถูกประกาศไว้ใต้ผู้โทร
Gishu

@ryanc - คำนำของย่อหน้านั้นเน้นว่า "แนวคิดที่เกี่ยวข้องอย่างใกล้ชิด / เหนียวแน่น" ควรจะอยู่ในแนวตั้งด้วยกัน [แนวป้องกันไม่ให้เลื่อนไปรอบ ๆ เมื่อคุณพยายามหาอะไรบางอย่าง] ฟังก์ชั่นที่เรียกว่าถูกวางไว้ใต้ผู้โทรตามลำดับของการโทร ดูโค้ดเพิ่มเติม
Gishu

คำตอบ:


2

ฉันอาจจะออกไปที่ขา แต่ฉันสงสัยว่าเครื่องมือที่คุณใช้มีผลกระทบกับเรื่องนี้หรือไม่ ฉันหมายถึงโปรแกรมแก้ไขข้อความกับการตัดสินใจของ IDE ที่นักพัฒนาต้องทำ

ใน IDE คุณมีฟังก์ชั่นการใช้งานมากมายเพื่อดูไฟล์ต้นฉบับ โดยทั่วไปแล้วคุณจะได้รับรายการวิธีการเรียงลำดับตัวอักษรตามการมองเห็นหรือแม้กระทั่งกลับประเภทในแถบด้านข้าง คุณยังสามารถข้ามไปยังเมธอดได้หากคุณมีวิธีใช้ คุณยังสามารถสร้างต้นไม้การโทรสำหรับวิธีการและเจาะลึก คุณมักจะมีคำสั่งค้นหาที่ทรงพลังซึ่งอาจรองรับนิพจน์ทั่วไป ในสถานการณ์เช่นนี้ลำดับของวิธีการที่คุณสร้างขึ้นไม่สำคัญเนื่องจากคุณมีมุมมองอื่นนอกเหนือจากซอร์สโค้ดที่มีอยู่

ในโปรแกรมแก้ไขข้อความคุณโดยทั่วไปจะไม่มีคุณสมบัติเหล่านี้ - สิ่งที่ใกล้เคียงที่สุดที่คุณมีน่าจะเป็นการค้นหา / แทนที่ที่ดี ที่นี่คุณจะต้องให้ความสำคัญกับโครงสร้างของไฟล์มากขึ้นเนื่องจากการนำทางอาจทำได้ยาก คุณต้องการลดเวลาที่ใช้ในการเลื่อนไปรอบ ๆ ไฟล์เพื่อหาสิ่งที่คุณกำลังมองหาและวิธีการที่สอดคล้องและมีเหตุผลสามารถช่วยได้


+1 สำหรับ IDE; IDE ที่ดีกว่าคนที่น้อยกว่าต้องกังวลเกี่ยวกับสิ่งต่าง ๆ เช่นนี้
281377

1

ประเด็นก็คือสิ่งที่เรียกว่าน่าสนใจน้อยกว่าการเรียกสิ่งต่าง ๆ ยิ่งเมธอดเรียกใช้เมธอดอื่น ๆ มากเท่าใดก็ยิ่งมีโอกาสมากขึ้นเท่านั้นที่เมธอดนั้นเป็นส่วนหนึ่งของ API ภายนอกของวัตถุ นั่นหมายความว่า API ภายนอกของคลาส - วิธีสาธารณะถ้าภาษาของคุณรองรับแนวคิดนั้น - โดยปกติจะ "ต้องการ" ที่ด้านบนของไฟล์ทำให้ง่ายต่อการค้นหาวิธีเหล่านั้น ในทางกลับกันฟังก์ชันตัวช่วยและจะ "ต้องการ" ที่ด้านล่างของไฟล์

(ฉันอธิบายแนวคิดไม่ใช่การประเมินประสิทธิผล)


ใช่ แต่นั่นจะหมายถึงฟังก์ชั่นสาธารณะทั้งหมดควรลอยไปด้านบนของไฟล์เป็นกลุ่มเดียว ได้แก่ วิธีการทั่วไป วิธีการที่นำเสนอนั้นแตกต่างกัน (หรืออย่างน้อยฉันจะอ่าน) .. ดูการอัปเดตที่เป็นปัญหา
Gishu

ใช่แน่นอนฟังก์ชั่นสาธารณะของคุณควรลอยไปด้านบน แน่นอนบางภาษาไม่ได้มีการปรับเปลี่ยนการแสดงผลที่ทุกคน ...
แฟรงก์ Shearar

1

ถ้าหากขยายระยะเวลาคุณหมายถึงมากกว่าสองวันหรือไม่ จากนั้นไม่
ไม่กี่ปีที่แล้วฉันเริ่มทำสิ่งนี้ด้วยรหัสใหม่และค่อยๆทำให้ฉันเสียสติจนฉันหยุด

ความชอบส่วนตัวของฉันในการจัดชั้นเรียนคือ

class MyClass
{
    // static fields
    // fields
    // constructors
    // properties
    // methods
} 

แต่นั่นไม่ใช่ศาสนาคุณสมบัติและวิธีการต่าง ๆ สามารถผสมเข้าด้วยกัน การเปิดเผยไม่ได้เกิดขึ้น (ฉันไม่จัดกลุ่มตามสาธารณะ / ป้องกัน / ส่วนตัว)

เรามีผู้ชายคนหนึ่งที่นี่ในสำนักงานเก็บโครงสร้างที่เข้มงวดกับทุกสิ่งในไฟล์คลาสโดยทุกสิ่งจัดกลุ่มเข้าด้วยกันในกลุ่มหลักและกลุ่มย่อยทั้งหมดซ้อนกันอย่างดีในภูมิภาค . . ฉันต้องยอมรับว่าฉันคิดว่าภูมิภาคเป็นผลงานของซาตานพวกเขาขับไล่ฉันไปรอบ ๆ เฟินซิน

ทุกครั้งที่ฉันเปิดหนึ่งในชั้นเรียนของเขาฉันตายข้างในเล็กน้อย :(


ฉันไม่ได้เรียกชั้นเรียนขนาดใหญ่ด้วยการเพิ่มภูมิภาคเพื่อปกปิดกลิ่น ไม่พยายามรับศาสนา .. แต่มีเค้าโครงที่สอดคล้องกันภายในโครงการทำให้สิ่งต่าง ๆ เร็วขึ้น การจัดกลุ่มการมองเห็น bu เป็นประโยชน์เพิ่มเติมของการมี API สาธารณะอยู่ใกล้กันเพื่อให้คุณสามารถค้นหาจุดเข้าใช้งานที่เฉพาะเจาะจงของคุณและเจาะลึกลงไปจากที่นั่น ...
Gishu

และช่างก่อสร้าง? ผู้ที่อยู่ภายใต้ "วิธีการ"?
โคดี้เกรย์

@Cody Grey: ขอโทษลืม ctors!
ไบนารี Worrier

@Gishu: ฉันพบว่าเครื่องมือสร้างภาพข้อมูลและการนำทางที่ทันสมัยได้ขจัดความจำเป็นในการจัดวางไฟล์ที่เข้มงวด เป็นเรื่องสำคัญที่จะใช้วิธีการเมื่อฉันคลิกขวาที่การใช้งานและ "ไปที่คำจำกัดความ" หรือไม่?
ไบนารี Worrier
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.