Le mens du jobber
Det er en skikkelig deilig følelse å skoggle mens man jobber. Uten dårlig samvittighet.
Jeg trengte å foreta en beregning av tid i et program. Trengte å – så enkelt som mulig – operere med et tidspunkt som lå x timer tilbake i tid. Fant løsningen i et stykke Rubykode som er så enkel at jeg måtte le.
Etter 2000-problemet trenger du ikke fortelle en programmerer at han skal være forsiktig med beregninger som involverer tid. De fleste programmeringsspråk jeg har brukt viser deg med overtydelighet hvor skummelt tid er. Man skal forholde seg til forskjellige kalendersystemer, tidssoner, sommertid og hvem-vet-hva. Og kompleksiteten i programkoden man trenger blir så stor at fristelsen til å kutte noen svinger kan bli uutholdelig.
Gjett hva denne programkoden gjør:
i_gaar=1.day.ago
Og implementasjonen (noe tilpasset for lesbarhet):
class Fixnum</p>
def days
self * 24.hours
end
alias :day :days #Syntaktisk sukker
def hours
self * 60.minutes
end
alias :hour :hours
def minutes
self * 60
end
alias :minute :minutes
def ago(time=Time.now)
time - self
end
end
Med disse linjene på plass kan vi trylle litt:
i_gaar=1.day.ago i_forgaars=2.days.ago tidsrom=i_forgaars..i_gaar
OK, så har vi en Ruby Range. Og denne har en metode som heter include?, så vi kan skrive:<code> tidsrom.include?(23.hours.ago) #Denne er false tidsrom.include?(25.hours.ago) #Denne er true </code>Skjønner at jeg ler?