คุณนำทางและสร้างรหัสซ้ำในภาษาไดนามิกได้อย่างไร


14

ฉันชอบที่การเขียน Python, Ruby หรือ Javascript ต้องใช้สำเร็จรูปน้อยมาก ฉันชอบโครงสร้างที่ใช้งานง่าย ฉันชอบไวยากรณ์ที่สะอาดและเรียบง่าย

อย่างไรก็ตามมีสามสิ่งที่ฉันไม่ดีจริง ๆ เมื่อพัฒนาซอฟต์แวร์ขนาดใหญ่ในภาษาแบบไดนามิก:

  • การนำรหัส
  • การระบุอินเทอร์เฟซของวัตถุที่ฉันใช้
  • การปรับโครงสร้างใหม่อย่างมีประสิทธิภาพ

ฉันได้ลองใช้ตัวแก้ไขอย่างง่าย (เช่น Vim) และ IDE (Eclipse + PyDev) แต่ในทั้งสองกรณีฉันรู้สึกว่าฉันต้องผูกมัดกับหน่วยความจำและ / หรือ "grep" ตลอดเวลาและอ่านรหัสเพื่อระบุ อินเตอร์เฟส โดยเฉพาะอย่างยิ่งเมื่อทำงานกับ codebase ขนาดใหญ่ที่มีการขึ้นต่อกันหลายครั้ง

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

ฉันแน่ใจว่ามีวิธีแก้ไขปัญหาสำหรับปัญหาเหล่านี้ คุณทำงานอย่างมีประสิทธิภาพใน Python, Ruby หรือ Javascript ได้อย่างไร


คุณสมบัติการเปลี่ยนชื่อของ PyDev นั้นยอดเยี่ยมสำหรับฉันจนถึงตอนนี้

คำตอบ:


3

การนำรหัส

รับโปรแกรมแก้ไขที่ดีกว่า VIM

ฉันใช้โคโมโดแก้ไข

ฉันรู้สึกว่าฉันต้องทุ่มเทให้กับความทรงจำมากมาย

ดี. การคิดเป็นสิ่งที่ดี ฉันพบว่า "การเรียนรู้" นำไปสู่ ​​"ความจำ" ในที่สุด

"grep" อย่างต่อเนื่องและอ่านรหัสเพื่อระบุอินเตอร์เฟส

นี่เป็นเรื่องปกติ หากคุณจำไม่ได้ว่ามันซับซ้อนเกินไปใช่มั้ย ใช้เวลาในการลดความซับซ้อน

เรียบง่ายยากที่จะสร้าง แต่เมื่อคุณมีปัญหาในการจดจำมันเป็นอาการของการออกแบบที่ไม่ดี

ฉันใช้ grep มันใช้งานได้สำหรับฉัน โคโมโดของฉันมีการค้นหาที่ดีมากมาย ดังนั้น Notepad ++

การระบุอินเทอร์เฟซของวัตถุที่ฉันใช้

Doc Strings และhelp()ฟังก์ชั่นการทำงาน ฉันใช้พวกเขา ประจำวัน

การสร้างใหม่อย่างมีประสิทธิภาพ ... มันขึ้นอยู่กับคุณภาพของการทดสอบหน่วยของฉันอย่างมาก

นั่นไม่ใช่ข่าว นั่นเป็นเรื่องจริงเสมอแม้กระทั่งในภาษาแบบคงที่

ในภาษาคงที่เรามักขี้เกียจสมมติว่าตราบใดที่มันรวบรวมมันก็มีแนวโน้มที่จะทำงานได้จริง นี่เป็นความเท็จอย่างชัดแจ้ง แต่เราขี้เกียจ


ฉันแน่ใจว่ามีวิธีแก้ไขปัญหาสำหรับปัญหาเหล่านี้

สิ่งเหล่านี้ไม่ใช่ "ปัญหา" และไม่ต้องการ "การแก้ไขปัญหา"


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

"ไม่ทราบประเภทของวัตถุ" จริงๆ. เมื่อฉันออกแบบไคลเอนต์ของวัตถุฉันรู้ว่าฉันออกแบบประเภทใด

เมื่อฉันกำหนดบริการที่ใช้โดยไคลเอนต์หลายประเภทประเภท "แน่นอน" ไม่เกี่ยวข้องเมื่อฉันได้กำหนดอินเทอร์เฟซที่จำเป็นของ quack()feathers()และ

ในที่สุดฉันมี Read-Execute-Print-Loop และเครื่องมืออื่น ๆ เพื่อกำหนดประเภท "แน่นอน" ในกรณีที่หายากเมื่อฉันมีปัญหาเล็กน้อย นั่นคือสิ่งที่ฉันใช้จริงทุกวัน

>>> x = some_mystery_factory( some, args )
>>> type(x)
>>> dir(x)

ดูเหมือนจะไม่ยากเกินไปอย่างน้อยก็ใน Python ที่จะผ่อนคลายประเภทของวัตถุ ต้องใช้ภาษาแบบไดนามิกที่มี REPL ซึ่งทำให้ง่ายต่อการดูว่าเกิดอะไรขึ้น

คุณไม่ทราบคำสั่งพารามิเตอร์ที่คาดหวังเช่นกัน ดูเหมือนว่า IDE จะช่วยได้ยาก

นั่นไม่สมเหตุสมผลเลย help()โรงงาน

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


6
ฉันรู้สึกว่าฉันสามารถยืนยันได้ว่าการถูกบังคับให้มอบความทรงจำที่มากขึ้นนั้นทำให้คุณมีความสามารถในการคิดน้อยลง ...
Nicole

@Renesis: การท่องจำไม่ได้เลวร้ายหากมีรูปแบบหรือระบบใด ๆ ในอินเทอร์เฟซ
S.Lott

1
ฉันเห็นด้วยกับอินเตอร์เฟสการจดจำ @Renesis ทำให้จิตใจของฉันห่างไกลจากความคิดที่แท้จริง ฉันไม่สนหรอกว่าโค้ดในทีมของฉันจะตัดสินใจสั่งซื้อพารามิเตอร์อีกอย่างไร ความจริงที่ว่า codebase ขนาดใหญ่ใช้ไลบรารีที่แตกต่างกันจำนวนมากที่มีมาตรฐานการตั้งชื่อที่แตกต่างกันนั้นไม่ได้เกิดขึ้นบ่อยครั้งและบ่อยครั้งที่มันเป็นไปไม่ได้หรือไม่สามารถทำได้เพื่อทำให้องค์ประกอบเหล่านี้ง่ายขึ้น
Philippe Beaudoin

Re: เอกสาร Doc ก็ดีเมื่อคุณรู้ประเภทของวัตถุ แต่บ่อยครั้งที่คุณไม่ต้องและคุณต้องค้นหามัน
Philippe Beaudoin

1
GRR ... ไม่มีบรรณาธิการที่ดีไปกว่า Vim: P
Anto


1

มี บริษัท - JetBrains - ผู้แต่ง ReSharper, TeamCity และ IDEA เมื่อเร็ว ๆ นี้พวกเขาเริ่มดูภาษาแบบไดนามิกและเปิดตัวเครื่องมือสำหรับ Python, PHP และ Ruby แล้ว

คุณภาพดีมาก นี่ไม่ใช่ปลั๊กอินอื่นสำหรับ IDE ที่คุณชื่นชอบ แต่เป็น IDE ที่มีคุณสมบัติครบถ้วนและค่อนข้างดีสำหรับการรีแฟคเตอร์ / การนำทาง / การดีบักเป็นต้น - มันเป็นเหมือน IDEA lite

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