Soms lijkt Ruby teveel op natuurlijke taal...
Geplaatst door Michiel de Mare za, 15 sep 2007 00:24:00 GMT
Dit stukje code heb ik net weggehaald uit een van mijn classes.if my_last_update < 8.hours.agoWaarom? Omdat het wanneer je het voorleest een mooie Engelse zin vormt die helaas precies het tegenovergestelde betekent van de Ruby code. Dat probleem heb je in andere talen weer niet…
Je maakt me wel nieuwsgierig naar wat het dan geworden is; misschien?
Je had de ‘<=>’ of ‘<’ operator natuurlijk ook opnieuw kunnen definiëren.
@Matthijs alhoewel ik operator overloading in sommige gevallen een elegante oplossing vind lijkt dit me nou typisch een geval waar het de code juist minder transparant maakt; niet iedereen leest code alsof het engels is!
Ik heb het omgedraaid.
if 8.hours.ago > my_last_update
Zo word je niet meer in de war gebracht door het Engels (maar leest het ook niet meer als Engels).
Als alternatief dit misschien?
if since(my_last_update) > 8.hours
Oh, voor alle duidelijkheid, de code:
if my_last_update < 8.hours.ago
zou je moeten lezen als: Als mijn laatste update plaatsvond vóór het tijdstip dat 8 uur geleden werd bereikt… Niet erg intuïtief, non?
Ik vind: wel een erg mooie oplossing eigenlijk.
Eigenlijk doet het precies wat er staat, je laat jezelf laat verwarren door het feit dat er ‘ago’ of ‘from_now’ staat.
Er is eigenlijk geen oplossing voor behalve goede tests schrijven en misschien een helper method om je over dingen na te helpen denken.