Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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 ?

Geschrieben

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>

Geschrieben

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.

Geschrieben

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.

Geschrieben

@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.

Geschrieben
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.
Geschrieben

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?

Geschrieben
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.
Geschrieben (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 von Dragon8
Geschrieben

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.

Geschrieben
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.

Geschrieben

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...

Geschrieben

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.

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...