ฉันสามารถคิดอย่างน้อยสองข้อโต้แย้งในการทำงานยาว:
มันหมายความว่าคุณมีบริบทมากมายรอบ ๆ แต่ละบรรทัด วิธีการทำให้เป็นระเบียบแบบนี้: วาดกราฟลำดับการไหลของรหัสของคุณ ที่จุดสุดยอด (~ = บรรทัด) ระหว่างรายการฟังก์ชันและออกจากฟังก์ชันคุณจะรู้ว่าขอบทั้งหมดที่เข้ามา ฟังก์ชั่นที่นานขึ้นมีจุดยอดดังกล่าวมากขึ้น
ฟังก์ชั่นเล็ก ๆ มากมายหมายความว่ามีกราฟการโทรที่ใหญ่และซับซ้อนมากขึ้น เลือกบรรทัดสุ่มในฟังก์ชันสุ่มและตอบคำถาม "ในบริบทใดที่บรรทัดนี้ดำเนินการหรือไม่" สิ่งนี้จะยิ่งยากขึ้นเมื่อกราฟการโทรมีขนาดใหญ่และซับซ้อนมากขึ้นเนื่องจากคุณต้องดูจุดยอดเพิ่มเติมในกราฟนั้น
นอกจากนี้ยังมีข้อโต้แย้งเกี่ยวกับฟังก์ชั่นที่ยาวนาน - หน่วยทดสอบความจำ ใช้t̶h̶e̶̶f̶o̶r̶c̶e̶ประสบการณ์ของคุณเมื่อเลือกระหว่างหนึ่งและอื่น ๆ
หมายเหตุ: ฉันไม่ได้พูดว่าเจ้านายของคุณถูกต้องเพียงว่ามุมมองของเขาอาจไม่ไร้คุณค่าอย่างสมบูรณ์
ฉันคิดว่ามุมมองของฉันคือพารามิเตอร์การเพิ่มประสิทธิภาพที่ดีไม่ใช่ความยาวของฟังก์ชัน ฉันคิดว่า desiderata มีประโยชน์มากกว่าที่จะคิดในแง่ของสิ่งต่อไปนี้: ทุกอย่างเท่าเทียมกันดีกว่าที่จะสามารถอ่านคำอธิบายในระดับสูงของทั้งตรรกะทางธุรกิจและการนำไปใช้ (รายละเอียดการใช้งานในระดับต่ำสามารถอ่านได้เสมอหากคุณพบรหัสที่เกี่ยวข้อง)
ความเห็นเกี่ยวกับคำตอบของ David Arno :
การเขียนฟังก์ชั่นเล็ก ๆ เป็นความเจ็บปวดเพราะมันบังคับให้คุณย้ายเข้าไปในฟังก์ชั่นเล็ก ๆ เพื่อดูว่าโค้ดกำลังทำอะไรอยู่
หากฟังก์ชั่นนั้นมีชื่อที่ดีนี่ไม่ใช่กรณี isApplicationInProduction มีความชัดเจนในตัวเองและไม่จำเป็นต้องตรวจสอบโค้ดเพื่อดูว่ามันทำอะไร ในความเป็นจริงสิ่งที่ตรงกันข้ามคือความจริง: การตรวจสอบรหัสเปิดเผยความตั้งใจน้อยกว่าชื่อฟังก์ชั่น (ซึ่งเป็นสาเหตุที่หัวหน้าของคุณต้องหันไปใช้ความเห็น)
ชื่อทำให้เห็นความหมายของค่าที่ส่งคืนแต่มันไม่ได้บอกอะไรเกี่ยวกับผลกระทบของการดำเนินการรหัส (= สิ่งที่รหัสทำ ) ชื่อ (เท่านั้น) ถ่ายทอดข้อมูลเกี่ยวกับเจตนาโค้ดถ่ายทอดข้อมูลเกี่ยวกับพฤติกรรม (ซึ่งบางส่วนของเจตนาสามารถอนุมานได้)
บางครั้งคุณต้องการอย่างใดอย่างหนึ่งบางครั้งอื่น ๆ ดังนั้นการสังเกตนี้ไม่ได้สร้างกฎการตัดสินใจที่ถูกต้องด้านเดียวในระดับสากล
ใส่ทุกอย่างไว้ในลูปหลักหลักแม้ว่าลูปหลักจะมีมากกว่า 300 บรรทัดการอ่านเร็วขึ้น
มันอาจจะเร็วกว่าในการสแกน แต่จริงๆแล้ว "อ่าน" รหัสคุณจะต้องสามารถรันมันได้อย่างมีประสิทธิภาพในหัวของคุณ นั่นเป็นเรื่องง่ายด้วยฟังก์ชั่นขนาดเล็กและมันยากจริงๆกับวิธีที่มีความยาว 100 บรรทัด
ฉันยอมรับว่าคุณต้องประหารชีวิตมันในหัวของคุณ หากคุณมีฟังก์ชั่น 500 บรรทัดในหนึ่งฟังก์ชั่นใหญ่เทียบกับในฟังก์ชั่นเล็ก ๆ อีกมากมายมันไม่ชัดเจนสำหรับฉันว่าทำไมสิ่งนี้ถึงได้ง่ายขึ้น
สมมติกรณีสุดขีดของโค้ดที่มีผลกระทบสูงแบบเส้นตรงจำนวน 500 บรรทัดและคุณต้องการทราบว่าเอฟเฟกต์เกิดขึ้นก่อนหรือหลังเอฟเฟกต์ B ในกรณีที่ฟังก์ชั่นใหญ่ใช้ Page Up / Down เพื่อค้นหาสองบรรทัด หมายเลขบรรทัด ในกรณีที่ฟังก์ชั่นขนาดเล็กจำนวนมากคุณต้องจำผลกระทบที่เกิดขึ้นในทรีทรีและถ้าคุณลืมคุณต้องใช้เวลาจำนวนเล็กน้อยในการค้นพบโครงสร้างของต้นไม้ต้นนี้
เมื่อข้ามทรีสายการโทรของฟังก์ชั่นการสนับสนุนคุณจะต้องเผชิญกับความท้าทายในการพิจารณาว่าคุณได้ไปจากตรรกะทางธุรกิจไปจนถึงรายละเอียดการใช้งาน ฉันเรียกร้องโดยไม่มีหลักฐาน * ว่ากราฟการโทรที่เรียบง่ายง่ายขึ้นการแยกความแตกต่างนี้ง่ายขึ้น
(*) อย่างน้อยฉันก็ซื่อสัตย์กับมัน ;-)
ฉันคิดว่าทั้งสองแนวทางมีจุดแข็งและจุดอ่อน
เขียนฟังก์ชั่นขนาดเล็กเฉพาะในกรณีที่คุณต้องทำซ้ำรหัส
ฉันไม่เห็นด้วย. ตามตัวอย่างรหัสของคุณฟังก์ชั่นขนาดเล็กที่มีชื่อดีจะช่วยเพิ่มความสามารถในการอ่านรหัสและควรใช้เมื่อใดก็ตามที่ [เช่น] คุณไม่สนใจ "วิธีการ" เพียงฟังก์ชัน "อะไร" ของชิ้นส่วน
ไม่ว่าคุณจะสนใจ "วิธี" หรือ "อะไร" เป็นฟังก์ชันของวัตถุประสงค์ที่คุณกำลังอ่านโค้ด (เช่นการรับแนวคิดทั่วไปและการติดตามข้อบกพร่อง) วัตถุประสงค์ที่คุณกำลังอ่านรหัสไม่สามารถใช้งานได้ในขณะที่เขียนโปรแกรมและคุณมักจะอ่านรหัสเพื่อจุดประสงค์ที่แตกต่างกัน การตัดสินใจที่แตกต่างกันจะปรับให้เหมาะสมสำหรับวัตถุประสงค์ที่แตกต่างกัน
ที่กล่าวมานี้เป็นส่วนหนึ่งของมุมมองของเจ้านายฉันอาจไม่เห็นด้วยมากที่สุด
อย่าเขียนฟังก์ชันที่มีชื่อของความคิดเห็นใส่รหัสบรรทัดที่ซับซ้อนของคุณ (3-4 บรรทัด) ด้วยความคิดเห็นด้านบน เช่นนี้คุณสามารถแก้ไขรหัสที่ล้มเหลวได้โดยตรง
ฉันไม่สามารถเข้าใจเหตุผลที่อยู่เบื้องหลังสิ่งนี้ได้โดยสมมติว่ามันร้ายแรงจริงๆ [... ] ความคิดเห็นมีข้อบกพร่องพื้นฐาน: พวกเขาไม่ได้รวบรวม / ตีความและดังนั้นจึงไม่สามารถทดสอบหน่วย รหัสได้รับการแก้ไขและความคิดเห็นจะถูกทิ้งไว้ตามลำพังและท้ายที่สุดคุณก็ไม่รู้ว่าตัวไหนถูก
คอมไพเลอร์เปรียบเทียบเฉพาะชื่อเพื่อความเท่าเทียมพวกเขาจะไม่ให้ชื่อ MisleadingNameError นอกจากนี้เนื่องจากไซต์การโทรจำนวนมากอาจเรียกใช้ฟังก์ชันที่กำหนดตามชื่อบางครั้งอาจมีความลำบากและเกิดข้อผิดพลาดในการเปลี่ยนชื่อได้ง่ายขึ้น ความคิดเห็นไม่มีปัญหานี้ อย่างไรก็ตามนี่ค่อนข้างเป็นการเก็งกำไร หากต้องการชำระสิ่งนี้จริงๆอาจมีข้อมูลเกี่ยวกับว่าโปรแกรมเมอร์มีแนวโน้มที่จะอัพเดทความคิดเห็นที่ทำให้เข้าใจผิดกับชื่อที่ทำให้เข้าใจผิดหรือไม่และฉันไม่มีสิ่งนั้น