Multimedia Technology 2Lessenreeks door Tom Luyten
voor Communicatie- en Multimedia Design Maastricht
Werkcollege 6
Eigen functies métparameters
Gebaseerd op het boek “Learning Processing” door Daniel Schiffman
En de PowerPoint van Donald W. Smith
LESSON 3: Organisation
Functies (p. 101 120)
• Modulariteit
• Een functie declareren en definiëren
• Een functie aanroepen
• Parameters doorgeven
• Een waarde teruggeven
• Hergebruiken
Les 5 : Functies
LESSON 3: Organisation
Functies (p. 101 120)
• Modulariteit
• Een functie declareren en definiëren
• Een functie aanroepen
• Parameters doorgeven
• Een waarde teruggeven
• Hergebruiken
Les 5 : Functies
Nu, functies mét arguments:
Arguments zijn waarden die in de functie worden “gevoed”
We kennen arguments al vanuit bv. de ellipse() functie :
ellipse(100,100,50,50);
Tekent een cirkel op x 100, y 100, van 50 op 50 hoog.
Als we deze waarden aanpassen, zal de cirkel er anders uitzien.
De functie blijft hetzelfde (ellipse()).
Deze functie werkt dus met variabelen, die wij bij het aanroepen van de functie vullen.
Eigen functies
de functie drawBlackCircle() werkt fijn,
maar als we nu een cirkels willen tekenen op verschillendeplaatsen zullen we een variabele moeten introduceren die we kunnen aanpassen. Anders moeten we voor elke cirkel een nieuwe functie schrijven (niet efficiënt)
We willen dus een functie
drawBlackCircle(10,50,100,100);
Waar dan de opgegeven waarden voor x,y,breedte,hoogte van onze zwarte cirkel staan.
Eigen functies
Een functie zonder arguments
void drawBlackCircle(){
fill(0);
ellipse(50,50,20,20);
}
Herschrijven mét arguments
Eigen functies
Void draw(){
drawBlackCircle(16); //tekent een cirkel met diameter van 16
}
Hoe ziet de bijhorende functie eruit?
void drawBlackCircle(int diam){
fill(0);
ellipse(50,50,diam,diam);
}
Eigen functies
Wat gebeurt er precies ?
2. Er wordt een
lokale variable
diam aangemaakt
1. drawBlackCircle
wordt aangeroepen in
de draw
3. De waarde 16
wordt naar de
lokale variabele
diam gekopieerd
4. De ellipse wordt
getekend op de
waarde die uit de
variabele diam
wordt gelezen (16)
5. Lokale variabele
diam wordt
verwijderd
Void draw(){
drawBlackCircle(16); //tekent een cirkel met diameter van 16
}
Hoe ziet de bijhorende functie eruit?
void drawBlackCircle(int diam){
fill(0);
ellipse(50,50,diam,diam);
}
Eigen functies
Eigen functies
Breidt het vorige voorbeeld uit naar meerdere variabelen: x,y en grootte
Zodat we met één functie drawBlackCircle(50,100,10);
Cirkels kunnen tekenen op een verschillende plaats, met een verschillende grootte.
Eigen functies
20 min.
Volgorde van uitvoeren
Een kopie doorgeven (?)
int num = 16;
void draw(){
drawBlackCircle(num); //tekent een cirkel met diameter van 16
}
Hoe ziet de bijhorende functie eruit?
void drawBlackCircle(int diam){
fill(0);
ellipse(50,50,diam,diam);
}
Eigen functies
Wat gebeurt er precies ?
2. Er wordt een
lokale variable
diam aangemaakt
1. drawBlackCircle
wordt aangeroepen in
de draw
3. De waarde 16 (die we uit num
halen) wordt naar de lokale
variabele diam gekopieerd
4. De ellipse wordt
getekend op de
waarde die uit de
variabele diam
wordt gelezen (16)
5. Lokale variabele
diam wordt
verwijderd
int num = 16;
void draw(){
println(num)
tel3Op(num); //telt 3 bij een opgegeven getal
println(num);
}
void telOp(int waarde){
int som = waarde + 3;
println(som);
}
Eigen functies
2. Er wordt een
lokale variable
waarde
aangemaakt
1. tel3Op wordt
aangeroepen in de
draw
3. De waarde 16 (die we uit num
halen) wordt naar de lokale
variabele diam gekopieerd
4. De waarde + 3 wordt
opgeslaan in de lokale
variabele som6. Lokale variabele
diam wordt
verwijderd5. We printen de waarde van
som ter controle.
7. Is dewaarde in num
veranderd? Neen, want we
hebben hier nergens iets
naar opgeslaan.
Als je een waarde doorgeeft naar een functie wordt hiervan een kopie gemaakt! De originele variabele (numin dit geval) blijft intact!
num is een GLOBALE variabele
newnum een LOKALE variabele is
10 wordt gekopieerd naar newnum,
hier worden bewerkingen gedaan
en er komt een nieuwe waarde uit.
Hoe kan je de uitkomst toch opslaan in je originele variabele?
Een kopie?
Return type
Vb. The random() functie. Als je deze gebruikt retourneert die een random waarde en slaat deze op in een variabele.
int tom = random(100);
Zélf een functie met een return type schrijven:
int sum(int a, int b, int c){
int total = a + b + c;
return total;
}
Return type
Let op :
-void is int geworden (void betekent dus niets retourneren)
- de return is ALTIJD nodig
int sum(int a, int b, int c){
int total = a + b + c;
return total;
}
In draw call je dan:
int tom = sum(20,40,20);
println(tom);
Geeft dan 80 terug.
Return type
Return type
Oefening 7.8.
Schrijf een functie waar de temperatuur in Fahrenheit wordt omgezet naar Celcius.
C = (F – 32)*(0.55)
Return type
1. Haal de beweging en rand-test uit je monster
Door de relevante functies in commentaar te plaatsen.
2. Teken, aan de hand van een for loop en de functie “teken” van je monster, een rij monsters naast elkaar.
3. Optie = kan je de rij langer/korter maken naar gelang de grootte van je sketch ?
Opdracht
Hint: oefening 7-9 p.118 + learningprocessing.com