Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

วิธีป้องกันสิ่งที่เป็นนามธรรมที่ไม่ดีจากการใส่กุญแจมือรหัสของคุณ

(โพสต์นี้อิงจากโพสต์ที่ฉันส่งไปยังรายการเมื่อไม่กี่เดือนก่อน หากต้องการอ่านเพิ่มเติมทุกสัปดาห์ เข้าร่วมที่นี่!)

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

แต่เมื่อคุณมีแย่ นามธรรม?

คุณขุดออกการอ้างอิง API ทุกครั้ง เพื่อให้เข้าใจว่าวิธีการนั้นชัดเจน น่าจะตั้งชื่อว่า leaderboard เรียกว่าจริงๆ คุณพยายามปรับโครงสร้างใหม่รอบๆ แต่ส่วนหนึ่งของโค้ดจะมอบข้อมูลที่มีโครงสร้างให้คุณ และอีกส่วนหนึ่งจะให้บรรทัดข้อความดิบแก่คุณ และทุกครั้งที่คุณแตะโค้ด จะมีบางสิ่งขาดหายไป และคุณต้องใช้เวลาที่เหลือของวันในการพยายามแก้ไขข้อบกพร่อง เพราะคุณปรับแต่ง position แต่ไม่ได้อัปเดต score ในเวลาเดียวกัน

แล้วคุณจะสร้างนามธรรมที่ดีได้อย่างไร ในขณะที่อยู่ห่างจากสิ่งเลวร้าย?

การใช้อุปมาอุปมัยที่ดีในการเขียนโค้ดที่ชัดเจนขึ้น

นามธรรมที่ดีมาจากอุปมาที่ดี

A อุปมา อธิบายบางสิ่งในระบบของคุณโดยเชื่อมโยงกับแนวคิดที่อยู่ในหัวของคุณแล้ว ตัวอย่างเช่น:

  • บรรทัดคำสั่งจำนวนมากใช้คำอุปมาของ ไปป์ .

    คุณใส่ข้อมูลไว้ที่ปลายด้านหนึ่งของไพพ์ แล้วข้อมูลก็ออกมาอีกด้านหนึ่ง ง่ายต่อการจินตนาการและใช้งานง่าย

  • ในการเขียนโปรแกรมพร้อมกัน ล็อก เป็นอุปมาที่ดี

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

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

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

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

คุณมีอุปมาอุปมัยที่ดีได้อย่างไร

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

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

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

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

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

สุดท้ายใช้ในประโยค “รหัสนี้ คือ (บางอย่าง) เพราะ…” คุณช่วยอธิบายอุปมาของคุณกับคนที่ไม่มีพื้นฐานทางเทคนิคได้ไหม และให้พวกเขาเข้าใจว่ามันใช้ทำอะไร ยิ่งมีภูมิหลังที่เข้าใจอุปมาน้อยเท่าใด คำอุปมาของคุณก็จะยิ่งมีประโยชน์มากขึ้นเท่านั้น

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

อุปมาและ OOP

การเขียนโปรแกรมเชิงวัตถุมีพื้นฐานมาจากคำอุปมา นั่นคือสิ่งที่มันได้รับพลังของมัน! ชั้นเรียนที่ออกแบบมาอย่างดีไม่เพียงแต่ซ่อนการนำไปใช้จากชั้นเรียนอื่น แต่ยังซ่อนการนำไปใช้งานจากคุณ .

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

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

ฉันชอบที่จะได้ยินสิ่งที่คุณค้นพบ แสดงความคิดเห็นและแจ้งให้เราทราบ

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

ดาวน์โหลดตัวอย่าง Practicing Rails . ฟรี 32 หน้าของฉัน และเรียนรู้วิธีลองใช้แนวคิดแบบนี้ในขนาดย่อมโดยไม่ถูกครอบงำ