Bu blog yayını Hacker News’de birkaç oy aldı. C ++ 'dan gelince, bu örneklerin çoğu benim öğretildiklerime aykırı görünüyor.
Örnek 2 gibi:
Kötü:
def check_for_overheating(system_monitor)
if system_monitor.temperature > 100
system_monitor.sound_alarms
end
end
iyi karşı:
system_monitor.check_for_overheating
class SystemMonitor
def check_for_overheating
if temperature > 100
sound_alarms
end
end
end
C ++ 'da tavsiye, kapsüllemeyi arttırdıkça, üye işlevler yerine ücretsiz işlevleri tercih etmeniz gerektiğidir. Bunların her ikisi de anlamsal olarak aynıdır, peki neden daha fazla duruma erişimi olan seçimi tercih etsin?
Örnek 4:
Kötü:
def street_name(user)
if user.address
user.address.street_name
else
'No street name on file'
end
end
iyi karşı:
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
Neden User
alakasız bir hata dizesini biçimlendirmek sorumluluğu var ? Ya 'No street name on file'
sokağı yoksa izinden başka bir şey yapmak istersem ? Ya caddeye aynı şey denirse?
Birisi beni “Söyleme, Soru Sorma” avantajları ve gerekçeleriyle aydınlatabilir mi? Hangisinin daha iyi olduğunu aramıyorum, bunun yerine yazarın bakış açısını anlamaya çalışıyorum.