Basic personligt

Daniels personliga blogg

Bra och dåliga API

Det är lite lustigt hur ganska små saker kan göra en väldigt förvirrad.

I nästan alla programspråk ser tilldelningar ut ungefär så här:

destination = källa

Nej, det är inte en slump att det är samma ordning som i normal matematik. Programmering och matematik är samma sak. Man läser det som ”sätt ‘destination’ till värdet på ‘källa'”. I vissa former av assembler har man vänt på det, så det istället ser ut så här:

källa => destination

Det läser man som ”ta värdet på ‘källa’ och lagra i ‘destination'”. Den exakta syntaxen varierar däremot, men det är ordningen som är det viktiga här.

Samma ordning som i första exemplet, finns även i biblioteket till C i funktionerna memcpy() och strcpy(). Att tänka ”destination först, källa efteråt” ligger därför ganska hårt kopplat i min gamla hjärna.

Åter till nutid. Jag håller på att lägga till stöd för att lagra data i ISAM-tabeller i vår SMS-applikation, något som kommer släppas framåt sommaren eller hösten någon gång. Vi behöver två olika sätt att hitta rätt meddelande på. Antingen via dess unika nummer, eller för att något fält börjar med någonting speciellt. Om det hade varit ett bilregister hade det varit som att antingen söka på det fullständiga registreringsnumret eller alla bilar där numret börjar med ”ABC”, eller kanske bara ”AB”.

När man vill söka efter någonting så är det tre saker som är intressanta. Det är de här tre sakerna man skickar in som parametrar till sin sökfunktion.

  1. Var man ska söka.
  2. Vad man ska söka efter.
  3. Vart resultatet ska hamna.

I det här fallet så var frågan på var numret på en viss indexfil. Det är ju en av de viktigaste sakerna, så den kan få komma först i parameterlistan.

Vad man ska söka efter kan ju skickas på två olika sätt. Funktionen som söker efter en komplett registreringsskylt behöver ju bara ha en pekare till vart datat ligger. Att det är 6 tecken ”vet” den ju redan. I det andra fallet så måste man skicka två saker, både en pekare till datat (”vad-data”), och hur många tecken det rör sig om (”vad-storlek”).

Parametern vart är helt enkelt adressen till en minnesarea där resultatet kan lagras. Det är alltså destinationen för operationen, och därmed antog jag att den skulle komma tidigt, t.ex. som parameter nummer två.

En bra grundregel när det är flera parametrar är att se till att de som hör ihop på något sätt ligger bredvid varandra. I det här fallet hör ju ”vad-data” och ”vad-storlek” ihop, så de två möjliga alternativen blir de här:

  1. Destination först: varvartvad-data respektive varvartvad-datavad-storlek
  2. Destination på slutet: varvad-datavart respektive varvad-datavad-storlekvart

Alternativ 1 har en annan fördel, förutom att den följer principen med ”destination först”. Parametern vart är där alltid nummer två, medan den i alternativ 2 är antingen nummer tre eller fyra. Sådan ”här ibland, där ibland” är lite osnyggt.

Det var lite otydligt i dokumentationen, men eftersom storleken kom sist så antog jag att de hade valt alternativ 1. Konstigt nog så fick jag inga träffar om jag satte storleken till något annat än 0, och även då så var resultatet skräp. Jag experimenterade lite, men blev bara mer förvirrad. Jag letade upp lite exempelkod, då jag insåg vad felet var. De hade valt alternativ 2, fast med en fuling. Parametrarna såg ut så här: varvad-datavart respektive varvad-datavartvad-storlek. Parametrarna för vad var alltså uppdelade och låg på varsin sida om vart! Jättefint eftersom de tre första parametrarna då alltid kom i samma ordning (vilket vi kom fram till var bra alldeles nyss), men det ledde till att datat man skulle leta efter och hur mycket de var, inte längre låg bredvid varandra. Mindre snyggt.

Det kanske verkar petigt, men det gör stor skillnad om ett API är konsekvent och logiskt, så att jag inte behöver ägna en massa energi och tid åt att fundera ut i vilken ordning saker och ting ska vara. När allting fungerar ”som vanligt” ger det mycket mer tid åt det egentliga problemet, vilket gör att man blir mycket mer produktiv.

Andra bloggar om: .

Annonser

mars 19, 2008 - Posted by | teknik

Inga kommentarer ännu.

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s