Jump to content

Funktion innerhalb einer Funktion liefert keinen Rückgabewert


Direkt zur Lösung Gelöst von testperson,

Empfohlene Beiträge

Liebes Forum,

 

ich möchte innerhalb einer Funktion eine weitere Funktion nutzen. Diese bekommt eine Variable übergeben und soll diese verändern. Den geänderten Wert soll die Kind-Funktion an die Mutter-Funktion zurückgeben, damit damit weiter gearbeitet werden kann.

Leider gilt die geänderte Variable nur innerhalb der Kind-Funktion, nicht außerhalb.

 

Wie kann ich den Wert an die Mutter-Funktion zurückgeben? Die Lösung ist sicherlich simpel, doch ich habe da irgendwie ein Brett vor dem Kopf.

 

Viele Grüße

Davorin

Link zu diesem Kommentar

Nicht ganz.

 

funtion Mutter {

Param(

[parameter(Mandatory = $true)]
[string]
$user

 

funktion Kind ([string]$user) {

$user = $user.Replace("ä", "ae").Replace("ö", "oe").Replace("ü", "ue").Replace("Ä", "Ae").Replace("Ö", "Oe").Replace("Ü", "Ue").Replace("ß","ss")

Return $user

}

 

# Ersetze Umlaute

Kind $user 

 

Write-Host "Neuer Username ohne Umlaute ist: $user"

}

 

Aufruf mit: Mutter "Müller"

 

Da sollte dann die Ausgabe mit Mueller erfolgen.

 

Es wird aber durch das Return $user nach dem Ersetzen an der Konsole ausgegeben, aber nicht in die MUtter-Variable übernommen. In der Mutter-Funktion bleibt $user unverändert.

 

Link zu diesem Kommentar

Nun,

  1. Nutze doch bitte, bitte, bitte die Code Tags hier im Board
  2. Strukturiere den Code doch mal grob nach meinem Beispiel Code
vor 38 Minuten schrieb Scharping-FVB:

Es wird aber durch das Return $user nach dem Ersetzen an der Konsole ausgegeben, aber nicht in die MUtter-Variable übernommen. In der Mutter-Funktion bleibt $user unverändert.

Das liegt daran, dass die Variable "$User" in den beiden Funktionen nichts miteinander am Hut haben.

Link zu diesem Kommentar
vor einer Stunde schrieb testperson:

...wobei return als LETZTE Anweisung innerhalb einer Funktion vollkommen optional ist, sprich,

$rueckgabeWert

ist äquivalent zu

return $rueckgabeWert

Erst wenn return dazu verwendet wird, in einem bestimmten Zweig aus der Funktion auszusteigen, entfaltet es eine wirkliche Wirkung.

 

In Klassen sieht es wieder anders aus :-) 

 

Dies nur als "unnützes Wissen zum Freitag".

Link zu diesem Kommentar
vor 8 Minuten schrieb Scharping-FVB:

Doch, das geht :-)

Jetzt auch mit dem richtigen Ausgabewert.

 

Würde ich aber nicht machen.

 

1. brauchst du dann keine Funktion

2. Ist es übersichtlicher und du kannst die Funktion Problemlos mehrmals verwenden:

 

function umlaute {}

function username { ... umlaute ... }

function adresse { ... umlaute ... }

function email { ... umlaute ... }

 

Link zu diesem Kommentar
vor 4 Minuten schrieb Dukel:

 

Würde ich aber nicht machen.

 

1. brauchst du dann keine Funktion

2. Ist es übersichtlicher und du kannst die Funktion Problemlos mehrmals verwenden:

 

function umlaute {}

function username { ... umlaute ... }

function adresse { ... umlaute ... }

function email { ... umlaute ... }

 

Ja, du hast Recht, das klappt auch.
Ist meine erste Funktion, die ich schreibe, ich lerne noch :-)

 

Vielen lieben Dank an euch alle, es ist großartig, wie schnell und kompetent hier geholfen wird!

Link zu diesem Kommentar

Nachdem Ihr jetzt schon viel diskutiert habt, werfe ich noch "scope" in den Raum und [ref]. Ich glaube, jede Suchmaschine liefert passende vertiefende Hinweise :-)

 

@testperson Mein Monk achtet peinlichst darauf, die Pipeline sauber zu halte vor unbeabsichtigtem Inhalt, macht es wie @cj_berlin und gibt einfach das Ergebnis "aus", womit es in ebenjener Pipeline und damit im Return des aufrufenden Scope landet. "Return" hilft da nicht - alles was unbeabsichtigt in der Pipeline gelandet ist, wird ebenso zurückgegeben.

 

@Dukel Das mit dem Scope gilt auch für Funktionen - jede "Hauptfunktion" kann ihre eigene Childversion von "Kind{}" haben. Macht es im Zweifel nicht einfacher, ist aber manchmal durchaus hilfreich, weil importierte Funktionen nicht die eigenen stören können.

Link zu diesem Kommentar

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

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

×
×
  • Neu erstellen...