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.0Karena 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 LovelaceSebuah 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.0Gunakan 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
}
}Tantangan
MudahLengkapi 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)
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Class dan Object
Bekerja dengan FileMendefinisikan ClassMethod dan selfInitializerClass adalah ReferensiUlasan: Kartu Perpustakaan4Enkapsulasi
Kontrol AksesHanya Bisa Dibaca dari LuarMelindungi StateInitializer yang Bisa GagalRangkuman: Rekening Bank7Polimorfisme dan Generik
PolimorfismeKonversi TipeFungsi GenerikTipe GenerikRangkuman: Kalkulator Bentuk2Struct dan Tipe Nilai
StructSemantik NilaiMethod yang Mengubah NilaiStruct atau classRangkuman, Item Inventaris11Proyek: Manajemen Perpustakaan
Buku dan AnggotaPeminjaman Buku3Properti Lebih Dalam
Properti TerhitungPengamat PropertiAnggota StatisEnum dengan MethodRangkuman: Catatan SuhuLatihan sendiri: Playground Swift