Frage

Dies ist allgemeine Programmierung, aber wenn es einen Unterschied macht, ich bin mit Objective-c. Angenommen, es gibt eine Methode, die einen Wert zurückgibt, und führt auch einige Aktionen, aber Sie kümmern sich nicht um den Wert, den es gibt, nur das Zeug, dass es funktioniert. Möchten Sie nur die Methode aufrufen, als ob es leer war? Oder das Ergebnis in einer Variable und dann löschen oder es vergessen? Geben Sie Ihre Meinung, was Sie tun würden, wenn Sie diese Situation hat.

War es hilfreich?

Lösung

Ein typisches Beispiel hierfür ist printf, die einen int zurück ... aber man selten sehen:

int val = printf("Hello World");

Andere Tipps

Ja gerade die Methode aufrufen, als ob es leer war. Sie tun es wahrscheinlich die ganze Zeit ohne es zu merken. Der Zuweisungsoperator ‚=‘ gibt tatsächlich einen Wert, aber es ist sehr selten verwendet.

Es hängt von der Umgebung (die Sprache, die Werkzeuge, der Codierungsstandard, ...).

Zum Beispiel in C, es ist durchaus möglich, eine Funktion aufzurufen, ohne seinen Wert zu verwenden. Bei einigen Funktionen wie printf, die ein int zurückgibt, wird es die ganze Zeit getan.

Manchmal keinen Wert verwendet, wird eine Warnung verursachen, was unerwünscht ist. Zuweisen der Wert einer Variablen und dann unter Verwendung von nicht bewirkt, dass nur eine weitere Warnung über eine nicht verwendete Variable. Für diesen Fall ist die Lösung um das Ergebnis zu werfen durch das Vorsetzen den Anruf mit (void) für ungültig zu erklären, z.

(void) my_function_returning_a_value_i_want_to_ignore().

Es gibt zwei getrennte Fragen hier, eigentlich:

  1. Wenn Sie kümmern sich um zurückgegebene Wert?
  2. Wenn Sie es einer Variablen zuweisen Sie nicht? Benutzen wollen

Die Antwort auf # 2 ist ein klares „NEIN“ - es sei denn, natürlich, sind Sie mit einer Sprache zu arbeiten, wo, dass illegal wäre (Anfang Turbo Pascal in den Sinn kommt). Es gibt absolut keinen Sinn, eine Variable bei der Definition nur sie wegzuwerfen.

Der erste Teil ist nicht so einfach. Im Allgemeinen wird es ein Grund, Wert zurückgegeben wird - für Idempotent Funktionen sind das Ergebnis alleinigen Zweck der Funktion; für Nicht-idempotent stellt es in der Regel eine Art von Return-Code bedeutet, ob der Betrieb normal abgeschlossen wurde. Es gibt Ausnahmen, natürlich - wie Methode Verkettungs

.

Wenn dies in .net (zum Beispiel) üblich ist, gibt es wahrscheinlich ein Problem mit dem Code zu knacken CQS .

Wenn ich eine Funktion aufrufen, die einen Wert zurückgibt, dass ich ignorieren, ist es in der Regel, weil ich es in einem Test mache Verhalten zu überprüfen. Hier ist ein Beispiel in C #:

    [Fact]
    public void StatService_should_call_StatValueRepository_for_GetPercentageValues()
    {
        var statValueRepository = new Mock<IStatValueRepository>();

        new StatService(null, statValueRepository.Object).GetValuesOf<PercentageStatValue>();

        statValueRepository.Verify(x => x.GetStatValues());
    }

Ich weiß nicht wirklich über den Rückgabetyp egal, ich will nur überprüfen, ob ein Verfahren auf einem gefälschtes Objekt aufgerufen wurde.

In C ist es sehr häufig, aber es gibt Orte, an denen es in Ordnung ist so und an anderen Orten zu tun, wo es ist wirklich nicht. Spätere Versionen von GCC Funktion Attribut so dass Sie eine Warnung erhalten, wenn eine Funktion ohne Überprüfung des Rückgabewertes verwendet wird:

  

Das warn_unused_result Attribut bewirkt, dass eine Warnung ausgegeben werden, wenn ein Anrufer der Funktion mit diesem Attribute nicht den Rückgabewert zu verwenden ist. Dies ist nützlich für Funktionen, bei denen das Ergebnis nicht überprüft wird entweder ein Sicherheitsproblem oder immer ein Fehler, wie realloc.

     int fn () __attribute__ ((warn_unused_result));
     int foo ()
     {
       if (fn () < 0) return -1;
       fn ();
       return 0;
     }
     

Ergebnisse warnend auf Linie 5.

ich das letzte Mal benutzten war die erzeugte Warnung des Ausschaltens keine Möglichkeit, die Probleme verursacht, wenn Sie 3rd-Party-Code sind Kompilieren Sie nicht wollen, zu ändern. Außerdem gibt es natürlich keine Möglichkeit zu überprüfen, ob der Benutzer tatsächlich etwas Vernünftiges mit dem zurückgegebenen Wert der Fall ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top