วิธีเขียนรหัสน้อย [ปิด]


12

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

คำถามของฉันคือถ้าเป็นสิ่งที่เพิ่งมีประสบการณ์หรือเป็นสิ่งที่คุณสามารถทำได้อย่างชัดเจนสำหรับการพัฒนาคุณภาพนั้น


6
พล็อตแนวโน้มและดูว่าเมื่อใดที่คุณข้ามแกน x ...

1
พอยน์เตอร์บังคับสำหรับแมโคร, มาโคร, มาโคร: paulgraham.com/avg.html
vemv

คุณสามารถสร้างรหัสที่สั้นมากอ่านได้โดยใช้สไตล์การเขียนโปรแกรมที่ไม่มีจุดหมาย การเขียนโปรแกรมแบบไม่มีจุดหมายคือการเขียนโปรแกรมโดยใช้ฟังก์ชั่นเท่านั้น คุณสามารถรับรู้ได้โดยการใช้งานฟังก์ชั่นลำดับสูงเช่นแผนที่, ตัวกรอง, concat, พับ / ลด / ฉีด / [ใส่ชื่ออื่นสำหรับรายการ catamorphism] ฯลฯ
dan_waterworth

2
-1: ดูเหมือนว่าขอแสดงความยินดีด้วยตนเองในการปลอมตัว
Jim G.

ฉันยังไม่เห็นรหัสฟรีที่สามารถอ่านได้ ไม่ได้อยู่ในห้องสมุดที่สำคัญใด ๆ
Simon Bergot

คำตอบ:


12

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

แน่นอนหลังจากหนึ่งหรือสองปีทำงานกับ Ruby ฉันพบว่า C # ของฉันมีความรุนแรงมากขึ้น ฉันคิดว่าถ้าฉันเข้าใจโปรแกรมที่ใช้งานได้ดีขึ้น

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

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

อาจมีความแตกต่างระหว่างการเขียนรหัสน้อยลงและมีรหัสน้อยลงในแอปพลิเคชันของคุณ -บางครั้งคุณสามารถใช้การสร้างรหัสเพื่อหลีกเลี่ยงการทำซ้ำด้วยตัวเองดังนั้นคุณจึงเขียนโค้ดไม่กี่บรรทัดเท่านั้น - ที่สามารถยกระดับคุณได้มากมาย ดูว่าเครื่องมืออย่าง Rails หรือ Entity Framework ทำอะไรในแง่นี้เพื่อเข้าใจว่ามันมีประโยชน์อย่างไร มีความชัดเจนเกี่ยวกับความต้องการและคิดสองครั้งสามครั้งและสี่ครั้งเกี่ยวกับการสร้างรหัสของคุณเอง - ที่สามารถลงจอดคุณในนรก YAGNI

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

หากคุณสงสัยว่ามีวิธีที่ดีกว่าในการทำบางสิ่งบางอย่างอาจมีและเป็นสิ่งที่ควรค่าแก่การหาวิธีทำสิ่งที่ดีกว่าเสมอ


ใช่ในความคิดของฉันเหตุผลเดียวสำหรับฟังก์ชั่นหนึ่งบรรทัดส่วนตัวคือหลักการของ DRY

เนื่องจากฉันมีฟังก์ชั่นเหล่านั้นมากขึ้นจำนวนบรรทัดของรหัสในชั้นเรียนของฉันจึงลดลงอย่างเห็นได้ชัดและมันก็ดูดีกว่าและชัดเจนกว่า
glenatron

ฟังดูเหมือนความขัดแย้งฟังก์ชั่นอื่น ๆ แต่เส้นน้อยลง แต่บางทีฉันอาจเห็นแนวโน้มเดียวกันในรหัสของฉันด้วย .. ฉันต้องคิดเกี่ยวกับสิ่งนั้น ....

คุณมีแนวทางอื่นอีกหรือไม่ที่สามารถปฏิบัติตามได้? ฟังดูราวกับว่าพวกเขาจะมีประโยชน์กับนักพัฒนาหนุ่มเช่นตัวเอง
stuartmclark

@ Stuartmclark - ฉันได้เพิ่มอีกสองสามถึงแม้ว่าฉันสงสัยว่ามีไม่มากเกินไปที่นั่นคุณจะไม่เคยได้ยินที่อื่น
glenatron

16

วิธีที่ยอดเยี่ยมวิธีหนึ่งในการเขียนโค้ดให้น้อยลงคือพยายามหลีกเลี่ยงการสร้างวงล้อใหม่และใช้ส่วนประกอบซอฟต์แวร์ที่มีอยู่เมื่อมี

หนึ่งคำตอบทั่วไปที่ฉันได้รับเมื่อฉันถามว่าทำไมผู้คนถึงทำ ORM ของตนเองหรือเอ็นจิ้นการบันทึกของตนเองหรือส่วนประกอบ UI ของตนเองหรือทุกอย่างของพวกเขาเอง:

แต่เราดีกว่า

ฉันเชื่อว่าคำสั่งนี้ถูกต้องในกรณีส่วนใหญ่ แต่ผลกระทบเชิงลบต่อROIนั้นสูงมากในกรณีส่วนใหญ่ คุณแม่ทำอาหารที่ดีที่สุดใช่ไหม? แต่คุณไม่สามารถขอให้คุณแม่กลับบ้านและเตรียมตัวพวกเขาทุกวัน

นั่นเป็นเหตุผลที่ฉันคิดว่าผู้พัฒนาควรได้รับผลกระทบทางการเงินจากการเลือกของพวกเขา บางส่วนของพวกเขาคือ:

  • จำเป็นต้องทำงานพิเศษเพื่อสร้างส่วนประกอบ
  • ทำงานพิเศษสำหรับผู้มาใหม่เพื่อเรียนรู้
  • ทำงานพิเศษขนาดใหญ่เพื่อรักษามัน

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

มันจะดีกว่าสำหรับทั้ง บริษัท เพื่อROIสูงสุดแทนที่จะทำงานเพื่อเพิ่มความพึงพอใจอัตตาของเรา;) ยิ่งเงินของ บริษัท ของคุณได้รับมากขึ้นโอกาสในการทำงานและเงินเดือนของคุณก็จะเพิ่มขึ้น


1
ฉันมีความผิดเช่นกันไม่กี่ปีที่ผ่านมาฉันเขียนคลาส filepath ของฉันเองสามารถแปลงไฟล์พา ธ ระหว่างรูปแบบ Win, Unix และ Apples เราใช้ Windows เท่านั้น บางทีนั่นอาจเป็นกฎด้วยอย่าทำสิ่งที่เป็นหลักฐานในอนาคต

บางครั้งมันเกิดจากการขาดความรู้ในกรอบที่กำหนด ฉันเขียนคลาสพา ธ ของตัวเองด้วยเมื่อฉันเริ่มทำงานกับ. NET จากนั้นฉันค้นพบคลาส System.IO.Path ไม่กี่วันหลังจาก :-)

ฉันชอบปาเก็ตตี้ของแม่ แต่สิ่งของในขวดก็ดีพอ สิ่งนี้จะช่วยลดความต้องการลงได้อย่างมาก หากพวกเขาไม่ชำระสำหรับโซลูชัน 85% คุณไม่มีทางเลือก
JeffO

แม่ของฉันทำสปาเก็ตตี้ได้ดีกว่าของคุณมาก

1
+ internets สำหรับ "หลีกเลี่ยงการสร้างวงล้อใหม่" หนึ่งในทักษะที่สำคัญที่สุดที่ฉันพัฒนาขึ้นคือการสามารถระบุปัญหาที่บางคนอาจแก้ไขได้แล้ว ไม่เพียง แต่จะให้ทางออกที่ดีกว่าที่ฉันสร้างเองได้เกือบตลอดเวลาโดยจัดการกับกรณีที่ฉันอาจมองข้ามมันทำให้ฉันเป็นอิสระในการทำงานกับปัญหาที่ฉันได้รับจากการจ่ายเงินเพื่อแก้ไข .
BlairHippo

5

ในความคิดของฉันการเขียนโค้ดน้อยลงสามารถทำได้หลายวิธี:

  • คุณไม่ gonna จำเป็นต้องใช้มัน อย่าเขียนโค้ดที่คุณยังไม่ต้องการ รหัสเฉพาะความต้องการของรัฐดังนั้น ด้วยวิธีนี้เราจะลดรหัสที่จำเป็นในการเขียน

  • อย่าซ้ำตัวเอง ฉันเชื่อว่าการใช้ CMS เฟรมเวิร์กหรือไลบรารีบุคคลที่สามเป็นวิธีหนึ่งในการนำหลักการ DRY ไปใช้

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


3

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

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


คุณใช้เวลานานแค่ไหนในการเตรียมโซลูชันกับการเขียนโปรแกรมโซลูชัน

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

1

ศิลปะการเขียนโปรแกรมทั้งหมดอาจกล่าวได้ว่าลดลงมาถึงแค่นี้

คุณสามารถเรียนภาษาที่เน้นความชัดเจนและความรัดกุมแบบดั้งเดิม (เช่น Haskell, Scheme, Python) หรือแม้กระทั่งกระบวนทัศน์ที่ยากขึ้นเช่นปัจจัยและภาษาอื่น ๆ แต่ท้ายที่สุดแล้วทุกสิ่งที่คุณสามารถเลือกศึกษาควรช่วยให้คุณเขียนได้สั้นลง รหัสซ้ำซ้อนน้อยลง


1

เช่นเดียวกับความทุกข์อื่น ๆ ทั้งหมดหากคุณไม่ยอมรับว่ามีปัญหาคุณจะไม่ต้องหาทางออก ประสบการณ์เริ่มเป็นปัจจัยเมื่อคุณเรียนรู้ว่าโค้ดน้อยลง เมื่อคุณกลับไปที่รหัสของคุณมันเป็นเวลาที่ดีในการตรวจสอบว่าคุณสามารถใช้รหัสหรือ refactor เพื่อรหัสน้อยลง Microsoft สามารถปรับปรุงความเร็วในการพิมพ์ด้วย Windows 2000 ได้โดยไม่ spooling สองครั้ง (อ้างจากพนักงานของ Microsoft ที่หนึ่งในตัวอย่างฟรี)


ดังนั้นฉันควรทบทวนรหัสของฉันอีกครั้งและปรับโครงสร้างใหม่เพื่อให้เข้าใจว่าเขียนโค้ดน้อยลงอย่างไร

2
@Gorgen - คุณทำได้ถ้าคุณมีเวลาหรือเพียงแค่ดูรหัสที่คุณเขียนไว้เมื่อชั่วโมงที่แล้ว บางครั้งการสังเกตตัวอย่างบน SO อาจทำให้คุณย้อนกลับและทำการเปลี่ยนแปลงในโค้ดของคุณเอง
JeffO

0
  1. กลับไป yo รหัสที่ยืดยาวของคุณ
  2. วางไว้ใต้การควบคุมเวอร์ชัน
  3. เขียนแบบทดสอบเพื่อให้มีความหวังอย่างสมเหตุสมผลไม่แนะนำข้อบกพร่องใหม่
  4. เขียน

ทำซ้ำโฆษณาซ้ำ และยินดีต้อนรับสู่นรก


-2

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


ในบริบทนั้นความหมายขั้นต่ำในแง่ของคุณสมบัติไม่ใช่ความยาว
vemv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.