| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Dec 2005
Beiträge: 99
| AS3 Functional
Mich würde mal interessieren wieviel Gebrauch AS3-Entwickler derzeit von der funktionalen Seite der Sprache machen. Immerhin sind Funktionen in AS3 First-class objects und auch Konstrukte wie closures sind ohne weiteres machbar: Code: var i : int = 0
var myFunc : Function = function() : void {
trace(i);
}
myFunc(); // 0
i += 1;
myFunc(); // 1
__________________ http://blog.johannes-hodde.com |
| | |
| | #2 (permalink) |
| Developer Registriert seit: Sep 2001 Ort: Unterhaching/München
Beiträge: 515
|
Habe ich noch nie benutzt in AS3. Aber ich gebe Dir Recht, dass es bestimmt Anwendungsfälle gibt, wo Closures eleganten Code schreiben könnten. Eventuell in Kombination mit Chaining - Jquery like.
|
| | |
| | #3 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.897
|
Closures sind ein Feature der Sprache, um Funktionen als first level member nutzen zu können. Ihr meint denke ich die Funktionreferenzen. Ich nutze es nur gelegentlich, beispielsweise bei komplexen Filteroperationen. |
| | |
| | #4 (permalink) |
| Little Big Freak Registriert seit: Apr 2003
Beiträge: 286
|
Ich hab es noch nie benutzt und lern gerne immer dazu, aber im Moment versteh ich nicht bzw. fällt mir auf Anhieb kein Fall ein indem ich eine Referenz auf eine Function bräuchte. Kann mir das jemand erklären oder ein bsp. geben wo sowas sinn machen würde? Ich sehe jetzt in dem oberen bsp. keinen vorteilhaften Nutzen zu der Version: PHP-Code: |
| | |
| | #5 (permalink) |
| undefined Registriert seit: Jul 2001 Ort: Stuttgart
Beiträge: 1.859
|
wird in Flex für Filterung und Sortierung verwendet mx.collections.ListCollectionView - ActionScript 3.0 Referenzhandbuch für die Adobe Flash-Plattform PHP-Code:
__________________ mfg Frank |
| | |
| | #6 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 7.040
|
Ein anderes Anwendungsgebiet wäre die Übergabe von Callback-Funktionen (z.B. bei Tweening Engines). Wobei dieses Vorgehen ja mehr und mehr vom Event-System verdrängt wird...
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #7 (permalink) |
| Little Big Freak Registriert seit: Apr 2003
Beiträge: 286
|
K danke euch, in Flex arbeite ich mich gerade ein weswegen ist da jetzt noch nicht kannte mit dem Filter. Callback-Funktionen kenne ich habe sie aber nie angewendet, hab wie Martin schon erwähnt immer nen Event genutzt, aber da macht ne Funktionsreferenz natürlich sinn. Danke |
| | |
| | #9 (permalink) |
| Neuer User Registriert seit: Dec 2005
Beiträge: 99
|
Habe jetzt mal ein wenig mit closures in as3 experimentiert. Mit dem Ziel ein gutes Beispiel für closures anhand einer Alternative für ein switch case Konstrukt in as3 zu liefern bin ich vorerst bei folgendem gelandet: Code: package closuretest {
public function match(object : *) : Function {
return function(pattern : Function, resultHandler : Function) : Function {
if(pattern(object)) {
resultHandler(object);
var f : Function = function(f1 : Function, f2 : Function) : Function {
return f;
};
return f;
} else {
return match(object);
}
};
}
} match selbst erwartet zunächst nur die zu testende Instanz. Diese wird durch das darauf folgende closure eingeschlossen. Das closure erwartet zwei Funktionsrefernzen: Die Signatur der ersten Funktionsreferenz(pattern) erwartet hier die zu testende Instanz sowie den Rückgabewert Boolean wobei die zweite(resultHandler) ledeglich die zu testende Instanz erwartet (typisierte Funktionsreferenzen a la C# währen hier ne durchaus coole Sache btw.). Wenn das übergebene pattern matched wird die Funktion resultHandler mit der zu testenden Instanz aufgerufen. Das closure selbst gibt nun wiederrum eine Funktion nach folgenden Regeln zurück: Wenn das angegebene pattern matched wird eine Funktion zurückgegeben die einfach nur sich selbst zurückgibt um sicherzustellen das folgende Aufrufe des "patternmatching" quasi ins leere laufen (hier liegt auch das größte performance Problem weil alle darauffolgenden matches diesen Prozess durchlaufen). Wenn das angegebene pattern nicht matched wird die Funktion match mit derselben Instanz erneut aufgerufen. In folgendem Beispielen soll getestest werden ob eine übergebene Instanz dem Typ String entspricht und wenn ja soll diese per trace ausgegeben werden. Obwohl der compiler folgenden code ohne meckern akzeptiert: Code: var myString : String = "someString";
switch(myString) {
case function(o : *) : Boolean {return o is String;}:
trace(myString);
break;
case function(o : *) : Boolean {return o is String;}(myString):
trace(myString);
break;
case 1 == 1:
trace(myString);
break;
} Damit fällt switch/case raus. Hier nun das if/else Konstrukt: Code: var myString : String = "someString";
if(myString is Number) {
trace(myString);
} else if(myString is SomeUnknownObject) {
trace(myString);
} else if(myString is String) {
trace(myString);
} Code: function isInstanceOf(type : Class) : Function {
return function(o : *) : Boolean {
return o is type;
};
}
match(myString)
(isInstanceOf(Number), trace)
(isInstanceOf(SomeUnknownObject), trace)
(isInstanceOf(String), trace));
__________________ http://blog.johannes-hodde.com Geändert von JoH (29-04-2011 um 01:47 Uhr) |
| | |
| | #11 (permalink) |
| Neuer User Registriert seit: Dec 2005
Beiträge: 99
|
Weiss jemand zufällig wie der GC mit Instanzen umgeht die innerhalb einer anonymen Funktion erzeugt werden?
__________________ http://blog.johannes-hodde.com |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |