Onze dagmethode #1: Range#coerce
Geplaatst door Michiel de Mare di, 05 feb 2008 08:00:00 GMT
We introduceren een nieuwe feature: de methode van de dag. Hierin demonstreren we een korte, algemeen toepasbare methode. We doen aan verzoekjes!
Vandaag beginnen we met Range#coerce. Het probleem: je hebt een waarde, en je wilt garanderen dat deze binnen een bepaald interval ligt. Klinkt ideaal voor een Range. Een Range heeft wel een methode om te testen of een waarde erbinnen ligt (include?
) maar niet om de waarde te forceren.
Vandaar het volgende:
class Range
def coerce(x)
x < first ? first : x > last ? last : x
end
end
(1..12).coerce(999) # => 12
Ik dacht dat coerce bedoelt wat om een geforceerde type conversie uit te voeren als twee objecten van een verschillend type maar toch compatible zijn (float vs. complex)?
Eigenlijk zou ik de methode ‘limit’ of ‘crop’ noemen.
Zover ik dit ben tegen gekomen in de (computer graphics) literatuur heet deze functionaliteit normaliter ‘clampen’ of ‘clamp’.
Ja, het geven van een goede naam is eigenlijk nog het moeilijkste. Dat zullen we deze maand nog vaker tegenkomen.
@Redmar Kerkhoff
zelf kom (of eigenlijk kwam) ik uit de digitale signaal bewerkings hoek en daar noemden we dit ‘clipping’.
@Michiel
volgens mij is de juiste naamgeving voor dit soort functies essentieel anders ga je zeer waarschijnlijk wildgroei krijgen.
Als ik op zoek zou zijn naar een functie die het bereik van de input limiteerd en niet direct iets kan vinden wat dat doet schrijf ik het zelf ;)
squeeze? Volgens http://m-w.com: “to crowd into a limited area”.