Motsägelse, ex 01.

Denna första gång i serien om motsägelser (finns som podcast-avsnitt också) skall vi kika på en bok, skriven på  svenska, om programmering. Vi skall nu belysa en motsägelse. Och, nu kommer ni läsare/lyssnare tänka något i stil med “är ni så jävla duktiga då?”. Nej, verkligen inte är vårt svar. Men vi jobbar hårt och släpper allt vi gör publikt, utan att ta betalt och rättar så fort vi bara kan. Dessutom hoppar vi över det dör med titlar. Mest beroende på att vi inte har titlar, men också för att vi båda tycker att det alltför ofta är till för att kompensera. Vidare uppmuntrar vi dig, läsare/lyssnare att publikt komma med kritik på våra grejer – vi rättar till felen direkt eller förklarar varför vi gjort som vi gjort. Men, tveka inte. Kom med  kritik, dock saklig.

Till saken. Denna serie handlar om motsägelser. Vi skall belysa detta med ett ganska roligt exempel från en bok skriven om språket C. Alla som använt C i riktiga program, d v s inte akademiska program som löser en löjligt enkelt uppgift och sen är klar, vet att det gäller att kolla om en funktion lyckades utföra sin uppgift eller inte. I C görs detta genom att kolla på returvärdet. I nedan exempel ser vi an allokering följt av en användning av det som returnerades (en pekare):

char *res = malloc(n+1);
strcpy(res, temp);

Vi tycker att det är jäkligt viktigt, jo men det är faktiskt det, med att kolla returvärden. Ok, i vissa fall kanske man kan strunta i att kolla om det gick bra att göra printf  men vi säger (vi tror inte!) att det är viktigt att visa, de personer som man skall lära ut till, att det är viktigt att skriva robusta program. Är det ens program annars? I koden kontrolleras inte om malloc lyckades. Vi kan alltså inte veta om res kan användas. Det hade räckt att göra något i stil med:

char *res = malloc(n+1);
if (res==null) 
  {
    return null;
  }

.. så hade allt varit ok.

Varför tar vi upp detta och gnäller så mycket. Det är faktiskt inte (bara) för att vi tycker att koden är slarvig och inte lär ut riktig programmering utan för att författaren bara 110 mm (11 cm) nedanför pratar om vanliga misstag. Ett av dessa vanliga misstag är :

utnyttjar en pekare som är oinitierad eller innehåller värdet NULL.

Man kan diskutera huruvida vi skall berätta om vanliga misstag och inte samtidigt berätta hur man undviker dessa misstag. men vi undviker denna, enligt oss, stora miss och fokuserar istället på det ganska komiska i att det i denna bok görs EXAKT den sak man 11 cm nedanför identifierar som ett vanligt misstag.

c-common-mistakes

Vi ser detta som ett exempel på motsägelse. Och givet de 110mm som skiljer texten med motsägelsen säger vi att den får 110 mp (motsägelsepoäng). Som du säkert förstått är en motsägelse i sig kass, men om du dessutom har ett lågt “mp” är det ätter värre. 110mm eller 11cm… inte kan någon vara värre än detta?

…. “just you wait and see”

/r+h

btw, funktionen read_input ovan har inspirerat oss till att skriva om robust kod. T ex följande: Reading data from a user.

 

 

Advertisements
This entry was posted in Uncategorized and tagged , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s