Tema: Samlingar & funktioner

Femtio variabler blir en lista. Femtio rader blir en funktion. Samma rörelse två gånger.

0% klart · 24 frågor

Starta

Ett program som växer rad för rad blir till slut omöjligt att ändra. Lösningen är inte att skriva mindre, det är att sluta skriva samma sak om och om igen.

Femtio fiender

Tänk dig att du ska bygga ut Brawl. Inte en fiende, femtio.

Med det du kan nu blir det femtio variabler: fiende_1, fiende_2, fiende_3, och så vidare ner till fiende_50. Femtio rader som skapar dem. Femtio if-satser som kontrollerar dem. Ska varje fiende dessutom ha hälsopoäng blir det hundra variabler. Ska du lägga till en fiende till får du skriva ytterligare rader på fyra ställen, och glömmer du ett av dem uppstår ett fel som inte kraschar utan bara beter sig konstigt.

Det är inte ett problem med hur du skrivit koden. Det är ett problem med vad koden saknar: ett sätt att hantera många saker som om de vore en enda.

Det är vad det här temat handlar om, och du får två verktyg som gör samma sak på två nivåer.

En raket som kostade 370 miljoner dollar

Den 4 juni 1996 lyfte Ariane 5 från den franska rymdbasen i Guyana för sin jungfrufärd. Trettiosju sekunder efter uppskjutningen förstördes raketen. Ombord fanns fyra vetenskapliga satelliter. Notan: över 370 miljoner dollar.

Orsaken hittades i en enda kodrad. Programmerarna hade återanvänt navigeringsprogramvara från den äldre Ariane 4-raketen, kod som var väl testad, väl beprövad och korrekt i sitt ursprungliga sammanhang. Men Ariane 5 var snabbare, och en hastighetsberäkning producerade ett tal som skulle sparas i en variabel som bara rymde 16 bitar. En sådan variabel kan som mest hålla talet 32767. Hastigheten var större än så, och när ett tal inte får plats försvinner inte det överskjutande, det ger ett helt annat värde än det riktiga. Navigationsdatorn läste det värdet som ett styrkommando. Raketen korrigerade mot ett fel som inte existerade, girade häftigt, slets sönder av lufttrycket och exploderade.

En bärande del ur satellitstrukturen, återfunnen efter haveriet. Det här är vad ett tal som inte fick plats i sin variabel lämnade efter sig. Ariane 501 Fragment av Deadpan Public domain

Ingen av programmerarna hade gjort ett misstag i traditionell mening. Koden fungerade. Den var korrekt för det system den ursprungligen skrevs för.

Det som saknades var ett kontrakt: ett tydligt löfte om vad koden förväntade sig att ta emot och vad den garanterade att lämna tillbaka. Utan det löftet gick det inte att avgöra om gammal kod var säker att återanvända i ett nytt sammanhang. Ett sådant löfte är precis vad en funktion är till för att ge, och det är därför den andra halvan av temat handlar om att skriva dem själv.

Samma rörelse, två nivåer

En Lista En ordnad, föränderlig samling av värden lagrade under ett enda variabelnamn. Skapas med hakparenteser och kommaseparerade värden. Se: Hyllorna ger många värden ett enda namn. I stället för femtio variabler har du en, och den vet själv hur många den innehåller. Lägger du till en fiende ändras ingenting annat i koden.

En funktion ger många rader ett enda namn. I stället för att upprepa samma sju rader på fyra ställen skriver du dem en gång, ger dem ett namn, och anropar namnet. Ändrar du något finns det ett ställe att ändra på.

Det är samma rörelse: du samlar något under ett namn och slipper hålla reda på delarna. Skillnaden är bara vad du samlar. Listan samlar data, funktionen samlar steg.

När båda sitter slutar du skriva program rad för rad och börjar bygga med delar du redan har. Det är den enskilt största förändringen i hur du arbetar under hela kursen.

Koden du redan skrivit

Under temat återvänder du gång på gång till program du redan byggt, och skriver om dem med de verktyg du får här. Inventoryt, Brawl, textäventyret.

Den gången visste du inte vad en lista var. Du visste inte vad en funktion var, eller varför en variabel kan försvinna när ett block tar slut. Koden var rätt för vad du visste då.

Nu vet du mer. Det betyder inte att den gamla koden var dålig, det betyder att du har nya verktyg för att göra den bättre. Det är så mjukvaruutveckling faktiskt fungerar: kod skrivs inte en gång och är klar. Den skrivs om med ny kunskap, nya krav och ny förståelse.

Temat slutar i Caesar-chiffret, där båda verktygen möts: alfabetet är en lista, krypteringen är en funktion, och hela chiffret krymper till ett enda anrop.

Att samla under ett namn är den röda tråden i det här temat.

  1. 1
    Datastrukturer & samlingar Introduktion till listor och hur man lagrar flera värden i en samling. 2 delar · 6 frågor
  2. 2
    Funktioner Bryt upp koden i namngivna block som gör en sak, tar emot värden och lämnar tillbaka svar. 5 delar · 15 frågor
  3. 3
    Milstolpe: Caesar-chiffret Två verktyg till, och sedan bygger du temats milstolpe: ett fungerande krypteringsprogram. 2 delar · 3 frågor