taLa.
Legacy Member
Cycloon zei:Nope, het ligt niet aan de foreach maar aan het feit dat 0..length($string) gaat geëxpandeerd worden naar een lijst/array en dat niet telkens opnieuw gaat gedaan worden. Mocht dit wel zo zijn dan zou het normaal allemaal lopen zoals "verwacht" werd.
Bon, mijn punt was gewoon dat je in sommige situaties vreemde zaken kan tegenkomen en dat het taal afhankelijk is en niet compiler afhankelijk (zoals hier beweerd werd).
Ehm, neen en neen.
Cycloon zei:Nope, het ligt niet aan de foreach maar aan het feit dat 0..length($string) gaat geëxpandeerd worden naar een lijst/array en dat niet telkens opnieuw gaat gedaan worden.
... hetgeen een gevolg is van de definitie van een foreach :ironic:
Cycloon zei:Bon, mijn punt was gewoon dat je in sommige situaties vreemde zaken kan tegenkomen en dat het taal afhankelijk is en niet compiler afhankelijk (zoals hier beweerd werd).
Volledig naast de kwestie. Er werd hier nergens beweerd dat het de compiler is die ervoor verantwoordelijk is dat die 0..length($string) niet opnieuw werd geëvalueerd, want dat is eigen aan een foreach-loop. Er werd wel beweerd dat de compiler slim genoeg is om in te zien dat een $i++ of ++$i zonder assignment zoals in de doorsnee for-loop (dus niet in een foreach) allebei naar dezelfde meest optimale vorm kunnen herleid worden. Maw. de compiler zal inzien dat het nutteloos is om die extra kopie van $i aan te maken om te returnen aangezien er niets wordt gedaan met de returnwaarde.