Menu
CoddyTech

Properti Terhitung

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 12 dari 57.

Property tersimpan menyimpan nilai. Property terhitung tidak memiliki penyimpanan: property ini menjalankan kode setiap kali dibaca dan mengembalikan nilai yang dihitung dari property lainnya:

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)

Output:

12.0
40.0

Karena nilainya dihitung ulang setiap kali dibaca, property hasil komputasi tidak akan pernah kedaluwarsa. Cara membacanya sama seperti property yang disimpan, tanpa tanda kurung:

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)

Output:

Ada Lovelace

Sebuah property komputasi juga dapat memiliki setter. set menerima nilai baru sebagai newValue dan memperbarui property yang tersimpan sebagai dasarnya:

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)

Output:

212.0
0.0

Gunakan property terhitung untuk nilai yang diturunkan dari nilai lain dan mudah dihitung. Gunakan method jika pengerjaannya memerlukan argumen atau mahal:

struct Order {
    var items: [Int]
    var total: Int { items.reduce(0, +) }           // property: tidak menerima argumen
    func total(withTax rate: Int) -> Int {           // method: menerima argumen
        total + total * rate / 100
    }
}
challenge icon

Tantangan

Mudah

Lengkapi struct Circle dengan property tersimpan radius dan tiga property komputasi hanya-baca: diameter (dua kali radius), area (π r², menggunakan Double.pi) dan label, yang mengembalikan r=2.0 d=4.0 a=12.57 dengan area dibulatkan menjadi dua angka desimal menggunakan String(format: "%.2f", area).

Code yang disediakan membaca satu radius per baris, membuat Circle, lalu mencetak label. Setelah itu, code menggandakan radius lingkaran terakhir dan mencetak label-nya lagi, jadi nilainya harus mengikuti radius.

Tulis kodemu di Circle.swift. main.swift berisi code input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

import Foundation

// Kode input/output yang disediakan: biarkan apa adanya
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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Swift