ฉันเพิ่งอ่านหนึ่งในบทความของ Joelที่เขาพูดว่า:
โดยทั่วไปฉันต้องยอมรับว่าฉันกลัวคุณสมบัติภาษาเล็กน้อยที่ซ่อนสิ่งต่างๆ เมื่อคุณเห็นรหัส
i = j * 5;
…อย่างน้อยคุณรู้ไหมว่า j นั้นถูกคูณด้วยห้าและผลลัพธ์ที่เก็บไว้ใน i
แต่ถ้าคุณเห็นตัวอย่างรหัสเดียวกันใน C ++ คุณจะไม่รู้อะไรเลย ไม่มีอะไร วิธีเดียวที่จะรู้ว่าสิ่งที่เกิดขึ้นจริงใน C ++ คือการค้นหาประเภทของฉันและ j คืออะไรบางอย่างที่อาจถูกประกาศในที่อื่นทั้งหมด นั่นเป็นเพราะ j อาจเป็นประเภทที่มีการ
operator*
ใช้งานมากเกินไปและจะทำสิ่งที่มีไหวพริบมากเมื่อคุณพยายามคูณมัน
(เน้นที่เหมือง) กลัวความสามารถทางภาษาที่ซ่อนสิ่งต่าง ๆ หรือไม่? คุณจะกลัวสิ่งนั้นได้อย่างไร การซ่อนสิ่งต่าง ๆ (หรือที่เรียกว่านามธรรม ) เป็นหนึ่งในแนวคิดหลักของการเขียนโปรแกรมเชิงวัตถุหรือไม่? ทุกครั้งที่คุณเรียกใช้เมธอดa.foo(b)
คุณจะไม่มีความคิดว่าจะทำอะไร คุณต้องค้นหาว่าประเภทใดa
และb
เป็นอะไรบางอย่างที่อาจถูกประกาศในที่อื่นทั้งหมด ดังนั้นเราควรทำอย่างไรกับการเขียนโปรแกรมเชิงวัตถุเพราะมันซ่อนสิ่งต่าง ๆ จากโปรแกรมเมอร์มากเกินไป?
และj * 5
แตกต่างจากj.multiply(5)
ที่คุณอาจต้องเขียนในภาษาที่ไม่รองรับการบรรทุกเกินพิกัดได้อย่างไร อีกครั้งคุณจะต้องค้นหาประเภทของj
และมองเข้าไปในmultiply
วิธีการเพราะแท้จริงและดูเถิดj
อาจเป็นประเภทที่มีmultiply
วิธีการที่ทำสิ่งที่มีไหวพริบมาก
"Muahaha ฉันเป็นนักเขียนโปรแกรมที่ชั่วร้ายที่ตั้งชื่อวิธีการmultiply
แต่สิ่งที่จริง ๆ แล้วมันคือความคลุมเครือและไม่เข้าใจสัญชาตญาณโดยสิ้นเชิง นั่นเป็นสถานการณ์ที่เราต้องพิจารณาเมื่อออกแบบภาษาการเขียนโปรแกรมหรือไม่? จากนั้นเราต้องละทิ้งตัวระบุจากภาษาการเขียนโปรแกรมโดยอ้างว่าอาจทำให้เข้าใจผิด!
หากคุณต้องการทราบว่าวิธีการใดที่คุณสามารถทำได้อย่างรวดเร็วสามารถดูได้ที่เอกสารประกอบหรือมองเข้าไปในการนำไปใช้ ผู้ประกอบการมากไปเป็นน้ำตาลเชิงประโยคและฉันไม่เห็นว่ามันจะเปลี่ยนเกมได้อย่างไร
โปรดให้ความกระจ่างแก่ฉัน