hanka Geschrieben 5. September 2014 Geschrieben 5. September 2014 Hallo ihr lieben, Hallo:) Ich will das meine funktion sowohl add (2)(4) akzeptiert als auch add(2,4) Einzeln würden die Funktionen so aussehen: function add1(x,y){ return x + y; } function add2(x) { return function(y) { return x + y; }; } Dann wollte ich sie zusammenfügen, aber irgendwie bekomme ich es nicht hin: function add (x,y){ if(!y){ return x function(x){ return function(y) { return x + y; }; } } return x+y; } Kann mir jemand helfen? Zitieren
Memento Geschrieben 5. September 2014 Geschrieben 5. September 2014 Ich verstehe nicht, was du vorhast... was soll add (2)(4) akzeptiert als auch add(2,4) bedeuten? Eine Funktion, die zwei Parameterübergaben hat? funktion(param1)(param2) ?? Parameterübergabe findet immer komma-separiert statt. Oder als Array/Pointer/Object/etc. Aber das,was du vor hast existiert in JavaScript nicht. Und mir fällt keine aktuelle Sprache ein, die das akzeptieren würde. In beiden fällen addierst du doch x + y ? Zitieren
hanka Geschrieben 5. September 2014 Autor Geschrieben 5. September 2014 function add2 (Das Beispiel habe ich oben eingefügt) funktioniert aber genau so. Mit add2 (1)(2) kommt 3 raus. Zitieren
Klotzkopp Geschrieben 5. September 2014 Geschrieben 5. September 2014 "irgendwie bekomme ich es nicht hin" ist keine ausreichende Problembeschreibung. Fehlende Parameter erkennt man z.B. durch Identitätsvergleich mit undefined. Zitieren
uenetz Geschrieben 5. September 2014 Geschrieben 5. September 2014 Oder sollte es so aussehen? <script type="text/javascript"> function add() { var result = 0; for (var i=0, args = arguments.length; i < args; i++) { if (typeof arguments=="number") result += arguments; } document.write(result); return (result); } add(1, 2); add(3); add(4, 5, 6, 7, 8, 0, 11); </script> Zitieren
Townsend Geschrieben 5. September 2014 Geschrieben 5. September 2014 Ich sehe es wie Klotzkopp, bevor hier "rumorakelt" wird was für eine Lösung / Problem hanka hat sollte die Fragestellung eventuell überarbeitet werden. Zumindest ich werde aus den oben geschriebenen auch nicht wirklich schlau. Zitieren
hanka Geschrieben 5. September 2014 Autor Geschrieben 5. September 2014 Ok ich will das meine add methode sowohl (2,3) (2)(3) addieren kann. Oben habe ich in add1 und add2 zwei Methoden geschrieben mit denen ich erst das eine und dann dass andere machen kann. Dann habe ich rumgetüfftelt, ob ich beide zusammenwerfen kann. Meine Idee ist dabei, mit "if(!y)" zu erfragen, ob die methode einen zweiten Parameter hat. wenn es keinen hat soll er nur x zurückgeben und dann wie in add2 mit y weiterarbeiten. Ich denke ich habe irgendeinen syntaxfehler versteckt. Hoffentlich konnte ich es nun besser erklären. Zitieren
hanka Geschrieben 5. September 2014 Autor Geschrieben 5. September 2014 @uenetz Vielen Dank für die schnelle Antwort. Aber bei deiner Idee kann ich ja einfach so viele Parameter wie ich will einfügen. Ich will tatsächlich entweder zwei parameter haben oder zweimal einen. Zitieren
carstenj Geschrieben 5. September 2014 Geschrieben 5. September 2014 Hi, ich kenne mich mit Javascript nicht aus, aber soweit ich es hier überblicke geht es um eine Art Funktionsüberladung. Schau mal hier: Function overloading in Javascript - Best practices - Stack Overflow Zitieren
Townsend Geschrieben 5. September 2014 Geschrieben 5. September 2014 Dann sollte das Beispiel von uenetz die eigentlich einen flexiblen weg aufzeigen. Oder geht es dir im speziellen um den Aufruf? Zitieren
hanka Geschrieben 5. September 2014 Autor Geschrieben 5. September 2014 ja mir geht es da schon speziell um den Aufruf Zitieren
Klotzkopp Geschrieben 5. September 2014 Geschrieben 5. September 2014 Meine Idee ist dabei, mit "if(!y)" zu erfragen, ob die methode einen zweiten Parameter hat. Ich habe doch beschrieben, wie man auf fehlende Parameter prüft. Mit Google findet man das auch ziemlich leicht. Ich denke ich habe irgendeinen syntaxfehler versteckt. Hoffentlich konnte ich es nun besser erklären.Wenn du eine Fehlermeldung bekommst, solltest du sie uns verraten. Zitieren
hanka Geschrieben 5. September 2014 Autor Geschrieben 5. September 2014 Das mit if(!y) funktioniert ja. Also wenn ich dann nur return x schreibe, dann gibt er nur return x aus. Also so: function add (x,y){ if(!y){ return x } return x+y; } Dann wäre ich schonmal soweit, dass add(2) und add(2,3) geht. Also auch nur ein parameter akzeptiert werden. Fehlermeldung bekomme ich nicht. Ich meinte Semantikfehler. Ist mein Code nachvollziehbar oder besser gesagt meine Idee die dahinter steckt? Zitieren
uenetz Geschrieben 5. September 2014 Geschrieben 5. September 2014 ist mein code nachvollziehbar oder besser gesagt meine idee die dahinter steckt? nicht wirklich! Welcher Sinn soll eigentlich hinter dem Ganzen stecken? Zitieren
hanka Geschrieben 5. September 2014 Autor Geschrieben 5. September 2014 Das ist eine Aufgabe vom Betrieb. Deswegen kann ich den Sinn nicht ganz erschließen. Bin auch schon am tüffteln, wann man das gebrauchen könnte. Zitieren
Memento Geschrieben 5. September 2014 Geschrieben 5. September 2014 Und wie genau lautet die Aufgabe vom Betrieb? Irgendwie riecht das hier nach einem gewissen Benutzer hier im Forum.. Zitieren
Klotzkopp Geschrieben 5. September 2014 Geschrieben 5. September 2014 Dann wäre ich schonmal soweit, dass add(2) und add(2,3) geht. Also auch nur ein parameter akzeptiert werden. Moment, das passt nicht zusammen. add(2) kann nur entweder ein Ergebnis zurückgeben, oder eine Funktion, die einen weiteren Parameter erwartet. Beides geht nicht. Zitieren
Dragon8 Geschrieben 5. September 2014 Geschrieben 5. September 2014 (bearbeitet) Ich weiß zwar nicht, warum so einige hier nur schreiben, um ihren Kommentar abzulassen, dass dieses Konstrukt mit keiner Sprache funktionieren würde, mit JavaScript geht es. An sich mag die Aufgabe bei dieser Funktion auch nicht so viel Sinn ergeben, aber ich finde, dass sie relativ gut die Funktionsweise von anonymen Funktionen aufzeigt. Um auf das Problem zurück zu gekommen, bei der Ausführung der Funktion müsste eigentlich ein Fehler geworfen werden, da du versuchst x und die anonyme Funktion function(x) mit return zurück zu geben. Da hast du dich denke ich verschrieben. Desweiteren funktioniert deine Funktion dann aber auch noch nicht wie von dir erwartet. Sie würde erst das richtige Ergebniss ausgeben, wenn du sie z.B. folgendermaßen aufrufst: add()(4)(5) Dieser Aufruf gibt 9 zurück. Vielleicht findest du also den zweiten Fehler auch alleine Bearbeitet 5. September 2014 von Dragon8 Zitieren
hanka Geschrieben 5. September 2014 Autor Geschrieben 5. September 2014 Oh danke schon mal für den Ansatz. Ich denke aber ich hab einen Knoten im Kopf. Reicht es den, wenn ich zwischen return und function(x) ein + setze? Sorry bin nicht so in der syntax von javascript zuhause. Alles noch ein bisschen verwirrend. Zitieren
hanka Geschrieben 5. September 2014 Autor Geschrieben 5. September 2014 Also für den ersten Fehler zumindest mal. Zitieren
Dragon8 Geschrieben 5. September 2014 Geschrieben 5. September 2014 Oh danke schon mal für den Ansatz. Ich denke aber ich hab einen Knoten im Kopf. Reicht es den, wenn ich zwischen return und function(x) ein + setze? Sorry bin nicht so in der syntax von javascript zuhause. Alles noch ein bisschen verwirrend. Nein. An sich möchtest du eine Funktion bauen, die bei zwei Argumenten die Summe aus diesen zurückgibt oder wenn nur ein Argument übergeben wird, eine Funktion zurückgibt, die das zweite Argument aufnimmt und dann die Summe dieser beiden Argumente zurückgibt. Wenn du also nicht ganz mit der Syntax von JavaScript vertraut bist, solltest du dich erstmal in die Grundlagen einarbeiten und dich dann für diese Aufgabe speziell mit Closures beschäftigen. Zitieren
hanka Geschrieben 5. September 2014 Autor Geschrieben 5. September 2014 ja genau das möchte ich. Dann stimmt aber doch schon mal der Ansatz? Oder wie kann ich erst x bekommen und dann die zweite funktion? Für deinen zweiten Ansatz denke ich hab ich schon eine Lösung. Aber bei dem return, vergesse ich doch gerade nur irgenwas... Zitieren
Dragon8 Geschrieben 5. September 2014 Geschrieben 5. September 2014 Der Ansatz stimmt bis zum return soweit, bis auf den zweiten Fehler den ich dir vorhin beschrieben habe und die von Klotzkopp angemerkte Prüfung auf fehlende Parameter. Wenn ich deine Aussagen aber richtig deute, scheinst du zu denken, du müsstest beim return in der add-Funktion schon irgendetwas addieren. Das ist falsch. Deswegen hatte ich dir nochmal aufgeschrieben, was deine Funktion machen sollte. Nämlich erst die von der add-Funktion zurückgegebene Funktion addiert wirklich deine Werte und gibt diese zurück. Die add-Funktion selber addiert die Werte nur, wenn wirklich beide Werte übergeben wurden, ansonsten sie nur eine Funktion zurück. Diese zurückgegebene Funktion erwartet dann einen weiteren Parameter und addiert dann den Parameter der add-Funktion und den Parameter den sie selber übergeben bekommen hat. An sich hast du es mit deinen add1 und add2 Funktionen ja auch schon richtig gemacht. Eigentlich musst du also nur nach der Überprüfung auf einen fehlenden Parameter den Inhalt deiner add2 Funktion als anonyme Funktion zurück geben. Zitieren
hanka Geschrieben 5. September 2014 Autor Geschrieben 5. September 2014 Das was Klotzkopp sagt, verstehe ich. Das war ja nur ein Beispiel um auch nochmal zu untermauern, dass if(!y) funktioniert. Zitieren
hanka Geschrieben 5. September 2014 Autor Geschrieben 5. September 2014 Ah ja und genau bei der function nehme ich eine anonyme Funktion. Damit ich die add() (3)(4) Problem umgehe. Das versteh ich. Also einfach function(){...}; Aber ich häng noch am ersten Fehler. Denke langsam das ich ein bisschen blöd bin... Das funktioniert doch eigentlich ganz simple. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.