Benadering programmeertalen
Twee manieren van programmeren
- Declaratief: voer kennis in over het domein en laat de computer met een algemene
oplossingsstrategie de taak uitvoeren
- Imperatief of Procedureel: vertel de computer stap voor stap wat het programma moet
doen
Declaratief programmeren is verdeeld in logisch programmeren en functioneel programmeren
Functioneel:
- Functioneel programmeren beschouwt een programma als een verzameling wiskundige
functies die gegeven een bepaalde input altijd dezelfde output geven
- Geen side effects zoals nieuwe waardes voor variabelen
Logisch programmeren
- Logisch programmeren beschouwt een programma als een verzameling feiten en regels
- Feit: het regent. Regel: als het regent word je nat. Conclusie: je wordt nat
- Je kunt het programma een vraag stellen (regent het? of: word je nat? ) en de computer
berekent het antwoord automatisch, gegeven de feiten en regels
Imperatief programmeren verteld de computer stap voor stap wat het programma moet doen
Python is imperatief
Variabelen
- Een van de belangrijkste programmeerconcepten: variabelen
- Een naam voor bepaalde data in de code
- Waarde kan veranderen
- Computationeel denken: code is een abstractie van een probleem
- Variabelen zijn cruciaal voor abstractie
Abstractie
- Algoritme: stappen om een taak uit te voeren
- Vaak: dezelfde taak in verschillende situaties
- Abstracte taak
- Gebruik variabele N in het algoritme
Variabelen in Python
- Naam = waarde
- A=3
- Beter: naam met duidelijke betekenis
- Aantal = 3
- Geen declaratie, geen datatype
- Technisch: verwijzing naar een of meer geheugenadressen
a = 3 betekent reserveer geheugenadres 948004445684 en 948004445685 voor variabele a
en schrijf de waarde 3 (00000000 00000011) naar die adressen
,Regels voor variabelenamen
- Niet elke naam voor een variabele is toegestaan
- Variabelen bestaan uit letters, cijfers en _
- Het eerste karakter moet een letter of underscore zijn (geen cijfer!)
- Variabelen zijn hoofdlettergevoelig
- Keywords uit de taal zijn niet toegestaan als variabelenaam
o If, or, and, import, etc.
o Wel toegestaan maar niet handig: print, input, exit
- Accenten, speciale tekens, ander alfabet mag ook
Volgorde
- Imperatief/procedureel programmeren: volgorde essentieel!
- Functies moeten worden uitgevoerd voordat het resultaat gebruikt kan worden
(bij declaratief programmeren mag dit wel)
Datatypes
- Variabelen in Python hebben een type
- Afhankelijk van de waarde
Designkeuzes Python
- Doelstelling: eenvoudig te gebruiken taal
- Datatypes zoveel mogelijk impliciet
- Een variabele kan van type veranderen
- In veel gevallen hoeft de gebruiker zich niet bezig te houden met types
Gebruik van types
- Soms types wel belangrijk voor de gebruiker
o Delen kan bij int en float, niet bij string en bool
o Lengte berekenen: alleen string
- Andere operaties zijn verschillend gedefinieerd
o Optellen voor ints: wiskundig optellen
- Maar: gebruiker doet dit meestal vanzelf goed
- Code die de lengte van een bool opvraagt komt weinig voor
Technische verschillen
- Python bepaalt het datatype op basis van de inhoud
- Elk type wordt anders opgeslagen in het geheugen
o Integer: 32 bits (4 bytes)
o Bool: 1 bit
- Geheugenoperaties en datatypes allemaal automatisch
- Anders dan eerdere talen (C, C++, Java)
- Automatisch geheugenmanagement vaak langzamer
,Type-conversie
- Soms handmatige conversie nodig
o Bijvoorbeeld combineren van strings en ints in een variabele
- Conversie-functies: int(), str(), float()
- Type opvragen met type()
- Let op dat conversie niet altijd mogelijk is
Rekenoperatoren
- Standaard operatoren
(+ - / *)
Gebruik rekenoperatoren
- In situaties waar je een getal kan gebruiken
- Variabele-toekenning
- Print-statements
- Datatypeconversie
- Etc.
- Kortere notatie om rekenen te combineren met variabele-toekenning: +=, -=
Haakjes
- Gebruik haakjes waar nodig
- Als iets tegen prioriteitsregels ingaan
- Binnen de groepen: links naar rechts
Getal representatie
- Integer: geheel getal, positief of negatief
- Geheugen: 1 bit positief/negatief, overige bits voor het getal
- Kommagetallen: twee mogelijkheden
- Fixed point notation: vast aantal bits voor integer-deel en decimaal deel
- Eigenlijk twee losse getallen
- Nadeel: geheugen voor integer-deel is beperkt terwijl decimaal deel vaak niet gebruikt
wordt
- 16 bits getal, 8 bits per deel, maximum 28 − 1 = 255
- 200.1 past hierin maar bv. 300.1 niet
- Het totaal aantal bits voor een getal kan niet tussendoor worden aangepast
, Floating point
- Fixed point maakt niet efficiënt gebruik van het geheugen
- Floating point: verschuivende grens tussen integer-deel en decimaal deel
- Meer bits nodig voor integer-deel: punt schuift op
- Minder precisie voor decimaal deel
- Voorbeeld: 101.234 (8 bits per deel) vs. 1012.23 (10 bits voor integer, 6 bits voor decimaal)
- In Python:
7/3.57
1.9607843137254903
782/3.57
219.04761904761907
42949672960/1.33
32292987187.969925
429496729600/1.33
322929871879.6992
Integers en floats
- Getal zonder punt: int
- Getal met punt: float
- Ints en floats samen worden altijd float
- Delen wordt altijd float, ook bij twee ints
- Exponent, modulus wordt float als een van beide getallen float is, anders int
- Integer delen wordt float als een van beide getallen float is
Precisie van floats
- Intern: decimalen opgeslagen als breuken in veelvouden van 2
- Handig met bits
- Iedere programmeertaal heeft dit probleem
- Speciale libraries voor infinite precision floating point
Twee manieren van programmeren
- Declaratief: voer kennis in over het domein en laat de computer met een algemene
oplossingsstrategie de taak uitvoeren
- Imperatief of Procedureel: vertel de computer stap voor stap wat het programma moet
doen
Declaratief programmeren is verdeeld in logisch programmeren en functioneel programmeren
Functioneel:
- Functioneel programmeren beschouwt een programma als een verzameling wiskundige
functies die gegeven een bepaalde input altijd dezelfde output geven
- Geen side effects zoals nieuwe waardes voor variabelen
Logisch programmeren
- Logisch programmeren beschouwt een programma als een verzameling feiten en regels
- Feit: het regent. Regel: als het regent word je nat. Conclusie: je wordt nat
- Je kunt het programma een vraag stellen (regent het? of: word je nat? ) en de computer
berekent het antwoord automatisch, gegeven de feiten en regels
Imperatief programmeren verteld de computer stap voor stap wat het programma moet doen
Python is imperatief
Variabelen
- Een van de belangrijkste programmeerconcepten: variabelen
- Een naam voor bepaalde data in de code
- Waarde kan veranderen
- Computationeel denken: code is een abstractie van een probleem
- Variabelen zijn cruciaal voor abstractie
Abstractie
- Algoritme: stappen om een taak uit te voeren
- Vaak: dezelfde taak in verschillende situaties
- Abstracte taak
- Gebruik variabele N in het algoritme
Variabelen in Python
- Naam = waarde
- A=3
- Beter: naam met duidelijke betekenis
- Aantal = 3
- Geen declaratie, geen datatype
- Technisch: verwijzing naar een of meer geheugenadressen
a = 3 betekent reserveer geheugenadres 948004445684 en 948004445685 voor variabele a
en schrijf de waarde 3 (00000000 00000011) naar die adressen
,Regels voor variabelenamen
- Niet elke naam voor een variabele is toegestaan
- Variabelen bestaan uit letters, cijfers en _
- Het eerste karakter moet een letter of underscore zijn (geen cijfer!)
- Variabelen zijn hoofdlettergevoelig
- Keywords uit de taal zijn niet toegestaan als variabelenaam
o If, or, and, import, etc.
o Wel toegestaan maar niet handig: print, input, exit
- Accenten, speciale tekens, ander alfabet mag ook
Volgorde
- Imperatief/procedureel programmeren: volgorde essentieel!
- Functies moeten worden uitgevoerd voordat het resultaat gebruikt kan worden
(bij declaratief programmeren mag dit wel)
Datatypes
- Variabelen in Python hebben een type
- Afhankelijk van de waarde
Designkeuzes Python
- Doelstelling: eenvoudig te gebruiken taal
- Datatypes zoveel mogelijk impliciet
- Een variabele kan van type veranderen
- In veel gevallen hoeft de gebruiker zich niet bezig te houden met types
Gebruik van types
- Soms types wel belangrijk voor de gebruiker
o Delen kan bij int en float, niet bij string en bool
o Lengte berekenen: alleen string
- Andere operaties zijn verschillend gedefinieerd
o Optellen voor ints: wiskundig optellen
- Maar: gebruiker doet dit meestal vanzelf goed
- Code die de lengte van een bool opvraagt komt weinig voor
Technische verschillen
- Python bepaalt het datatype op basis van de inhoud
- Elk type wordt anders opgeslagen in het geheugen
o Integer: 32 bits (4 bytes)
o Bool: 1 bit
- Geheugenoperaties en datatypes allemaal automatisch
- Anders dan eerdere talen (C, C++, Java)
- Automatisch geheugenmanagement vaak langzamer
,Type-conversie
- Soms handmatige conversie nodig
o Bijvoorbeeld combineren van strings en ints in een variabele
- Conversie-functies: int(), str(), float()
- Type opvragen met type()
- Let op dat conversie niet altijd mogelijk is
Rekenoperatoren
- Standaard operatoren
(+ - / *)
Gebruik rekenoperatoren
- In situaties waar je een getal kan gebruiken
- Variabele-toekenning
- Print-statements
- Datatypeconversie
- Etc.
- Kortere notatie om rekenen te combineren met variabele-toekenning: +=, -=
Haakjes
- Gebruik haakjes waar nodig
- Als iets tegen prioriteitsregels ingaan
- Binnen de groepen: links naar rechts
Getal representatie
- Integer: geheel getal, positief of negatief
- Geheugen: 1 bit positief/negatief, overige bits voor het getal
- Kommagetallen: twee mogelijkheden
- Fixed point notation: vast aantal bits voor integer-deel en decimaal deel
- Eigenlijk twee losse getallen
- Nadeel: geheugen voor integer-deel is beperkt terwijl decimaal deel vaak niet gebruikt
wordt
- 16 bits getal, 8 bits per deel, maximum 28 − 1 = 255
- 200.1 past hierin maar bv. 300.1 niet
- Het totaal aantal bits voor een getal kan niet tussendoor worden aangepast
, Floating point
- Fixed point maakt niet efficiënt gebruik van het geheugen
- Floating point: verschuivende grens tussen integer-deel en decimaal deel
- Meer bits nodig voor integer-deel: punt schuift op
- Minder precisie voor decimaal deel
- Voorbeeld: 101.234 (8 bits per deel) vs. 1012.23 (10 bits voor integer, 6 bits voor decimaal)
- In Python:
7/3.57
1.9607843137254903
782/3.57
219.04761904761907
42949672960/1.33
32292987187.969925
429496729600/1.33
322929871879.6992
Integers en floats
- Getal zonder punt: int
- Getal met punt: float
- Ints en floats samen worden altijd float
- Delen wordt altijd float, ook bij twee ints
- Exponent, modulus wordt float als een van beide getallen float is, anders int
- Integer delen wordt float als een van beide getallen float is
Precisie van floats
- Intern: decimalen opgeslagen als breuken in veelvouden van 2
- Handig met bits
- Iedere programmeertaal heeft dit probleem
- Speciale libraries voor infinite precision floating point