Menu
Coddy logo textTech

Hesaplanan Özellikler

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

Saklanan özellik bir değer tutar. Hesaplanan özellik depolama alanına sahip değildir: her okunduğunda kodu çalıştırır ve diğer özelliklerden hesaplanan bir değer döndürür:

struct Rectangle {
    var width: Double
    var height: Double

    var area: Double {
        width * height
    }
}

var r = Rectangle(width: 3, height: 4)
print(r.area)
r.width = 10
print(r.area)

Çıktı:

12.0
40.0

Değer her okumada yeniden hesaplandığından, hesaplanmış bir özellik hiçbir zaman güncelliğini yitiremez. Parantez olmadan, saklanan bir özellik gibi okunur:

struct Person {
    var first: String
    var last: String

    var fullName: String {
        "\(first) \(last)"
    }
}

var p = Person(first: "Ada", last: "Byron")
p.last = "Lovelace"
print(p.fullName)

Çıktı:

Ada Lovelace

Hesaplanan bir özelliğin setter'ı da olabilir. set, yeni değeri newValue olarak alır ve dayandığı depolanan özellikleri günceller:

struct Temperature {
    var celsius: Double

    var fahrenheit: Double {
        get { celsius * 9 / 5 + 32 }
        set { celsius = (newValue - 32) * 5 / 9 }
    }
}

var t = Temperature(celsius: 100)
print(t.fahrenheit)
t.fahrenheit = 32
print(t.celsius)

Çıktı:

212.0
0.0

Diğerlerinden türeyen ve hesaplanması kolay olan bir değer için hesaplanan özellik kullanın. İşlem argüman alıyorsa veya maliyetliyse metot kullanın:

struct Order {
    var items: [Int]
    var total: Int { items.reduce(0, +) }           // özellik: argüman yok
    func total(withTax rate: Int) -> Int {           // metot: bir argüman alır
        total + total * rate / 100
    }
}
challenge icon

Görev

Kolay

Circle yapısını, depolanan radius özelliği ve salt okunur üç hesaplanmış özellikle tamamla: diameter (yarıçapın iki katı), area (Double.pi kullanılarak π r²) ve alanı String(format: "%.2f", area) kullanarak iki ondalık basamağa yuvarlanmış şekilde r=2.0 d=4.0 a=12.57 döndüren label.

Sağlanan kod her satırdan bir yarıçap okur, bir Circle oluşturur ve label değerini yazdırır. Ardından son dairenin yarıçapını iki katına çıkarır ve label değerini tekrar yazdırır; bu nedenle değerler yarıçapı takip etmelidir.

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

Kendin dene

import Foundation

// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
var input: [String] = []
while let line = readLine() { input.append(line) }
var last = Circle(radius: 0)
for line in input {
    last = Circle(radius: Double(line)!)
    print(last.label)
}
last.radius *= 2
print(last.label)
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