• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-03-2003, 19:31   #46 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
ok. das kommt dem gängigen FP-Arsenal ja schon ziemlich nahe.
Listenverarbeitung ist dabei ja sehr gefragt. In AS heissen Listen
natürlich Arrays.
Hier ein Link dazu:
http://www.crosswinds.net/~agauld/tutfctnl.htm

und die Umsetzung in AS:

ActionScript:
  1. Array.prototype.map=function(fct) {
  2.   var result=[];
  3.   for (var i=0; i<this.length; i++) {
  4.       result.push(fct(this[i]));
  5.   }
  6.   return result;
  7. }
  8.  
  9. Array.prototype.filter=function(fct) {
  10.   var result=[];
  11.   for (var i=0; i<this.length; i++) {
  12.       if (fct(this[i])==true) result.push(this[i]);
  13.   }
  14.   return result;
  15. }
  16.  
  17. Array.prototype.reduce=function(fct) {
  18.     var result=this[0];
  19.     for (var i=1; i<this.length; i++) {
  20.         result=fct(result,this[i])
  21.     }
  22.     return result;
  23. }

une eine Beispielanwendung:
ActionScript:
  1. function FunctionMultiplyBy(factor) {
  2.   // var factor
  3.   return function(n) {
  4.     return n*factor; 
  5.   }
  6. }
  7.  
  8. x4=FunctionMultiplyBy(4);
  9.  
  10. function isOdd(n) {
  11.   return n%2==0;   
  12. }
  13.  
  14. a=[2,5,7,8];
  15. b=a.filter(isOdd).map(x4);
  16. trace(b);

Was tut das ganze?
Filtert erst die geraden Zahlen raus und multipliziert diese dann mit 4.

Das schöne ist die Flexibilität, die dadurch entsteht, daß man beliebige
Funktionen übergeben kann. siehe auch Array.sort - da gibts ja auch
die Comparefunction als Parameter.

Vielleicht findet jemand mal ein sinnvolles Beispiel
z.B. mit Strings - finde alle Elemente die mit "F" anfangen und hänge "_xyz" hintendran o.s.ä

Gtx
Florian
__________________
www.planet-xaml.net

Geändert von flory (03-03-2003 um 19:34 Uhr)
flory ist offline   Mit Zitat antworten
Alt 03-03-2003, 20:16   #47 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
ok, mach ich´s gleich selber
ActionScript:
  1. // zählt die Anzahl der Aufrufe einer Funktion und übergibt die
  2. // Zahl wahlweise auch gleich als Parameter
  3.  
  4. Function.prototype.countCalls=function(n,passAsArgument) {
  5.     var f=this;
  6.  
  7.     if (passAsArgument) {
  8.         var f2=function() {
  9.             f2.calls++;
  10.             arguments.push(f2.calls);
  11.             return f.apply(null,arguments)
  12.         }
  13.     } else {
  14.         var f2=function() {
  15.             f2.calls++;   
  16.             return f.apply(null,arguments)
  17.         }
  18.     }
  19.     f2.calls=n;
  20.     return f2;
  21. }
  22.  
  23. // hänge beim Aufruf Argumente dran
  24. Function.prototype.addArguments=function() {
  25.     var f=this;
  26.     var args=arguments;
  27.     return function() {
  28.         return f.apply(null,arguments.concat(args))
  29.     }
  30. }
  31.  
  32. startsWith=function(str,letter) { return str.charAt(0)==letter; }
  33. connectWithAnd=function(a,b) {  return a+" and "+b;}
  34. addIndex=function(s,cnt){return s+" is "+cnt+"."};
  35.  
  36. trace(["Fred","Peter","Heinz","Horst","Frieda"].filter(startsWith.addArguments("F")).map(addIndex.countCalls(0,true)).reduce(connectWithAnd));

besonders im Zusammenhang mit RecordSet und Datenbank
abfragen fällt mir da einiges zu ein ...
__________________
www.planet-xaml.net

Geändert von flory (03-03-2003 um 22:26 Uhr)
flory ist offline   Mit Zitat antworten
Alt 03-03-2003, 21:30   #48 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
saweeeet !

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 03-03-2003, 22:53   #49 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
jo!

wenn man verstanden hat, was map, filter und reduce tun, ist es auch
gar nicht so unverständlich.

ist nur ein anderer blickwinkel
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 04-03-2003, 10:14   #50 (permalink)
ontheoutsidelookingin
 
Benutzerbild von dassoud
 
Registriert seit: Jun 2001
Ort: Dortmund
Beiträge: 5.897
Thumbs up

klasse!
__________________

33rpm
dassoud ist offline   Mit Zitat antworten
Alt 04-03-2003, 11:16   #51 (permalink)
Friend of Ed
 
Registriert seit: Dec 2001
Ort: Chiemsee
Beiträge: 669
Ahhh! Wie herbe! Echt klasse!
Vielen Dank!

Viele Grüße
Dominic
Dominic H. ist offline   Mit Zitat antworten
Alt 08-03-2003, 13:39   #52 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
kleines Update:
in RecordSet gibts schon von Hause genau diese Methode "filter", die eine Funktion als Parameter erwartet.
In der neuen iX steht ein Artikel über funktionales Programmieren mit Python. Zwischen Python
und AS/ECMA-Scripte gibt es einige Parallelen, auch wenn der Syntax zunächst etwas anders ist.
__________________
www.planet-xaml.net

Geändert von flory (08-03-2003 um 13:42 Uhr)
flory ist offline   Mit Zitat antworten
Alt 08-03-2003, 14:50   #53 (permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
Ah noch jemand der sich mit Python auseinandersetzt - yup flory da kann ich nur zustimmen. Bin gespannt wie sich Python so machen wird, selbst bei einigen Providern wird Python bereits angeboten.

Liebe Grüsse
Matze K.
Madokan ist offline   Mit Zitat antworten
Alt 08-03-2003, 17:33   #54 (permalink)
ontheoutsidelookingin
 
Benutzerbild von dassoud
 
Registriert seit: Jun 2001
Ort: Dortmund
Beiträge: 5.897
python?

habe ich auch installiert, brauche ich aber nur für winCVS. ich werde aber auch mal 'nen blick darauf werfen...

dassoud
__________________

33rpm
dassoud ist offline   Mit Zitat antworten
Alt 08-03-2003, 19:56   #55 (permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
dassoud es lohnt sich.

Liebe Grüsse
Matze K.
Madokan ist offline   Mit Zitat antworten
Alt 02-04-2003, 11:54   #56 (permalink)
Flash-Wüstling
 
Benutzerbild von pheidrias
 
Registriert seit: Dec 2001
Ort: Halle/Saale
Beiträge: 4.300
Thumbs up

Boah Jungs !

Thread gerade erst entdeckt...

Super Idee, auch mal den function.prototype etwas zu bemühen !

mehr ,
pheidrias
__________________
Ehrlich währt am LÄNGSTEN !
pheidrias ist offline   Mit Zitat antworten
Alt 13-01-2006, 20:21   #57 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ein alter Thread aus der Versenkung
Ich habe gerade gelesen, dass das nächste Python 2.5 die "teilweise Funktionsanwendung" unterstützt. (LOL, die deutsche Übersetzung hört sich echt bescheiden an gegenüber "partial function application"). Das passt ganz gut in das Thema hier, weil das eigentlich aus der funktionalen Programmierwelt kommt.
Wenn man eine Funktion mit 7 Parametern hat, und sie mit 3 Parametern aufruft, dann bekommt man als Ergebnis eine Funktion, die die restlichen 4 Parameter nimmt. Sowas können wir mit AS relativ einfach nachbauen. Die Funktion partial liefert eine Funktion, die als argumente die Argumente von partial selbst plus die aktuellen Argumente bekommt.

ActionScript:
  1. Function.prototype.partial():Function{
  2.     var args:Array = arguments.slice(1);
  3.     return function(){
  4.         return this.apply( null, args.concat( arguments));
  5.     }
  6. }

Als Beispiel benutzen wir eine Funktion, die zwei Parameter bekommt und setzen mit partial den ersten Parameter fest.
ActionScript:
  1. function addNumbers(v1:Number, v2:Number):Number{
  2.     trace("addNumbers " + [v1,v2]);
  3.     return v1 + v2;
  4. }
  5. trace(addNumbers(3,4)); //7
  6. var add5:Function = addNumbers.partial(5);
  7. trace(add5(6)); //11
  8.  

Wer weiss, vielleicht kann man es ja irgendwann mal brauchen
mfg Ralf.

Geändert von bokel (13-01-2006 um 20:24 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 13-01-2006, 22:17   #58 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Lustige Sache das!
So könnte man auch fehlende Parameter ergänzen, bzw. Fehler schmeißen, wenn Parameter fehlen … oder überladen … oder oder
Nur einsetzen würde ich es nicht da fehlt mir die Typensicherheit, aber um Code unleserlich zu machen, ist es allemal tauglich
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele