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?

Code art by Frisk Bris. And, oh, we work too.