Börjar bearbetning - temperatur bildeffekter (3 / 7 steg)
Steg 3: Object Oriented Programming Primer - klasser och objekt
Funktioner i ett nötskal:
En funktion är i huvudsak en bit kod som du kan återanvända mer än en gång. Bryta ner en komplex skiss till mindre funktioner garantera läsbarhet (koden är lättare att läsa, eftersom alla komplexa koden får görat sammandrag, lättare att felsöka i nuläget), modularitet (blir modulära stycken, som legos kod), och förhindrar att få torr (torr står för inte upprepa dig själv, upprepande sätt manuellt kopiera/klistra in koden flera gånger).
Här är den generiska strukturen av en funktion:
data_type_of_returned_value"'void' om det returnerar inget functionName(parameters) {"
funktionsdefinitionen
}
Låt oss genomföra en funktion som visar vår krets, och en annan funktion för dess rörelse (det är, jiggling):
float x = 200.
float y = 200.
void setup() {
size(400,400);
Smooth();
}
void draw() {
Background(255);
Display(); anropa en funktion
Move(); att andra funktionen
}
funktioner
void display() {
noStroke();
Fill(140);
Ellipse(x,y,80,80);
}
void move() {
x = x + random(-5,5);
y = y + random(-5,5);
}
Även om koden gör exakt samma sak som innan, ser hur organiserade draw() slingan är nu! Notera hur jag "kallas" eller "åberopas" uppgifter från inom draw() slingan.
Funktioner kan ha "parametrar" också. Parametrar är "plats-innehavare" för värden som du kan "passera" på en funktion. Får värdena, kan funktionen beräkna dem i enlighet med hur du har definierat det. Här är exempelvis en funktion som tar i två parametrar (x och y), och använder de passerade argument för att återge här konstiga formen:
void drawShape (float, float XY) {
noStroke();
Fill(140);
Ellipse(x,y,80,80);
Ellipse(x-151,y+2,44,44);
Fill(68,234,66);
rect(x-131,y-5,92,18);
}
Se bilden ovan (första bilden).
I ovanstående funktion, vi använde x och y som referens, och ställa in parametrar för alla andra former "släkting" till x och y. Denna teknik kallas "relativ placering". Till exempel om referens x är 400 och x-värdet av vissa form är 89, sedan placera formen i förhållande till referensränta x är "x-311" (400-89 = 311).
Funktioner kan också "gå tillbaka" värden, men det är för en annan dag!
Ett objekt och klassen berättelse:
Som vi har sett ett tag sedan, medföra funktioner en viss grad av organisation i vår kod. Objekt i vår kod som utnyttjar är dock en mycket effektiv organisation strategi.
Ett objekt i huvudsak binder samman data (variabler) och functionality(functions) för en given enhet i ett snyggt paket. För att skapa objekt, behöver vi en blå-print för det. Detta kallas klassen.
Istället för att babbla om några mer komplicerade begrepp, låt oss skapa en klass för att generera jiggly cirkel objekt:
klassen Circle {
klassvariabler (även kallad förekomstvariabler)
float x;
float y;
flyta d;
färg c;
konstruktorn objekt
Cirkel (float XY, float, flyta d, färg c) {
This.x = x;
This.y = y;
This.d = d;
This.c = c;
}
metoderna som
void display() {
noStroke();
Fill(c);
Ellipse(this.x,this.y,this.d,this.d);
}
void jiggle() {
This.x = this.x + random(-2,2);
This.y = this.y + random(-2,2);
}
}
Saker att notera:
- Det är denna bisarra sak i den kod som kallas "constructor". Konstruktören är den funktion som faktiskt skapar ett objekt, tillsammans med nyckelordet "nya" (mer om detta i lite). Konstruktören definitionen bör innehålla koden om hur du skapar objekt. Konstruktören namnet bör vara samma som klassnamnet.
- "denna" nyckelordet används för åtkomst variabler den tillhör klassen och bara klassen! Du kan se att jag har använt samma variabel namn för variablerna som klass och parametrarna som konstruktorn. Med hjälp av "detta" kan tillåta jag bearbetning för att skilja mellan två. Därför "this.x = x" anger: lagra värdet skickas till x samtidigt göra objektet till "this.x", klassvariabel.
- Samma funktioner vi sett innan som används i klassen. En funktion som är associerade med en klass som kallas en "metod".
Det är en god praxis att hålla dina klasser i en separat fil, så att din huvudsakliga koden ser snyggt. Du kan göra detta genom att skapa en andra fliken bearbetning miljön. Observera, flikens namn måste vara samma som för klassen. (se bilden ovan, tredje bilden).
Med hjälp av klassen för att göra objekt:
att förklara objekt
Cirkeln c;
Cirkel d;
void setup() {
size(400,400);
Smooth();
initierar objekt
c = nya Circle(200,200,80,color(100));
d = nya Circle(344,355,20,color(62,177,137));
}
void draw() {
Background(255);
med hjälp av objekt
c.display();
c.jiggle();
d.display();
d.jiggle();
}
se resultatet ovan (andra bilden).
Att förklara objekt - samtidigt att förklara objekt, det är lättare att överväga klassen som en nyskapad datatyp. Så, betyder "Cirkeln c" deklarerar en variabel "c" av typen "Cirkel" (jämför med "int c").
Initierar objekt - se hur vi åberopat konstruktören via nyckelordet "nya"? Eftersom cirkeln konstruktören definitionen hade parametrar, måste vi passera argument för att initiera objektet. Dessa argument tilldelas objektets variabler (x, y, c osv.). Detta tillåter oss att använda samma klass för att skapa objekt med olika egenskaper. I exemplet ovan är cirklar c och d olika varandra i storlek och färg.
Dessutom märke att objekt initieras på setup(). Detta är logiskt, eftersom vi har ingen avsikt att initiera objektet samma om och om igen i draw().
Med hjälp av objekt - vi använder dot "." operatören att få tillgång till objektets metoder, som kan ses ovan.