tijdelijke variabelen

Ik zou graag willen weten wat het verschil is wanneer ik een tijdelijke variabele als deze schrijf (dit zijn slechts voorbeelden):

versie 1

for each tempEnemy in enemyManager.enemies {
var tempX:int = tempEnemy.x;
}

of dit:

versie 2

for each tempEnemy in enemyManager.enemies {
tempEnemy.oldX = tempEnemy.x;
}

Wat is er mis en toch? Momenteel schrijf ik het als versie 2 en ik weet niet zeker of ik dit moet veranderen in versie 1. Kan iemand me hier mee helpen alsjeblieft? Ik weet dat de meeste ontwikkelaars schrijven als versie 1, maar ik ben een beetje in de war omdat ik helemaal niet op de hoogte ben van versie 1. Als ik versie 1 gebruik, betekent dit dat mijn waarde expliciet wordt opgeslagen in een tijdelijke variabele die in elke cyclus wordt gewist?

0

2 antwoord

Ook... Het toevoegen van de: variableType (int, String, Number etc) helpt bij codehints en debugging.

2
toegevoegd

In versie 1 de verklaring:

var tempX:int

definieert een variabele die slechts zo lang duurt als die iteratie van de for (of voor-elke) lus waarin deze zich bevindt. Elke iteratie tempX is gedefinieerd, gegeven een waarde van een vijand object, en aan het eind blijft het voor het verzamelen van garbage.

In versie 2 verwijs je naar twee variabelen die zijn gekoppeld aan een vijandig -object waarnaar wordt verwezen door de tijdelijke variabele met de naam tempEnemy .

In beide versies is de verwijzing naar het Vijand -object tempEnemy opnieuw toegewezen aan het Enemy -object van de volgende iteratie.

Elke methode heeft zijn voordelen. Vanuit geheugenoogpunt is versie 2 waarschijnlijk beter, omdat het een bestaande variabele steeds opnieuw verandert in plaats van een nieuwe variabele te maken die aan het einde van elke iteratie wordt weggegooid. Aan de andere kant vereist versie 1 niet dat u oldX hebt gedefinieerd in zijn klassevariabelen, die vaak zonder dit soort variabelen duizelig kunnen worden.

Best practices met code zijn gebaseerd op (a) werken met andere programmeurs, die de code moeten kunnen lezen en begrijpen, en (b) een project moeten verlaten en er later op terug moeten komen, waar je moet kunnen werken om uw eigen code te lezen en te begrijpen. Voor korte projecten die je niet van plan bent te delen, is versie 2 in orde (en waarschijnlijk meer geheugenefficiënt), maar elk groot project zou iets meer moeten gebruiken als versie 1.

Een andere overweging is, ga je die variabele ergens anders gebruiken dan de functie waar het is gedefinieerd (ingesteld)? Als dat niet het geval is, hoeft u het niet in het object op te slaan, wat opnieuw verwijst naar versie 1.

1
toegevoegd
Dank u zeer! Dat antwoord is heel gedetailleerd en maakt het een stuk eenvoudiger. :) Nu naar je vraag: Ja, die tijdelijke variabele met de naam tempEnemy.oldX is ook in andere situaties nodig (maar niet altijd). Het is veel code en ik ben niet van plan om delen ervan aan andere ontwikkelaars te geven omdat ik momenteel op mijn eigen werk.
toegevoegd de auteur drpelz, de bron