Menu
CoddyTech

Semantik Nilai

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

Struct adalah tipe nilai: menetapkan struct ke variabel lain akan menyalinnya. Jika kamu mengubah salinannya, nilai aslinya tetap sama, tidak seperti class:

struct Point {
    var x: Int
}

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

Output:

1
99

Perbandingan yang sama dengan class menunjukkan perbedaannya: kedua variabel merujuk ke satu object.

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)

Output:

99

Meneruskan struct ke fungsi juga meneruskan salinannya. Parameter tersebut bersifat konstan, jadi untuk mengembalikan versi yang telah diubah, fungsi membuat salinan lokal lalu mengembalikannya:

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)

Output:

1
5

array berisi struct menyimpan nilai yang independen. Mengubah elemen melalui indeksnya hanya mengubah elemen tersebut, dan menyalin array akan menyalin setiap nilai:

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)

Output:

1
50
challenge icon

Tantangan

Mudah

Lengkapi tryDiscount(_:percent:). Fungsi ini menerima struct Price dan mengembalikan salinan yang harganya sudah didiskon: jumlah cents dikurangi sesuai persentase, dibulatkan ke bawah. Kode yang disediakan mencetak harga asli dan harga setelah diskon, jadi harga asli harus tetap tidak berubah.

Kode yang disediakan membaca harga dalam cents dan satu persentase di setiap baris, lalu mencetak was 1000, now 900 untuk masing-masing.

Tulis kodemu di Price.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 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 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