0Pricing
Swift Academy · Lektion

Operatorüberladung und Precedence-Groups

Überladen Sie integrierte Operatoren für Ihre Typen und definieren Sie precedence groups , damit Ausdrücke wie beabsichtigt geparst werden. Halten Sie Entwürfe minimal und vorhersehbar.

Operatorüberladung und Precedence-Groups ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Warum Operatoren anpassen?

Swift ermöglicht es Ihnen, Operatoren für Ihre Typen zu überladen und neue zu erstellen. Verwenden Sie diese Möglichkeit sparsam: Bevorzugen Sie Klarheit, dokumentieren Sie das Verhalten und definieren Sie die Priorität, um Überraschungen zu vermeiden.

Einen integrierten Operator überladen

Überladen Sie einen vorhandenen Operator, indem Sie eine freie Funktion mit demselben Symbol und Ihrem Typ schreiben. Halten Sie die Semantik vorhersehbar (z. B. addiert + Werte).

struct Vector2D: CustomStringConvertible, Equatable {
    var x: Double
    var y: Double
    var description: String { "(\(x), \(y))" }
}
func + (lhs: Vector2D, rhs: Vector2D) -> Vector2D {
    Vector2D(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
}
func == (lhs: Vector2D, rhs: Vector2D) -> Bool {
    lhs.x == rhs.x && lhs.y == rhs.y
}
let a = Vector2D(x: 1, y: 2)
let b = Vector2D(x: 3, y: 4)
let c = a + b
print(c)     // (4.0, 6.0)

Benutzerdefinierter Operator und Präzedenz

Deklarieren Sie eine precedencegroup und weisen Sie sie Ihrem Operator zu. Durch die Rechtsassoziativität wird 2 ** 3 ** 2 als 2 ** (3 ** 2) geparst.

// Define power operator ** with right-associative precedence
precedencegroup PowerPrecedence {
    higherThan: MultiplicationPrecedence
    associativity: right
}
infix operator ** : PowerPrecedence

// Simple integer exponent (education-only; no overflow checks)
func ** (base: Int, exp: Int) -> Int {
    guard exp >= 0 else { return 0 }   // keep it simple for demo
    if exp == 0 { return 1 }
    var result = 1
    for _ in 0..<exp { result *= base }
    return result
}
print(2 ** 3)          // 8
print(2 ** 3 ** 2)     // 2 ** (3 ** 2) = 2 ** 9 = 512 (right-assoc)

Präfix-/Postfix-Operatoren

Sie können prefix-/ postfix-Operatoren definieren. Reservieren Sie diese für eindeutig mathematisch geprägte Bereiche und vermeiden Sie überraschende Bedeutungen.

prefix operator √
prefix func √ (x: Double) -> Double { x.squareRoot() }

postfix operator !
postfix func ! (x: Bool) -> Bool { !x }  // purely demo; avoid confusing overrides

print(√9)     // 3.0
print(true!)  // false (demo only — don't ship this)

Präzedenz in der Praxis

Legen Sie die Präzedenz im Verhältnis zu integrierten Präzedenzgruppen wie MultiplicationPrecedence sorgfältig fest. Testen Sie Ausdrücke, um Lesbarkeit und Absicht zu bestätigen.

// Demonstrate how precedence affects parsing
// Our PowerPrecedence is higher than Multiplication.
// So this parses as: 2 * (3 ** 2) = 18
let r1 = 2 * 3 ** 2
print(r1)

// Compare if we had lower precedence (hypothetical):
// Then it would parse as (2 * 3) ** 2 = 36

Bewährte Vorgehensweisen

Richtlinien:

  • Bevorzugen Sie Methoden für nicht standardmäßige Aktionen und reservieren Sie Operatoren für vertraute mathematische oder bitweise Operationen.
  • Berücksichtigen Sie die Erwartungen der Nutzenden (+ addiert, * multipliziert).
  • Dokumentieren Sie benutzerdefinierte Operatoren und halten Sie die Anzahl klein.
  • Definieren Sie Präzedenz und Assoziativität, um mehrdeutiges Parsen zu vermeiden.

Operatoren korrekt deklarieren

Kurzer Check: Welche Variante fügt einen neuen Operator mit einer Präzedenzgruppe hinzu?

Zusammenfassung

Zusammenfassung: Überladen Sie Operatoren nur, wenn ihre Semantik offensichtlich ist. Definieren Sie Präzedenzgruppen und die Assoziativität, um das Parsen zu steuern, und testen Sie Ausdrücke auf Klarheit.

Häufig gestellte Fragen

Ist die Lektion „Operatorüberladung und Precedence-Groups“ kostenlos?

Ja — der vollständige Text von „Operatorüberladung und Precedence-Groups“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Operatorüberladung und Precedence-Groups“?

Überladen Sie integrierte Operatoren für Ihre Typen und definieren Sie precedence groups , damit Ausdrücke wie beabsichtigt geparst werden. Halten Sie Entwürfe minimal und vorhersehbar. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 3.

Wie lange dauert die Lektion „Operatorüberladung und Precedence-Groups“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Operatorüberladung und Precedence-Groups
  2. Subscripts und benutzerdefinierte Indizes – Vertiefung
  3. Ableitungen für Hashable/Equatable/Comparable
← Zurück zu Swift Academy