Menu
Coddy logo textTech

Değer Semantiği

Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 8 / 57.

Struct'lar değer türleridir: bir struct'ı başka bir değişkene atamak, onu kopyalar. Kopyayı değiştirmek, bir sınıftan farklı olarak orijinali değiştirmez:

struct Point {
    var x: Int
}

var a = Point(x: 1)
var b = a
b.x = 99
print(a.x)
print(b.x)

Çıktı:

1
99

Bir sınıfla yapılan aynı karşılaştırma farkı gösterir: her iki değişken de aynı nesneye başvurur.

class PointRef {
    var x: Int
    init(x: Int) { self.x = x }
}

let a = PointRef(x: 1)
let b = a
b.x = 99
print(a.x)

Çıktı:

99

Bir yapıyı bir işleve geçirmek aynı zamanda bir kopyasını da geçirir. Parametre sabit olduğundan, değiştirilen bir sürümü döndürmek için işlev yerel bir kopya oluşturur ve bunu döndürür:

struct Point {
    var x: Int
}

func shifted(_ p: Point, by dx: Int) -> Point {
    var copy = p
    copy.x += dx
    return copy
}

let start = Point(x: 1)
let moved = shifted(start, by: 4)
print(start.x)
print(moved.x)

Çıktı:

1
5

Yapı dizileri bağımsız değerler tutar. Bir öğeyi dizini aracılığıyla değiştirmek yalnızca o öğeyi değiştirir ve diziyi kopyalamak her değeri kopyalar:

struct Score {
    var points: Int
}

var round1 = [Score(points: 1), Score(points: 2)]
var round2 = round1
round2[0].points = 50
print(round1[0].points)
print(round2[0].points)

Çıktı:

1
50
challenge icon

Görev

Kolay

tryDiscount(_:percent:) işlevini tamamla. Bir Price yapısı alır ve indirim uygulanmış bir kopya döndürür: sentleri yüzdeye göre azaltır ve aşağı yuvarlar. Sağlanan kod, orijinal fiyatı ve indirimli fiyatı yazdırır; bu nedenle orijinal değişmeden kalmalıdır.

Sağlanan kod, sent cinsinden bir fiyatı ve her satırda bir yüzde değerini okur ve her biri için was 1000, now 900 çıktısını yazdırır.

Kodun Price.swift ve Functions.swift dosyalarına yazılmalıdır. main.swift sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
var input: [String] = []
while let line = readLine() { input.append(line) }
let original = Price(cents: Int(input[0])!)
for line in input.dropFirst() {
    let cheaper = tryDiscount(original, percent: Int(line)!)
    print("was \(original.cents), now \(cheaper.cents)")
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Swift playground