Warnung Result of call to 'quadrat(zahl:)' is unused

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • Warnung Result of call to 'quadrat(zahl:)' is unused

    Hallo zusammen,

    ich bin neu in diesem Forum und hoffe ihr könnt mich mit eurem Schwarmwissen unterstützen. Ich habe gerade mit einem online Programmierkurs begonnen und kämpfe mich so durch :)
    Allerdings habe ich das eine oder andere Mal irgendwie einen Knoten ?( im Hirn und hoffe das ihr mir helfen könnt ihn zu lösen.
    Dafür wäre ich sehr dankbar :D

    Ich bin gerade bei dem Thema Klassen mit Vererbung, Überladung, Datenkapselung und Polymorphismus.

    Ich habe die Aufgabe eine wiederverwendbare Klasse "Rechnungen" zu erstellen. Ich glaube es ist mir auch gelungen, allerdings bekomme ich am Ende eine Warnung beim ausführen und würde gerne verstehen warum das so ist.
    Vielleicht könnt ihr mir da helfen. Die Warnungen erscheinen beim Aufruf der Funktionen der Klasse "Quadrat"

    Bitte habt Verständnis dafür das der Code sehr einfach gehalten ist, liegt daran das ich noch nicht mehr weiß :saint:

    Quellcode

    1. import Foundation
    2. // Vereinbarung der Klasse Rechnungen
    3. class Rechnungen {
    4. // Funktion zum berechnen des Quadrats mit einer Int Zahl
    5. func quadrat(zahl: Int) -> Int {
    6. print("Version die den Int Typ ausgibt")
    7. return zahl * zahl
    8. }
    9. // Funktion zum berechnen des Quadrats mit einer Kommazahl
    10. func quadrat(zahl: Double) -> Double {
    11. print("Version die den Float / Double Typ ausgibt")
    12. return zahl * zahl
    13. }
    14. // Funktion zum berechnen der Wurzel
    15. func sqrt(wurzel: Double) -> Double {
    16. print("Version die die Wurzel ausgibt")
    17. return wurzel.squareRoot()
    18. }
    19. }
    20. let berechnen = Rechnungen()
    21. berechnen.quadrat(zahl: 2)
    22. print("Die Berechnung der Int Version ergibt \(berechnen.quadrat(zahl: 2))")
    23. berechnen.quadrat(zahl: 3.5)
    24. print("Die Berechnung der Double Version ergibt \(berechnen.quadrat(zahl: 3.5))")
    25. berechnen.sqrt(wurzel: 16)
    26. print("Die Berechnung der Wurzel ergibt \(berechnen.sqrt(wurzel: 16))")
    Alles anzeigen
  • Das ist einfach erklärt: Du rufst die Funktion quadrat auf, ohne ihren Rückgabewert in irgendeiner Variablen zu speichern. Das macht bei Funktionen wenig Sinn, da man sie dann bei jeder Verwendung ihres Ergebnisses erneut aufrufen (und durchführen) muss, so z. B. in Deiner Print-Ausgabe.

    Speichere den Rückgabewert in einer Variablen, nutzte diese bei der Ausgabe und gut ist :)

    Anders wäre es bei Unterprogrammen / Methoden ohne Rückgabewert: Bei denen steht ihre Ausführung im Vordergrund, das Ergebnis ist dann ein geänderter Zustand, nicht ein konkreter Wert.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Hi Mattes,

    danke für deine Blitzantwort ;)

    Also wenn ich dich jetzt richtig verstehe, meinst du ich soll vorher bei innerhalb der Klasse z.B. eine Variable "var Ergebnis" definieren und dann in den einzelnen Methoden mit verwenden?

    In der print Ausgabe funktioniert es ja super, nur in dem normalen Aufruf der Methode nicht. Das bedeutet ich muss mich einfach vorher entscheiden wie ich es aufrufen möchte und so den Code anpassen, richtig?
    Ich hoffe ich habe dich richtig verstanden.

    Gruß Yvi
  • Yvi schrieb:

    Also wenn ich dich jetzt richtig verstehe, meinst du ich soll vorher bei innerhalb der Klasse z.B. eine Variable "var Ergebnis" definieren und dann in den einzelnen Methoden mit verwenden?
    Nein, Du solltest den Aufruf der Funktion im Rahmen einer Variablen-Zuweisung machen und diese dann ausgeben. Etwa wie folgt

    Quellcode

    1. let berechnen = Rechnungen()
    2. var ergebnis = berechnen.quadrat(zahl: 2)
    3. print("Die Berechnung der Int Version ergibt \(ergebnis)")
    Disclaimer: Ich kann kein Swift, die Syntax mag falsch sein :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Yvi schrieb:

    In der print Ausgabe funktioniert es ja super, nur in dem normalen Aufruf der Methode nicht.
    Die print-Ausgabe funktioniert zwar, aber sie führt die Funktion vollkommen unnötig ein zweites Mal aus. Bei einer simplen Rechnung vielleicht egal, aber bei komplexeren Vorgängen macht es aus Performanzsicht Sinn, Funktionsergebnisse zu speichern.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Yvi schrieb:

    Also wenn ich dich jetzt richtig verstehe, meinst du ich soll vorher bei innerhalb der Klasse z.B. eine Variable "var Ergebnis" definieren und dann in den einzelnen Methoden mit verwenden?
    Nein, Du solltest den Aufruf der Funktion im Rahmen einer Variablen-Zuweisung machen und diese dann ausgeben. Etwa wie folgt

    Quellcode

    1. let berechnen = Rechnungen()
    2. var ergebnis = berechnen.quadrat(zahl: 2)
    3. print("Die Berechnung der Int Version ergibt \(ergebnis)")

    Disclaimer: Ich kann kein Swift, die Syntax mag falsch sein :)
    Mattes
    Ok. Jetzt verstehe es so langsam. Das bedeutet dann im Unkehrschluss, das ich für jede Rechnung eine eigene Variable verwenden muss. Ich kann ja Beispielsweise var ergebnis nicht gleich anschliesend wieder verwenden kann.

    Das mit der print Ausgabe habe ich jetzt verstanden.... Danke :D
    So würde es dann aussehen Richtig?

    Quellcode

    1. let berechnen = Rechnungen()
    2. var ergebnis = berechnen.quadrat(zahl: 2)
    3. print("Die Berechnung der Int Version ergibt \(ergebnis)")
    4. var ergebnisDouble = berechnen.quadrat(zahl: 2.5)
    5. print("Die Berechnung der Double Version ergibt \(ergebnisDouble)")
    6. var qwurzel = berechnen.sqrt(wurzel: 16)
    7. print("Die Berechnung der Wurzel ergibt \(qwurzel)")
  • Yvi schrieb:

    Ok. Jetzt verstehe es so langsam. Das bedeutet dann im Unkehrschluss, das ich für jede Rechnung eine eigene Variable verwenden muss. Ich kann ja Beispielsweise var ergebnis nicht gleich anschliesend wieder verwenden kann.
    Das kommt darauf an: Du kannst auch die gleiche Variable nehmen, wenn Du das vorige Ergebnis nicht mehr benötigst. Eine bessere Lesbarkeit hat man aber meist mit eigenen Variablen mit entsprechender Namensgebung ... kostet nur eben Speicherplatz.

    Sieht so gut aus :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.