บล็อกโพสต์นี้ถูกโพสต์ใน Hacker News พร้อมอัปโหลดหลายรายการ มาจาก C ++ ตัวอย่างเหล่านี้ส่วนใหญ่ดูเหมือนจะขัดแย้งกับสิ่งที่ฉันได้รับการสอน
เช่นตัวอย่าง # 2:
แย่:
def check_for_overheating(system_monitor)
if system_monitor.temperature > 100
system_monitor.sound_alarms
end
end
เมื่อเทียบกับดี:
system_monitor.check_for_overheating
class SystemMonitor
def check_for_overheating
if temperature > 100
sound_alarms
end
end
end
คำแนะนำใน C ++ คือคุณควรชอบฟังก์ชั่นฟรีแทนฟังก์ชั่นสมาชิกที่เพิ่มการห่อหุ้ม ทั้งสองอย่างนี้มีความหมายเหมือนกันดังนั้นเหตุใดจึงเลือกตัวเลือกที่มีการเข้าถึงสถานะเพิ่มเติม
ตัวอย่างที่ 4:
แย่:
def street_name(user)
if user.address
user.address.street_name
else
'No street name on file'
end
end
เมื่อเทียบกับดี:
def street_name(user)
user.address.street_name
end
class User
def address
@address || NullAddress.new
end
end
class NullAddress
def street_name
'No street name on file'
end
end
ทำไมจึงเป็นความรับผิดชอบของUser
การจัดรูปแบบสตริงข้อผิดพลาดที่ไม่เกี่ยวข้อง? ถ้าฉันต้องการทำอะไรนอกเหนือจากการพิมพ์'No street name on file'
ถ้าไม่มีถนน เกิดอะไรขึ้นถ้าถนนชื่อเดียวกัน
ใครช่วยสอนฉันเกี่ยวกับข้อดีและเหตุผลของ "บอกว่าอย่าถาม" ฉันไม่ได้มองหาสิ่งที่ดีกว่า แต่พยายามทำความเข้าใจกับมุมมองของผู้เขียนแทน