Funktionen und Werte zurückgegeben werden
Ich bin ein Anfänger in der Swift so einige Sachen nicht ganz klar ist mir noch nicht. Ich hoffe, jemand würde erklären, dies für mich:
//Creating Type Properties and Type Methods
class BankAccount {
//stored properties
let accountNumber: Int
let routingCode = 12345678
var balance: Double
class var interestRate: Float {
return 2.0
}
init(num: Int, initialBalance: Double) {
accountNumber = num
balance = initialBalance
}
func deposit(amount: Double) {
balance += amount
}
func withdraw(amount: Double) -> Bool {
if balance > amount {
balance -= amount
return true
} else {
println("Insufficient funds")
return false
}
}
class func example() {
//Type methods CANNOT access instance data
println("Interest rate is \(interestRate)")
}
}
var firstAccount = BankAccount(num: 11221122, initialBalance: 1000.0)
var secondAccount = BankAccount(num: 22113322, initialBalance: 4543.54)
BankAccount.interestRate
firstAccount.deposit(520)
Also das ist der code. Ich Frage mich, warum deposit()
nicht über ein return-Pfeil und die return-Schlüsselwort und withdraw()
tut. Wann nutze ich einen zurück-Pfeil, in welchen Situationen, ist es eine Regel oder so etwas? Ich verstehe es nicht.
Zusätzlich...
Jeder ist so freundlich mit Ihren Antworten, es wird immer klarer für mich.
Im Anfang dieses Tutorials ist die Praxis-code für Funktionen
//Function that return values
func myFunction() -> String {
return “Hello”
}
Ich mir vorstellen, dieser Rückgabewert wird hier nicht benötigt, aber im tutorial Sie wollte uns zeigen, dass es existiert, habe ich Recht?
Außerdem kann ich einen "Fehler" und ein return-Pfeil und Wert in meinem Depot-Funktion irgendwie? Ich habe versucht mit diesem:
func deposit(amount : Double) -> Double {
return balance += amount
}
... aber es erzeugt Fehler.
Ich sah advanced coding in meiner letzten Firma, die Sie schufen, online-shop mit vielen custom und coolen features und alle code war voll von zurück-Pfeile. Das verwirrt mich, und ich dachte, dass es ein Standard für die Herstellung von Methoden/Funktionen in OOP.
Zusätzliche Frage!
Ich wollte spielen mit Funktionen, so möchte ich eine Funktion erstellen transferFunds (), welche den Transfer von Geld von einem Konto auf ein anderes. Ich machte funktionieren wie diese
func transferFunds(firstAcc : Int, secondAcc : Int, funds : Double) {
//magic part
if firstAcc == firstAccount.accountNumber {
firstAccount.balance -= funds
} else {
println("Invalid account number! Try again.")
}
if secondAcc == secondAccount.accountNumber {
secondAccount.balance += funds
} else {
println("Invalid account number! Try again.")
}
}
Dies ist ein einfacher code, der mir in den Sinn kam, aber ich weiß, es ist vielleicht auch dumm. Ich weiß, es sollte ein code, der überprüft, ob es genug Mittel im ersten Konto, von dem aus ich nehme das Geld, aber okay... Lets play mit diesem.
Ich möchte angeben accountNumbers
oder etwas anderes in den Parametern innerhalb der Funktion transferFunds()
und ich will eine Suche über alle Objekte/Kunden in meiner imaginären bank, die Klasse BankAccount
um die zu finden und dann Geld überweisen. Ich weiß nicht, ob ich mein problem beschrieben korrekt, aber ich hoffe, Sie verstehen, was ich tun will. Kann mir jemand helfen, bitte?
- Dies ist nicht eine Rasche Frage als solche, sondern eher um eine Allgemeine Frage der Programmierung. Ich kann mir vorstellen, dass er nie benutzt Swift, der Pfeil zeigt auf einen Rückgabetyp. In diesem Fall
withdraw
gibt einen booleschen Wert zurück, um zu sagen, ob oder ob nicht zurückziehen, war die operation erfolgreich ist oder nicht. Sie könnte auch das gleiche tun für Einzahlung, geben einen booleschen Wert zurück, um zu sagen, ob die Einzahlung erfolgreich war. Es gibt keine harte und schnelle Regel für diese, es ist etwas, das kommt mit der Praxis. - Ich bin so froh, dass ich begann, auf Pascal, wenn die Funktion ohne return-Typ wurden als Prozeduren bezeichnet.
- Der Rückgabetyp "String" benötigt. Müssen Sie deklarieren den Typ der variable gibt, die in der Funktion. Wie beim letzten Beispiel, Sie können nicht zurück, bevor der Ausdruck, der verwendet den '+ = ' - operator. Sie müssen zum hinzufügen einer neuen Zeile: return balance, oder vielleicht in einer Zeile: zurück ++Gleichgewicht (in einigen Programmiersprachen). Achten Sie darauf, dass diese Art von Methode verstößt gegen die CQS-Prinzip, wie beschrieben in meiner Antwort, denn es ist sowohl ein Befehl und Abfrage.
- A-ha! moment. Danke. func einzahlen(Betrag : Double) -> Doppelte { balance += amount return balance } und es funktioniert. Ist es ein Fehler zu schreiben, die Funktionen wie, dass die ganze Zeit?
- Sie willkommen. Es ist nicht ein Fehler, sondern kann dazu führen, Mehrdeutigkeit, wenn Sie arbeiten mit anderen Entwicklern. Sollten Sie einen standard für alle, um mit zu gehen. Wenn Sie einzahlen möchten, Sie wollen eine Funktion, um es zu tun, und vergessen Sie es. Immer das Ergebnis zurück ist nicht die Rolle, die der Befehl. Er kann verwirren: "Warum hat es einen Wert zurückgeben?', "Ich habe gerade gesagt, dass es um die Kaution!'. Es ist besser voneinander zu trennen. Wenn jemand will, um das Gleichgewicht besser getBalance () - Methode [=query]. Denn manchmal muss man die Logik in immer die balance. Wie Gebühren und etc.So, Sie besser haben an einem zentralen Ort.
- Ich denke ich bekomme es jetzt, gut 99%. Sehr sehr sehr viel Dank. Ich werde in paar bei der " making apps so ist dies ein guter Tipp.
- Ich bin froh, das zu hören. Immer Fragen, Sie sind auf einem großen Weg. Durch die Möglichkeit, auf Stackoverflow ist es besser, Sie wählen die Antwort Ihnen geholfen, die meisten mit dem V weiter, damit andere es finden können und schneller lernen.
- Alle haben mir geholfen, aber ich wählte mein fave. Danke für den Tipp! Hoffe, jemand, Anfänger wie mich, wird Sie von dieser Frage. Jetzt kann ich vorwärts zu bewegen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, in Swift, eine Funktion, die keine Pfeil hat einen Rückgabetyp
Void
:Diese könnte wie folgt umgeschrieben werden:
also in deinem Fall...
Ihre Methode Einzahlung nimmt einen einzelnen parameter von Typ Doppel - und diese gibt nichts, das ist genau der Grund, warum Sie nicht sehen, ein zurück - Anweisung in der Methode Erklärung. Diese Methode ist einfach hinzufügen, oder Hinterlegung mehr Geld in Ihrem Konto, wo keine return-Anweisung notwendig ist.
Jedoch, auf Ihren Rücktritt Methode:
Diese Methode nimmt ein einzelnes parameter von Typ Double, und gibt ein Boolean. In Bezug auf Ihre zurückziehen Methode, wenn Ihr balance ist weniger als der Betrag, den Sie versuchen zu zurückziehen (Betrag), dann ist das nicht möglich, weshalb es gibt false, aber wenn Sie haben genug Geld in Ihrem Konto, und Sie anmutig zieht das Geld, und gibt true zurück, zu handeln, als ob die operation erfolgreich war.
Ich hoffe, das klärt ein wenig von dem, was Sie waren verwirrt auf.
Willkommen zu Programmieren! Gute Fragen, stick mit es und Sie werden gut zu tun.
Funktionen haben einen Rückgabewert sind die Bereitstellung der aufrufende code mit Informationen. Zum Beispiel für die Kaution Funktion, es ist die Erwartung, dass nichts ungewöhnliches passieren wird, es ist also nicht die Mühe, alles zurückzugeben, was könnte überprüft werden, indem der Anrufer.
In der Zurücknahme-Funktion, ist es möglich, dass der Betrag eingezogen werden konnte, größer zu sein, als die Bilanz zur Verfügung. Wenn dies der Fall ist, gibt die Funktion false zurück. Die aufrufende Funktion überprüfen könnte, den Wert und den Benutzer informieren, dass Sie versucht sind, eine Auszahlung von mehr als verfügbar ist. Otoh, wenn der Wert true zurückgegeben wird, dann wird das Programm abziehen, diesen Betrag aus dem Gleichgewicht und vermutlich bieten Sie dem Kunden die Mittel angefordert.
Check-out Funktion, Parameter und Return-Werte in der Swift-docs:
In deinem Beispiel
deposit(_:)
nichts zurückgibt, ist es nur ändert eine Instanz-variable. Dies ist typisch für Funktionen, die immer gelingt.withdraw(:_)
, auf der anderen Seite, könnte scheitern (wegen fehlender Deckung), so gibt es eineBool
angibt, ob es funktioniert hat oder nicht.Diese Frage kann bezeichnet werden als eine sprachunabhängige, so werden meine Antwort an Sie.
Einer Methode einen code-block enthält eine Reihe von Anweisungen. Methoden können einen Rückgabewert an den Aufrufer, aber nicht so tun,. Es ist die Entscheidung von Ihnen als Entwickler. Methode gibt einen Wert an den Aufrufer wird aus dem Schlagwort: "return", und ein Wert-Typ deklariert in der Signatur der Methode.
Möchte ich noch erwähnen das Befehl-Abfrage-Separation (CQS) - Prinzip geprägt durch Bertrand Meyer. Martin Fowler umformuliert: Die grundlegende Idee ist, dass wir teilen ein Objekt die Methoden in zwei scharf getrennte Kategorien:
das system (frei von Nebenwirkungen). Mark Seemann sagte Abfragen nicht mutieren beobachtbaren Zustand. Sie sind idempotent und sicher aufrufen.
Bool
angibt, ob der Befehl erfolgreich ausgeführt wurde. (Ich denke, CQS, könnte immer noch gelten.)Quelle: https://thenucleargeeks.com/2019/05/08/functions-in-swift/
In swift eine Funktion wird definiert durch die "func" - Schlüsselwort. Wenn eine Funktion deklariert wurde, basiert auf der Voraussetzung, es kann dauern, ein oder mehr parameter, Prozess-und die valueFunction ohne Parameter und ohne Rückgabewert.
Funktion ohne parameter und ohne Rückgabetyp.
Funktion ohne parameter und Rückgabetyp
Funktion mit parameter und Rückgabetyp
Alternativ können Sie überspringen die arg-und direkt übergeben den Wert an die Funktion.
Funktion mit parameter und ohne Rückgabetyp