WTF

Akronym for “What the fuck!”. I denne kategorien vil du finne skikkelig stygg kode og andre ting som har fått bloggens forfatter til å sperre opp øynene og si WTF!!!

Hva er det jeg driver med nå da?

Her om dagen skrev jeg denne lille metoden:

private static void SetDuration(TimeSpan start, TimeSpan end, Action<double> doWithResult)

{

    var executionDuration = end - start;

    var diffInSeconds = executionDuration.TotalMilliseconds / 1000d;

    doWithResult(diffInSeconds);

}

.. som jeg brukte på denne måten:

SetDuration(userProcessorTimeStart, userProcessorTimeEnd, (d) => measurement.UserTime = d);

SetDuration(privilegedProcessorTimeStart, privilegedProcessorTimeEnd, (d) => measurement.SystemTime = d);

SetDuration(totalProcessorTimeStart, totalProcessorTimeEnd, (d) => measurement.TotalTime = d);

Det er lett for at det går litt krøll under topplokket når man driver og lærer seg nye programmeringsspråk og teknikker, og begynner å rote og blande det sammen med det man allerede kan. I Ruby bruker man mye kodeblokker – som til en viss grad tilsvarer lambda-uttrykk i C# – og jeg har nok blitt litt vel opptatt av hvordan dette lar seg utnytte.

Når man lærer nye ting er det ganske vanlig at man går gjennom en periode hvor man gjør ting unødvendig komplisert, rett og slett for å få erfaring med å bruke teknikkene, og jeg har faktisk brukt tilsvarende fremgangsmåte som dette til å lage noen ganske fine API’er tidligere, men denne gangen har jeg rett og slett glemt ut at metoder faktisk kan returnere verdier. Metoden skulle selvfølgelig se slik ut:

private static double GetDuration(TimeSpan start, TimeSpan end)

{

    var executionDuration = end - start;

    return executionDuration.TotalMilliseconds / 1000d;

}

.. og brukes slik:

measurement.UserTime = GetDuration(userProcessorTimeStart, userProcessorTimeEnd);

measurement.SystemTime = GetDuration(privilegedProcessorTimeStart, privilegedProcessorTimeEnd);

measurement.TotalTime = GetDuration(totalProcessorTimeStart, totalProcessorTimeEnd);

Håper du fikk deg en god latter. Eller kanskje du fikk en idé til hvordan dette kan benyttes i andre sammenhenger?

Static: ikke bare dårlig design, men skummelt også

DRY == Don’t repeat yourself!

Store filer i databasen

Torbjørn Marø

Torbjørn er systemutvikler og et aktivt medlem av .NET-miljøet i Bergen. Dette er hans blog.

Siste kommentarer


Torbjørn: Skulle forresten ikke forundre meg om IronRuby - slik som mi...

Torbjørn: Er faktisk litt forvirret over de ulike strategiene man kan...

Jonas Follesø: Tips er og å se hvordan man lytter på events i IronRuby, s...

Torbjørn: Jeg unnlot med vilje å nevne ruby's implementasjon av Obser...

Odd Rune: Foretrekker ofte å bruke Observer jeg - http://ruby-doc.org...

Torbjørn: Takk for linken - gir god mening! Kanskje PSWinCom burde ha...

Bård Strøm: Ja, jeg er på. Interessante betraktninger når jeg nå skal...