Programmering — Gymnasiet
Programmering 1 (PRRPRR01) enligt Skolverkets ämnesplan: algoritmer, datatyper, kontrollstrukturer, funktioner, objektorientering, felsökning, versionshantering och programmeringens samhällsroll.
Ämne: Programmering · Nivå: Gymnasium (16–19) · 384 kort
Innehåll
- Programmering är konsten att skriva instruktioner som en dator kan utföra. Källkod skrivs i ett programspråk (t.ex. Python) och översätts till maskinkod som processorn förstår.
- Källkod är text skriven i ett programspråk som beskriver vad ett program ska göra. Den är människa-läsbar och måste översättas till maskinkod innan datorn kan köra den.
- Maskinkod är instruktioner i binär form (0:or och 1:or) som processorn direkt kan utföra. Den är specifik för varje processorarkitektur (t.ex. x86, ARM).
- En kompilator översätter hela källkoden till körbar maskinkod på en gång (t.ex. för C, C++ och Rust). Resultatet är en .exe- eller binärfil som sedan körs utan kompilatorn.
- En interpretator läser och kör källkoden rad för rad utan att skapa en separat körbar fil. Python, JavaScript och PHP körs typiskt på det sättet.
- Programspråk är formella språk för att skriva källkod. Vart och ett har en strikt syntax och semantik. Exempel: Python, Java, JavaScript, C#, C++, Swift, Rust.
- Högnivåspråk (Python, Java) är abstrakta och människa-läsbara; lågnivåspråk (assembler) ligger nära maskinkoden. Högnivå = snabbare att utveckla; lågnivå = mer kontroll över hårdvaran.
- Syntax är reglerna för hur kod måste skrivas för att tolkas av språket. Brutna syntax-regler ger ett syntaxfel och programmet startar inte alls.
- Semantik är vad koden faktiskt gör när den körs. Koden kan ha korrekt syntax men ändå ge fel resultat om semantiken är fel — det är ett logiskt fel.
- IDE står för Integrated Development Environment. Det är programvara som samlar editor, kompilator/interpretator, debugger och ofta versionshantering i ett gränssnitt. Exempel: VS Code, PyCharm, IntelliJ.
- Pseudokod är ett program beskrivet informellt i en blandning av vanlig text och kodliknande syntax. Den används för att planera logik innan implementationen i ett riktigt språk.
- Ett flödesschema är en grafisk representation av en algoritms steg och beslut. Det använder symboler för start/stopp (oval), process (rektangel) och beslut (romb).
- Bytecode är ett mellansteg mellan källkod och maskinkod (t.ex. .class-filer i Java, .pyc i Python). Den körs av en virtuell maskin (JVM, CPython) som översätter den till maskinkod vid körning.
- REPL står för Read-Eval-Print Loop — ett interaktivt gränssnitt där man skriver in en kodrad, den körs direkt och resultatet skrivs ut. Pythons inbyggda terminal-prompt är ett exempel.
- Python är ett dynamiskt typat högnivåspråk skapat av Guido van Rossum 1991. Det är vanligast i svensk gymnasieundervisning på Programmering 1 för sin läsbara syntax och låga inlärningströskel.
- En variabel är ett namngivet utrymme i minnet som lagrar ett värde. Värdet kan ändras under programmets gång. I Python: namn = värde, t.ex. ålder = 17.
- En konstant är ett namngivet värde som inte ska ändras under körningen. Python saknar formell konstant — konventionen är ATT_SKRIVA_NAMNET_MED_VERSALER (t.ex. PI = 3.14).
- Datatypen int representerar heltal, positiva eller negativa, utan decimaldel. I Python har int obegränsad storlek (begränsas bara av tillgängligt minne).
- Datatypen float representerar flyttal — tal med decimaldel, t.ex. 3.14 eller -0.5. Flyttal lagras binärt enligt IEEE 754 vilket ger små avrundningsfel: 0.1 + 0.2 blir 0.30000000000000004.
- Datatypen str (string) representerar text — en sekvens av tecken omsluten av citationstecken. Exempel: "Hej" eller 'Hej'. I Python är strängar oföränderliga (immutable).
- Datatypen bool (boolean) har bara två värden: True och False. Den används för att representera sanningsvärden — t.ex. resultatet av en jämförelse: 5 > 3 ger True.
- En lista (list) i Python är en ordnad, föränderlig samling värden. Skapas med hakparenteser: [1, 2, 3] eller []. Elementen kan vara av olika typer och listan kan växa/krympa.
- En tupel (tuple) är en ordnad, oföränderlig (immutable) samling värden. Skapas med parenteser: (1, 2, 3). När den väl är skapad kan elementen inte ändras.
- En dictionary (dict) är en samling nyckel-värde-par. Skapas med klammerparenteser: {"namn": "Anna", "ålder": 17}. Slår upp värden snabbt via sin nyckel.
- Ett set är en oordnad samling unika värden. Skapas med {1, 2, 3}. Dubletter försvinner automatiskt — användbart för att ta bort duplikat ur en lista: set([1, 2, 2, 3]) ger {1, 2, 3}.
- Värdet None i Python representerar avsaknad av värde. Det är inte 0, inte False och inte tom sträng — utan en egen typ (NoneType). Funktioner utan return-sats returnerar None implicit.
- Dynamisk typning innebär att variabelns typ bestäms av värdet och kan ändras under körningen. Python är dynamiskt typat: x = 5 ger int, sedan x = "hej" ger str — utan deklaration.
- Statisk typning innebär att variabelns typ deklareras och kontrolleras vid kompilering. Java och C# är statiskt typade: int x = 5; — försök att tilldela en sträng ger ett kompilatorfel.
- Typkonvertering (casting) omvandlar ett värde från en typ till en annan. I Python: int("5") ger heltalet 5, str(3.14) ger strängen "3.14", float("2") ger flyttalet 2.0.
- Reserverade ord (nyckelord) är ord som språket använder för sin syntax och inte får användas som variabelnamn. I Python: if, else, for, while, def, class, return, True, False, None — bland andra.
- Aritmetiska operatorer i Python: + (addition), - (subtraktion), * (multiplikation), / (division med decimaltal), // (heltalsdivision), % (modulo — rest), ** (potens).
- Modulo-operatorn % ger resten vid heltalsdivision. 17 % 5 ger 2 (eftersom 17 = 3·5 + 2). Användbar för att kolla om ett tal är jämnt: x % 2 == 0.
- Jämförelseoperatorer ger ett booleanskt svar: == (likhet), != (olikhet), < (mindre än), > (större än), <= (mindre/lika), >= (större/lika). OBS: == jämför värden, = tilldelar.
- Logiska operatorer kombinerar booleanska värden: and (båda sanna), or (minst en sann), not (negation). Exempel: if ålder >= 18 and har_korkort: — både myndig OCH med körkort.
- Tilldelningsoperatorerna med uppdatering: += (öka med), -= (minska med), *= (multiplicera med), /= (dividera med). x += 1 är samma sak som x = x + 1.
- Operatorernas prioritet (precedence) avgör räkneordningen. Som i matematiken går ** före * och /, som går före + och -. Parenteser ändrar ordningen: (2 + 3) * 4 ger 20, inte 14.
- En if-sats kör ett kodblock om villkoret är sant. I Python: if villkor: följt av indenterad kod. Indenteringen (oftast 4 mellanslag) avgör vad som tillhör blocket.
- elif (else if) testar ytterligare villkor om föregående if/elif var falskt. Else körs om inget av villkoren stod. Endast en gren av if-elif-else exekveras per genomgång.
- En while-loop upprepar ett kodblock så länge villkoret är sant. Används när man inte vet i förväg hur många gånger loopen ska köras. Risk för oändlig loop om villkoret aldrig blir falskt.
- En for-loop itererar över elementen i en sekvens (lista, sträng, range). I Python: for tal in [1, 2, 3]: print(tal) — skriver ut 1, 2, 3. Används när antalet upprepningar är känt.
- range(n) i Python genererar talen 0, 1, 2, ... n-1. range(2, 8) ger 2,3,4,5,6,7. range(0, 10, 2) ger 0,2,4,6,8 (steg om 2). Vanligt i for-loopar när man vill ha ett värde i taget.
- break bryter sig ur närmaste loop direkt och fortsatt körning sker efter loopen. continue hoppar över resten av aktuellt varv och går till nästa. Används vanligen tillsammans med if.
- En nästad (nested) loop är en loop inuti en annan loop. Den inre loopen körs helt för varje varv i den yttre. Användbart för tabeller, rutnät och kombinationer.
- I Python avgör indenteringen vilka rader som tillhör samma block (efter if, for, while, def, class etc.). Felaktig indentering ger IndentationError. Standard är 4 mellanslag, aldrig blanda med tabb.
- Sekvens, selektion och iteration är de tre grundläggande kontrollstrukturerna: sekvens (rad efter rad), selektion (if-val), iteration (loop). Alla program byggs av dessa tre.
- En funktion är ett namngivet kodblock som kan anropas från andra delar av programmet. Den tar emot indata (parametrar), utför en uppgift och kan returnera ett värde. I Python: def namn(parametrar):.
- Parametrar är variablerna i funktionsdefinitionen (def hej(namn):). Argument är de faktiska värden som skickas in vid anrop (hej("Anna")). I dagligt tal används orden ofta synonymt.
- return-satsen avslutar funktionen och skickar tillbaka ett värde till den som anropade den. Utan return returneras None implicit. Kod efter return inom samma block exekveras aldrig.
- Standardvärden på parametrar anges med likhetstecken i definitionen: def hälsa(namn, hälsning="Hej"):. Om argumentet inte ges vid anropet används standardvärdet. Användbart för flexibla funktioner.
- Namngivna argument (keyword arguments) skickas in med namn: skicka(till="a@b.se", ämne="Hej"). Ordningen spelar ingen roll och det blir tydligare vid funktioner med många parametrar.