0Pricing
Swift Academy · Ders

Mutating ve self Yeniden Ataması

Bir mutating yöntemi içinden self'in tamamını değiştirin.

Mutating ve self Yeniden Ataması, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Örneği Yeniden Atama

mutating bir yöntemin içinde self öğesine yepyeni bir değer atayarak örneğin tamamını değiştirebilirsiniz.

struct Point {
    var x = 0
    var y = 0
    mutating func reset() {
        self = Point(x: 0, y: 0)
    }
}
var p = Point(x: 3, y: 4)
p.reset()
print(p.x, p.y)

Örnek Neden Yeniden Atanır

Yeni durumu, alanları tek tek düzenlemek yerine yeni bir örnek olarak ifade etmek daha kolaysa self öğesini yeniden atamak kullanışlıdır.

struct Vector {
    var dx: Int
    var dy: Int
    mutating func negate() {
        self = Vector(dx: -dx, dy: -dy)
    }
}
var v = Vector(dx: 2, dy: -3)
v.negate()
print(v.dx, v.dy)

Numaralandırmalarda Örneği Yeniden Atama

Numaralandırmalarda durum değiştirme, self öğesine yeni bir durum atanarak yapılır.

enum State {
    case idle, running, done
    mutating func advance() {
        switch self {
        case .idle: self = .running
        case .running: self = .done
        case .done: self = .done
        }
    }
}
var s = State.idle
s.advance()
s.advance()
print(s)

Alan Değişikliklerine Eşdeğer

self = Point(x: 1, y: 1) ataması, x ve y değerlerini ayrı ayrı ayarlamaya eşdeğerdir; yalnızca daha kısadır.

struct Point {
    var x = 0
    var y = 0
    mutating func setBoth(_ n: Int) {
        self = Point(x: n, y: n)
    }
}
var p = Point()
p.setBoth(7)
print(p.x, p.y)

Önceki Örnekten Okuma

Yeniden atama yapmadan önce yeni örneği mevcut örnekten hesaplayabilirsiniz.

struct Counter {
    var value: Int
    mutating func doubled() {
        self = Counter(value: value * 2)
    }
}
var c = Counter(value: 5)
c.doubled()
print(c.value)

Oluşturucu Tarzı Dönüşüm

Örneği yeniden atamak, bir yöntemin eksiksiz bir dönüşümü tek adımda ifade etmesini sağlar.

struct Temperature {
    var celsius: Double
    mutating func toRounded() {
        self = Temperature(celsius: celsius.rounded())
    }
}
var t = Temperature(celsius: 21.7)
t.toRounded()
print(t.celsius)

Yalnızca Değişiklik Yapan Yöntemlerde

self öğesine yalnızca mutating olarak işaretlenmiş bir yöntemin içinde atama yapabilirsiniz. Normal bir yöntem bunu yapamaz.

struct Flag {
    var on = false
    mutating func turnOn() {
        self = Flag(on: true)
    }
}
var f = Flag()
f.turnOn()
print(f.on)

Mantıkla Birleştirme

Dallanabilir ve yalnızca bazı durumlarda self öğesini yeniden atayabilirsiniz.

struct Score {
    var points: Int
    mutating func clamp() {
        if points > 100 {
            self = Score(points: 100)
        }
    }
}
var s = Score(points: 150)
s.clamp()
print(s.points)

Numaralandırma Değiştirme Deseni

İki durumlu bir numaralandırmayı değiştirmek, örneği yeniden atamanın klasik bir örneğidir.

enum Switch {
    case off, on
    mutating func flip() {
        self = (self == .off) ? .on : .off
    }
}
var sw = Switch.off
sw.flip()
print(sw)

Diğer Kopyaları Etkilemez

self öğesini yeniden atamak yalnızca bu örneği değiştirir. Değerin diğer kopyaları olduğu gibi kalır.

struct Box { var n: Int; mutating func zero() { self = Box(n: 0) } }
var a = Box(n: 5)
var b = a
a.zero()
print(a.n, b.n)

Anlaşılır Niyet

Dönüşümü açıkça ifade ettiğinde örneği yeniden atamayı, yalnızca tek bir özellik değiştiğinde ise alanları düzenlemeyi kullanın.

struct Pair {
    var a: Int
    var b: Int
    mutating func swapValues() {
        self = Pair(a: b, b: a)
    }
}
var p = Pair(a: 1, b: 2)
p.swapValues()
print(p.a, p.b)

Kısa Sınama

Örneği yeniden atamayı sınayın.

Özet

mutating bir yöntemin içinde self öğesine yepyeni bir değer atayarak örneği değiştirebilirsiniz. Bu yaklaşım, eksiksiz dönüşümler için kısadır ve numaralandırmaların durum değiştirme biçimidir. Yalnızca bu örneği etkiler; diğer kopyaları etkilemez.

enum T { case a, b; mutating func go() { self = .b } }
var t = T.a
t.go()
print(t)

Sıkça Sorulan Sorular

“Mutating ve self Yeniden Ataması” dersi ücretsiz mi?

Evet — “Mutating ve self Yeniden Ataması” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Mutating ve self Yeniden Ataması” dersinde ne öğreneceğim?

Bir mutating yöntemi içinden self'in tamamını değiştirin. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Mutating ve self Yeniden Ataması” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Değer Türleri ve Değişmezlik
  2. mutating Anahtar Sözcüğü
  3. Mutating ve self Yeniden Ataması
  4. Değiştirmeyen Alternatifler
← Swift Academy Sayfasına Dön