Menu
CoddyTech

Struct atau class

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

Panduan Swift adalah mulai dengan struct dan pilih class hanya saat kamu membutuhkan hal yang hanya ditawarkan class. Struct lebih sederhana: setiap variabel memiliki nilainya sendiri, jadi perubahan di satu tempat tidak pernah mengejutkan kode di tempat lain.

struct Temperature {
    var celsius: Double
}

var today = Temperature(celsius: 21)
var yesterday = today
yesterday.celsius = 18
print(today.celsius)

Output:

21.0

Pilih class saat satu object harus digunakan bersama: beberapa bagian program perlu melihat state yang sama dan terus berubah, seperti satu rekening bank yang digunakan oleh banyak layar. Class juga mendukung pewarisan, yang tidak didukung oleh struct.

class SharedLog {
    var lines: [String] = []
}

let log = SharedLog()
let moduleA = log
let moduleB = log
moduleA.lines.append("A started")
moduleB.lines.append("B started")
print(log.lines.count)

Output:

2

Struct dapat menggunakan == tanpa implementasi tambahan. Tambahkan Equatable ke deklarasi, lalu Swift membandingkan setiap property. Sebaliknya, class membandingkan identitas dengan ===:

struct Point: Equatable {
    var x: Int
    var y: Int
}

print(Point(x: 1, y: 2) == Point(x: 1, y: 2))
print(Point(x: 1, y: 2) == Point(x: 2, y: 1))

Output:

true
false

Pemeriksaan singkat: jika dua item dengan data yang sama seharusnya dianggap hal yang sama, gunakan struct (titik, harga, tanggal). Jika sebuah item memiliki identitas yang penting meskipun datanya sama dengan item lain (akun pengguna, file yang terbuka), gunakan class.

struct Money { var cents: Int }          // 500 sen tetap 500 sen
class UserAccount {                      // dua akun bisa memiliki nama yang sama
    let id: Int
    var name: String
    init(id: Int, name: String) { self.id = id; self.name = name }
}
challenge icon

Tantangan

Mudah

Point adalah struct yang seharusnya dapat dibandingkan dengan ==. Tambahkan conformance dan lengkapi countDistinct(_:), yang mengembalikan jumlah point berbeda dalam list (dua point dianggap sama jika kedua koordinatnya cocok).

Kode yang disediakan membaca satu point per baris dalam format x,y dan mencetak distinct: beserta jumlahnya.

Kodemu ditulis di Point.swift dan Functions.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

// Kode input/output yang disediakan: biarkan apa adanya
var input: [String] = []
while let line = readLine() { input.append(line) }
let points = input.map { line -> Point in
    let p = line.split(separator: ",").map { Int($0)! }
    return Point(x: p[0], y: p[1])
}
print("distinct: \(countDistinct(points))")
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