objective-c: Rückgabewert
Lese ich Stephen Kochan "Programming in Objective-C" (ich bin n0000b). Alles wurde für mich offensichtlich, bis die übung 4-8.
Aufgefordert, mich zu ändern Methoden, die in einem "Akkumulator" - Klasse angelegt, die früher in dem Kapitel "return" wird der Wert des Akkumulators, wenn man von der mathematischen Methoden verwendet (im Grunde ist es ein Taschenrechner). Ich habe dieses Zitat zu bedeuten, dass ich möchte das Programm, um das Ergebnis anzuzeigen, wenn eine der Methoden verwendet wird,(+, -, *, /), so ich es einrichten, dies zu tun, so dass jede Zeile zeigt die kumulierte Ergebnis anstatt nur das Endergebnis:
[deskCalc setAccumulator: 0.0];
[deskCalc add: 200.]; //the result is displayed
[deskCalc divide: 100.0]; //the result is displayed
[deskCalc subtract: 1.0]; //the result is displayed
[deskCalc multiply: 5]; //the result is displayed
NSLog (@"The result is %g", [deskCalc accumulator]);
Aber nach suchen, sich mit anderen Menschen Lösungen, scheint es, dass "die RÜCKFÜHRUNG der Wert des Akkumulators" bedeutet etwas anderes.
Kann jemand beschreiben, was mir zurückgeben eines Wertes bedeutet, und welchem Zweck dient es? Ich habe mir durch die vorigen Kapitel ein paar mal, aber es ist mir noch immer unklar, wie diese machen das Programm anders Verhalten.
Dank!
-Andrew
InformationsquelleAutor Andrew | 2011-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Berechnung Methoden, die Sie in Ihrem Springprüfung wahrscheinlich so Aussehen im moment:
Diese Methode, in seinem aktuellen Zustand, gibt nichts zurück (void). Gibt es die aktuelle Summe auf dem Bildschirm nur. Das ist schön für eine übung, aber im real-world-Programme, eine Berechnung Ergebnis wird wahrscheinlich nicht sehr nützlich, wenn es auf dem Bildschirm angezeigt. Stattdessen werden Sie wahrscheinlich wollen, um etwas anderes zu tun, mit dem Ergebnis, so dass Sie wollen, die Methode, zu ihm zurückzukehren. Zum Beispiel, die
NSString
Klasse hat eine Methodelength
. Diese Methode wäre nicht sehr nützlich, wenn es um drucken Sie die Länge der Zeichenfolge auf dem Bildschirm. Stattdessen gibt die Länge, so dass das Programm etwas nützliches tun können mit diesem Wert (wie die überprüfung, dass die Zeichenfolge hat die richtige Länge):Ändern Sie den Taschenrechner Methoden für die Rückgabe von etwas, werden Sie (a) haben, ändern Sie die Signatur der Methode, einen Rückgabewert zu erhalten, und (b) tatsächlich gibt diesen Wert.
In der Signatur der Methode, einfach ändern Sie den Rückgabetyp auf etwas anderes als leere. In deinem Beispiel, die richtige Art wäre wahrscheinlich float (oder was auch immer geben, ist der Rechner mit intern für seine aktuellen Ergebnis).
Tatsächlich den aktuellen Wert zurück, fügen Sie ein
return
- Anweisung fügen Sie am Ende der Methode (vor dem schließenden}
)(dies setzt Voraus, dass
result
ist die Instanz-variable, die die aktuelle Berechnung ergibt).In meinem Beispiel habe ich angenommen, dass Ergebnis war eine Instanz-variable
float result;
erklärt in der calculator-Klasse Schnittstelle. Diese Instanz-variable bleibt während der gesamten Lebensdauer Ihrer Rechner Instanz, also jedes mal, wenn Sie eine operation durchführen, es ändert sich basierend auf seinen vorherigen Wert und – mit den vorgeschlagenen änderungen – den aktuellen Wert nach der operation ist auch der von der Methode zurückgegeben.Dieses Beispiel ist natürlich ziemlich gekünstelt. In einem normalen Programm, Sie würde eher Methoden beeinflussen den internen Zustand des Objekts (z.B. hinzufügen hinzufügen von x zu dem internen Ergebnis, dass nicht wieder etwas (oder möglicherweise einen Fehler zurück-code an Erfolg/Misserfolg der operation), und dann eine andere Methode, um den aktuellen Zustand (das aktuelle Ergebnis) des Rechners. Oder Methoden, die nicht auf den internen Zustand eines Objekts, sondern tun Sie etwas mit Ihren Parametern und dann wieder eine Art von Ergebnis.
Beispiele für meinen letzten Kommentar:
[name appendString:@" , Ph.D."]
wirkt der veränderliche string-Objekt den internen Zustand (wennname
wurde "John Doe" vor, es wird danach sein, "John Doe, Ph. D."), aber nichts zurückgibt. Auf der anderen Seite[name stringByAppendingString:@" , Ph.D."]
ändert nicht diename
string-Objekt (es werden immer noch "John Doe"), aber es gibt ein neues string-Objekt mit "max Mustermann, Ph. D.".InformationsquelleAutor puzzle
Fragen Sie Sie, ändern Sie Ihre hinzufügen, teilen, subtrahieren Methoden, um wieder den Wert des Akkumulators nach Abschluss der operation. Meine Vermutung ist, dass das ursprüngliche hinzufügen/teilen/etc Methoden definiert (void) Rückgabewert bedeutet, dass Sie nicht zurückkehren, jeden Wert aus dem Aufruf der Funktion. Als Ergebnis konnten Sie nicht durchführen eine Ausführung ähnlich der folgenden:
Zurückgeben eines Wertes aus einer Funktion bedeutet, dass nicht nur die Funktion ausführen, die irgendeine Art von operation, aber es gibt auch eine Art von Wert an den aufrufenden code. Der Zweck der Rücksendung bei einem Wert ist, dass es erlaubt Ihnen zu trennen, den code in logische Komponenten, ermöglicht die Wiederverwendung von code und erhöht die Wartbarkeit des Codes.
Hier ist ein Beispiel, wie es sinnvoll wäre: lassen Sie uns sagen, müssen Sie zur Berechnung der Quadratwurzel einer Zahl. Ihr code ist es egal wie die Quadratwurzel berechnet wird, Sie wollen einfach nur die Anzahl. Durch die Verwendung einer Funktion, die einen Wert, berechnet die Quadratwurzel und gibt dann den berechneten Wert an die aufrufende code kann sorgen über das, was es tun muss, ist den zurückgegebenen Wert der Funktion, ohne sich sorgen über die Logik selbst.
Hier ist ein Beispiel für eine Funktion, die zurückgibt einen NSString:
Hier ist wie Sie verwenden würden, Funktion:
Ich hoffe das hilft Ihnen weiter in Ihrem Lernprozess.
InformationsquelleAutor Kris Babic