Funktioner - sammanfattning

1. Egna funktioner

  • Det går att skriva egna funktioner.
  • En funktion är som ett mindre program i ett program.
  • Ge funktioner beskrivande namn.
  • Varje funktion ska endast ha en uppgift.
  • Koden i en funktion körs bara när den anropas.
  • Definiera funktionerna överst i koden.

2. Parametrar & Argument

  • En funktion kan ta emot inga till många värden, s.k. parametrar.
  • När en funktion anropas kallas värdena som skickas till funktionen för argument.

3. Funktioner

  • används för att dela upp ett program i mindre delar.
  • gör att större uppgifter kan delas upp i mindre delar som löses var för sig (divide & conquer).
  • gör att programmerare kan koncentrera sig på en liten del i taget, vilket betyder mindre risk att göra fel.
  • gör stora program lättare att överblicka och förstå (läsbarhet)
  • förenklar underhåll av koden, dvs felsökning och ändringar.
  • förenklar för flera programmerare att arbeta med olika delar av koden samtidigt.
  • ska utför en uppgift och kan ses som ett byggblock.
  • gör att samma kod inte behöver upprepas flera gånger (DRY).
  • kan återanvändas i andra projekt.

4. Lokala & Globala variabler

  • Lokala variabler kan inte användas utanför en funktion.
  • Variabler deklarerade utanför en funktion kallas globala variabler.
  • Det är inte bra att använda globala variabler i en funktion.

5. Scope

  • En variabels scope är den del av programmet inom vilken den är synlig.

6. Returvärde

  • Funktioner är som mest användbara när de skickar tillbaka värden till programmet, s.k. returvärden.
  • Nyckelordet return används för att ska skicka tillbaka ett värde, dvs returnera ett värde.
  • När en funktion med ett returvärde anropas måste det returnerade värdet tilldelas en variabel.
  • Return-satsen används vanligtvis i slutet av en funktion för att returnera resultatet.
  • En funktion slutar exekvera när en return-sats körs.

7. Black Box

  • Man behöver inte veta mer detaljer om en funktion än vad för parametrar (indata) och returvärde (utdata) den har.
  • En funktion kan ha 0 till många parametrar som indata.
  • En funktion kan också ha 0 till flera returvärden, även om vi bara sett exempel på 0 eller 1 returvärde.

8. Design av funktioner

  • En funktion ska ha en uppgift.
  • Returnera värden, använd inte print i funktioner.
  • Använd inte globala variabler i funktioner, skicka värden som parametrar.
  • Använd inte input i funktioner, skicka värden som parametrar.
  • Alla funktioner ska vara oberoende.

9. Värdeparameter & Referensparameter

  • En värdeparameter får ett eget minnesutrymme.
  • En referensparameter får inte ett eget minnesutrymme, utan har samma minnesutrymme som argumentets variabel.
  • Sammansatta datatyper är referensparametrar.
  • Anledningen till att det finns referensparametrar är prestanda.

9.1 Film om parametrar (16:27)

Starta film om parametrar

10. Funktioner och Metoder

  • Funktioner är frikopplade från objekt.
  • Metoder är kopplade till objekt med punkt-notation.

11. Modul

  • Moduler är ett slags kodbibliotek med funktioner.
  • Det går att skapa egna moduler för återanvända kod.
  • import-satsen används för att få tillgång till funktioner i moduler.

Funktion: En del av koden, som utför en uppgift och kan anropas.

Anrop: Att kalla på en funktion så att koden i den utförs.

Parameter: Indata som en funktion ska ha. En variabel som tar emot ett värde från ett funktionsanrop.

Argument: Ett värde som skickas med till en funktion.

Divide & Conquer: Dela upp ett program i mindre delar, som löses var för sig.

DRY: Don't Reapeat Yourself. Att samma kod i ska finnas på flera ställen.

Läsbarhet: Koden är enkel att läsa och förstå.

Återanvändning: Att samma funktioner används i flera olika program.

Lokal variabel: Variabel som deklareras i en funktion och går bara att komma åt i den funktionen.

Global variabel: Variabel som deklareras utanför en funktion och kan kommas åt från hela programmet.

Scope: Del av programmet inom vilken en variabel är synlig (kan användas).

Räckvidd: Svenska ordet för scope.

Returvärde: Ett värde som skickas som resultat från en funktion.

Inkapsling: Varje del, t.ex. funktioner ska vara oberoende.

Värdeparameter: En parameter som får ett eget minnesutrymme.

Referensparameter: En parameter som inte får ett eget minnesutrymme.

Modul: Kodbibliotek, en fil med funktioner.



Klunsa
antal_för_vinst = 3 spelar_vinster = 0 dator_vinster = 0 # Spela tills någon vinner while spelar_vinster < antal_för_vinst and dator_vinster < antal_för_vinst: # Slumpa fram datorns val datorns_val = dator_kluns() # Spelarens val nr = int(input('1: Sten, 2: Sax, 3: Påse. Välj (1-3): ')) spelarens_val = nr_till_kluns(nr) # Omvandla nr till spelarens val # Kontrollera vem vann eller om oavgjort if spelaren_vinner(datorns_val, spelarens_val) == True: print(f'Din {spelarens_val} slår {datorns_val}.') spelar_vinster += 1 elif datorn_vinner(datorns_val, spelarens_val) == True: print(f'Din {spelarens_val} förlorar mot {datorns_val}.') dator_vinster += 1 else: print(f'Båda valde {spelarens_val}.') # Skriv ut ställningen efter varje kluns print(f'Du - Datorn {spelar_vinster} - {dator_vinster}\n') # Vi har en segrare if spelar_vinster == antal_för_vinst: print(f'Grattis, du vann över datorn!') else: print(f'Attans, datorn vann över dig!')

Skriv följande funktioner, så att huvudprogrammet fungerar.

En funktion dator_kluns utan parametrar som returnerar en slumpad sträng, antingen 'Sten', 'Sax' eller 'Påse'

En funktion nr_till_kluns som tar en heltalsparameter nr, som kan vara 1, 2 eller 3, och returnernar en sträng, om nr är 1 ska 'Sten' returneras, om nr är 2 ska 'Sax' returneras och om nr är 3 ska 'Påse' returneras.

En funktion spelaren_vinner som tar två parametrar med datattypen sträng, där de motsvarar datorns val och spelarens val (Sten, Sax eller Påse). Funktionen ska returnera True om spelaren vinner enligt de givna valen, annars returneras False.

En funktion datorn_vinner som tar två parametrar med datattypen sträng, där de motsvarar datorns val och spelarens val (Sten, Sax eller Påse). Funktionen ska returnera True om spelaren vinner enligt de givna valen, annars returneras False.

Frivillig utmaning

Flytta funktionerna till en modul och använd import-satsen för att kunna använda dem i huvudprogrammet.

Frivillig extra utmaning

Fråga om användaren vill spela flera gånger efter ett spel är avslutat.