PDA

Volledige versie bekijken : Functies


chonazz
%Europe/Berlin %897 %2005, 22:31
Beste mensen,

Ik ben aan een site bezig, heb alles in flash gemaakt! Hij is nu bijna klaar en ik zou me willen bezig houden met alle code die ik gebruikt heb allemaal samen te vatten in functies.
Dit is netter, maar ook beter, zo hebben ze me verteld.?

Ik kan een heel klein beetje met functies werken, maar nog lang niet goed genoeg.
Dus ik vroeg me af of er tips waren? Dingen waar ik zeker op moet letten?
Is er ergens een goeie tutorial? Of heeft er iemand een project waar ie alles in functies heeft gedaan, en dat ik eens zou mogen bekijken?

Wie kan me hier helpen?

Groeten
jonas

Roenes
%Europe/Berlin %912 %2005, 22:54
Ik zal een kleine uitleg geven :) Ik hou het alleen wel bij AS1 aangezien je aangeeft dat je een beetje weet hoe functies werken.

Functies zijn er idd voor bedoelt om stukken code vaker te laten uitvoeren zonder het meerdere malen te hoeven typen. Zo kun je van alles doen met functies. Je kunt waardes ophogen op een makkelijke manier, stukken code op meerdere mc's laten uitvoeren, enz enz.
In principe heb je 2 soorten functies: functies met parameters en functies zonder parameters. Het verschil tussen deze 2 zal ik ook uitleggen. Over het algemeen is er 1 regel van toepassing: Functies met parameters zijn dynamischer als functies zonder parameters.

Dit is allemaal leuk en aardig maar hoe maak en gebruik je nou een functie? Heel simpel, met het keyword function:

function hallo()
{
trace("Hallo daar!");
}
Dit is een simpele vorm van een functie. Hoe bouw je deze op? Eerst geef je aan dat er een functie komt door het woord function. Daarna komt de naam van de functie. Deze mag je zelf kiezen maar deze mag geen spaties bevatten. Daarna staan er 2 haakjes. Hierin kun je parameters definiëren (legk zo uit). Dan volgt er een accolade {. Alle code die je hierin zet is de code die de functie uitvoert. Na deze code sluit je de functie met een sluit accolade }. Tussen de accolade zet je dus je eigenlijke code. Deze hele functie zet je op een frame in je timeline. Deze functie is dan van overal bereikbaar.

Maar hoe roep je de functie aan? Simpel:
hallo();Dit zet je ook op een frame of in een on(release) van een button of in een onmousemove of, of, of. Je begrijpt het idee. Je kunt een functie overal aanroepen. Je moet daarvoor dit doen:
- de naam van de functie neerzetten
- daarachter 2 haakjes. In deze haakjes kun je waardes voor de parameters opgeven.

Als je hallo(); aanroept zal er in het outputvenster van flash Hallo daar! komen te staan. Hier zorgt de trace voor. Je kunt zo dus ook een functie maken die bijvoorbeeld 5 optelt bij een variabele:

function telVijfOp()
{
mijnVar += 5;
}

var mijnVar = 10;
trace(telVijfOp()); //Trace levert 15 op in het output venster
Ik denk dat je het idee van een functie wel snapt. Maar nu loop je meteen tegen een probleem. Op deze manier gebruik je in de functie de naam van je variabele. Hierdoor is de functie alleen bruikbaar op de variabele genaamd mijnVar. Stel je hebt 10 variabelen waar je voor iedere variabele zo'n functie wilt. Je kunt em dan 10x schrijven maar je kunt ook parameters gebruiken:

function telVijfOp(welkGetal)
{
welkGetal += 5;
}

var mijnVar = 10;
trace(telVijfOp(mijnVar));
trace(mijnVar); //Geeft ook 15, ga maar na
Je zet nu tussen de haakjes een variabele (welkGetal). Deze naam kies je zelf. In dit voorbeeld stelt welkGetal de naam van de variabele voor waar je 5 bij wilt optellen. Stel je hebt nu meerdere vars, hoe zit dat dan? Zo:

function telVijfOp(welkGetal)
{
welkGetal += 5;
}

var mijnVar = 10;
var andereVar = 35;
var iets = 100;
var nogWa = -4;
trace(telVijfOp(mijnVar));
trace(telVijfOp(iets));
Nu tel je bij 2 variabelen iets 5 op. Maar beide traces geven een andere output omdat de variabele die je meegeeft als parameter een andere waarde bevat.

Maar uiteraard kun je een functie ook meerdere parameters meegeven. Een laatste voorbeeld hiervan: (leg ik niet uit omdat ik denk dat je het principe wel doorhebt. Zo niet, laat het weten! :)

function telOp(welkGetal, aantal)
{
welkGetal += aantal;
}

var mijnVar = 10;
var andereVar = 35;
var iets = 100;
var nogWa = -4;
trace(telOp(mijnVar, 17));
trace(telOp(iets, 197));


Hopelijk is het een beetje duidelijk geworden hoe functies werken en wat je ermee kan doen. Nog 1 laatste opmerking: ik gebruikte nu steeds maar 1 regel in de functie. Dit omdat het voor mij minder werk was en het voorbeeld dan simpel en duidelijk blijft. Er zit echter geen limiet aan het aantal regels in een functie. Dus beperk je functies niet tot 1 regel omdat ik dat in dit verhaal deed :)

The_One
%Europe/Berlin %955 %2005, 23:55
Nog een kleine toevoeging:
test1();
test2();

function test1(){
trace("test1 werkt!");
}

test2 = function(){
trace("test2 werkt!");
}
//output:
//test1 werkt!


Als je dit gaat testen, dan zul je zien dat alleen de functie test1 werkt. Dat komt omdat deze anders is aangemaakt dan test2 [bekijk het verschil goed :)]

Overigens werkt functie test2 wel als je de aanroeping onder de aangemaakte functie zet, dus zo:
test2 = function(){
trace("test2 werkt!");
}

test2();
//output:
//test2 werkt!

Ik raad je daarom ook aan om je de 1e manier aan te leren :) [zoals Roenes in al z'n voorbeelden heeft gebruikt]

Suc6 verder:)!

Dauntless
%Europe/Berlin %966 %2005, 00:11
Ja, wat hij zei :p
Idd, en dat komt omdat je bij de 'slechte manier' een variabele declareert en daar een functie aantoewijst. Wanneer de flash compiler de .fla compiled dan maakt hij eerst al de functies en zo aan zodat je die in de loop van je AS kan gebruiken. Variabelen echter worden pas aangemaakt wanneer de FC ze tegenkomt. Daarom dus dat je (goede) functies al kan gebruiken voor ze gedeclareerd zijn, en 'variabele functies' niet.

Ohja, foutje van Roenes:

function telVijfOp()
{
mijnVar += 5;
}

var mijnVar = 10;
trace(telVijfOp()); //Trace levert 15 op in het output venster
In je ouput window zal 'undefined' staan. Dit is omdat je geen return waarde geeft.

Return waarden:
Stel, je hebt een bepaalde berekening (bv 20% korting) die je op verschillende prijzen wilt toepassen. Dan is het handig om een functie berekenKorting() te maken die de korting van het meegegeven bedrag berekend en die dan terug geeft.
Voorbeeld dus:

function berekenKorting(prijs, korting)
{
var korting = prijs/100*korting;
return korting; //hier gebeurt de magie
}
//Gebruik:
var schoenen = 100;
var winkelKorting = 20;
var schoenenKorting = berekenKorting(schoenen, winkelKorting);

Nu wordt de uitkomst van berekenKorting(schoenen, winkelKorting); toegekend aan de variabele 'schoenenKorting'.

Roenes
%Europe/Berlin %454 %2005, 11:54
Ohja, foutje van Roenes:

function telVijfOp()
{
mijnVar += 5;
}

var mijnVar = 10;
trace(telVijfOp()); //Trace levert 15 op in het output venster
In je ouput window zal 'undefined' staan. Dit is omdat je geen return waarde geeft.
Tuurlijk! Dat had ik moeten zien! Goed gezien Dauntless :)

En The_one, jij had ook een goede aanvulling! Ik denk dat chonazz nu wel een heel eind moet kunnen komen :)

chic0
%Europe/Berlin %490 %2005, 12:45
Trouwens, waarom levert "trace(mijnVar);" 15 op? Lijkt me onlogisch :I

function telVijfOp(welkGetal)
{
welkGetal += 5;
}

var mijnVar = 10;
trace(telVijfOp(mijnVar));
trace(mijnVar); //Geeft ook 15, ga maar na

Roenes
%Europe/Berlin %491 %2005, 12:48
Als parameter geef je mijnVar op als variabele waar 5 bij moet worden opgeteld. Omdat deze waarde wordt toegekend aan mijnVar zal mijnVar deze waarde houden en zul je dus met trace(mijnVar) 15 tracen omdat je in de regel daarvoor via de functie mijnVar hebt opgehoogd :)