Tema: Logik & repetition

Lär dig att styra programflöden med villkor och loopar.

0% klart · 24 frågor

Starta

Det händer bara om. Det händer för varje. Det är vad som skiljer ett program från ett dokument.

Det ditt textäventyr inte kan göra

Du har nu ett program som berättar en historia. Det ställer en fråga, reagerar på svaret och tar spelaren till ett av flera slut.

Men prova det en gång till. Programmet frågar om ditt namn, ställer sin fråga och avslutar. Vill du spela igen måste du starta om från terminalen. Det finns ingen poängtavla. Det finns inget sätt att lägga till tio rum utan att skriva tio separata if-satser. Det finns ingen motståndare som slår tillbaka. Varje körning ser exakt likadan ut oavsett vad som hänt tidigare.

Det är inte ett problem med hur du skrivit koden. Det är ett problem med vad koden saknar: förmågan att upprepa sig, och förmågan att hantera mer än ett beslut i taget. De två mekanismerna det här temat introducerar, villkor och loopar, är det som förvandlar ett program från en linjär sekvens till ett system som faktiskt kan tänka och reagera.

Och så fort ett program börjar fråga användaren saker om och om igen dyker ett tredje problem upp, som du möter i slutet av temat: vad händer när svaret inte är det du bad om?

En maskin som vävde med logik

1804 konstruerade fransmannen Joseph Marie Jacquard en vävstol styrd av hålkort. Varje kort representerade en rad i ett mönster: om hålet satt här, höjdes den här tråden, annars inte. Läste maskinen nästa kort upprepades processen för nästa rad. Sedan nästa. Sedan nästa, tills hela mönstret var vävt.

Korten löper genom maskinen i en kedja, ett kort per rad i mönstret. Slut på kort, slut på väv. A Jacquard loom showing information punchcards, National Museum of Scotland av Stephencdickson CC BY-SA 4.0

Det är en if-sats inuti en loop, byggd i metall och trä, tjugo år innan Ada Lovelace skrev världens första algoritm och åttio år innan elektriciteten kom in i bilden. Konceptet är äldre än datorer. Det som förändrades med programvara var inte idén, det var hastigheten och flexibiliteten.

Charles Babbage besökte en Jacquard-vävstol och förstod omedelbart att samma princip kunde tillämpas på matematiska beräkningar. Hans Analytical Engine, den maskin Lovelace programmerade, använde hålkort direkt inspirerade av Jacquard. Den är en röd tråd från ett franskt väveri 1804 till Python-koden du skriver idag: en maskin som kan upprepa sig och fatta beslut.

Vad repetition och logik gör möjligt

Din e-postleverantör tar emot tusentals mejl i sekunden. Varje mejl utvärderas mot hundratals regler: Är avsändaradressen känd? Innehåller ämnesraden vissa ord? Har avsändaren skickat för många mejl på kort tid? Varje fråga är ett villkor. Att ställa frågan för varje mejl är en loop. Resultatet, inkorg eller skräppost det är utfallet av den kombinationen.

En streaming-tjänst har hundratusentals titlar i sin katalog. När du öppnar appen körs en process som jämför din tittarhistorik mot varje titel, poängsätter dem, sorterar resultatet och presenterar de bästa förslagen. Det händer på millisekunder. Det händer för varje användare. Det händer varje gång du öppnar appen. Utan loopar och villkor är det omöjligt.

En lösenordsvalidator kontrollerar varje tecken i ditt lösenord, ett i taget, i en loop, och avgör om tecknet är en siffra, en versal, ett specialtecken. Varje kontroll är ett villkor. Att göra det för varje tecken är en loop. Resultatet är den lilla styrkeindikator som lyser rött eller grönt.

Dessa system är inte avancerade i konceptet även om det känns så. Det är resultatet av de mekanismer du lär dig i det här temat. Det är skalan och kombinationen som gör dem kraftfulla.

Det datorn gör som du inte kan

En människa som kontrollerar tiotusen poster för ett specifikt fel gör misstag. Inte för att de är slarvig, utan för att uppmärksamhet är en ändlig resurs. Kring post nummer sjuhundra börjar koncentrationen svikta. Kring post nummer fyratusen är det oundvikligt att något missas.

En loop gör ingen skillnad på varv ett och varv fyratusen. Den tillämpar exakt samma villkor med exakt samma precision varje gång, utan att bli trött, distraherad eller omotiverad. Det är inte ett argument för att ersätta människor med kod, det är ett argument för att låta kod hantera det kod är bra på, så att människor kan ägna sig åt det människor är bra på.

Att förstå vilka problem som lämpar sig för loopar och villkor är en av de mest praktiska förmågorna en programmerare har. Det är inte en syntaxfråga. Det är ett sätt att tänka på problem.

När loopen möter en människa

En loop som frågar om och om igen är också en loop som får fel svar om och om igen. Skriver någon “katt” när programmet bad om en siffra dör hela programmet, och allt användaren gjort dessförinnan följer med i fallet.

Det är därför temat slutar med att göra dina loopar tåliga. Det är ingen tredje förmåga vid sidan av att välja och att upprepa, det är vad som händer när de två möter en riktig människa: en loop som frågar om, ett villkor som håller, ett program som inte går sönder för att någon skrev fel.

Att få programmet att både välja och upprepa, och att överleva den som använder det, är den röda tråden i det här temat.

  1. 1
    Vägval & villkor Lär dig att styra programflöden med villkor. 3 delar · 9 frågor
  2. 2
    Repetitiva system Lär dig loopar och automatisering. 3 delar · 9 frågor
  3. 3
    Robusthet Kod som överlever verkliga användare, och ett sätt att ställa diagnos när något ändå går fel. 2 delar · 6 frågor
  4. 4
    Milstolpe: Brawl Ett fightingspel där en spelare möter en datorstyrd motståndare: skada slumpas, hälsopoäng räknas ner och kampen fortsätter tills någon vinner. 1 delar · 0 frågor