Code hergebruik
Stel ik heb de volgende pseudo code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
function intersectsWithObjectOfType(type)
{
for (var i = 0; i < this.objects.length; i++)
{
if (this.objects[i] instanceof type)
{
// Return true wanneer er een intersection is
}
}
return false;
}
{
for (var i = 0; i < this.objects.length; i++)
{
if (this.objects[i] instanceof type)
{
// Return true wanneer er een intersection is
}
}
return false;
}
Naast bovenstaande code wil ik bijvoorbeeld ook een functie die kijkt of er een intersection is zonder te controleren wat het type van dit object is. Nu kan dit op twee verschillende manieren:
Dezelfde code, maar zonder if statement
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
function intersectsWithObject()
{
for (var i = 0; i < this.objects.length; i++)
{
// Return true wanneer er een intersection is
}
return false;
}
{
for (var i = 0; i < this.objects.length; i++)
{
// Return true wanneer er een intersection is
}
return false;
}
Of je roept de bestaande functie aan en geeft de laagst mogelijke inheritance mee als type:
Wat is hier de meest gebruikelijke manier?
Alvast bedankt!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function intersectsWithObject(objects) {
for (object in objects) {
if (object intersects) {
return true;
}
}
return false;
}
function filterByType(type, objects) {
objectsOfType = [];
for (object in objects) {
if (objects is type) {
push(objectsOfType, object);
}
}
return objectsOfType;
}
// gebruik
intersectsWithObject(objectList);
intersectsWithObject(filterByType(SomeType, objectList));
intersectsWithObject(anotherFilter(..., objectList));
for (object in objects) {
if (object intersects) {
return true;
}
}
return false;
}
function filterByType(type, objects) {
objectsOfType = [];
for (object in objects) {
if (objects is type) {
push(objectsOfType, object);
}
}
return objectsOfType;
}
// gebruik
intersectsWithObject(objectList);
intersectsWithObject(filterByType(SomeType, objectList));
intersectsWithObject(anotherFilter(..., objectList));
Gewijzigd op 27/11/2016 12:32:39 door Wouter J
Daarnaast heb ik nog een nieuwe vraag die misschien niet helemaal met het topic te maken heeft, maar wel met de "intersection" e.d.
Na sommige acties, zoals wanneer een intersection heeft plaatsgevonden, wil ik een soort "callback" aanroepen.
Wanneer er dus een intersection tussen twee objecten plaatsvindt moet het debetreffende object hierover worden geïnformeerd. Zelf dacht ik aan de volgende aanpak:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
for (object in objects)
{
if (object intersects)
{
this.onIntersectionWithObject(object);
}
}
{
if (object intersects)
{
this.onIntersectionWithObject(object);
}
}
Is dit een juiste aanpak of bestaan hier bepaalde methoden voor die beter werken?
Naast deze "callback" heb ik bijvoorbeeld ook de volgende situatie:
- Het "Game" object heeft een "GameLoop" object met een verwijzing naar "Game".
- Wanneer het "GameLoop" object "tickt" wordt "onGameLoopTick" aangeroepen in "Game".
- "onGameLoopTick" roept weer "update" en "render" aan.
Dit werkt, maar dit voelt nogal vies. Is het in dit geval niet beter om rechtstreeks vanuit "GameLoop" de "update" en "render" method aan te roepen? Of kan ik misschien beter een callback meegeven via de constructor van de "GameLoop" (zoals in onderstaande pseudo code), of is een soort "Event Listener" systeem hiervoor weer handiger?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
class Game
{
constructor()
{
this._gameLoop = new GameLoop(this.onGameLoopTick);
}
}
{
constructor()
{
this._gameLoop = new GameLoop(this.onGameLoopTick);
}
}
Gewijzigd op 27/11/2016 21:03:13 door Lord Gaga