Class dan Struct


Dalam artikel ini terdapat 2 tujuan. Pertama, Kamu akan mempelajari dasar dari perbedaan antara class dan struct dengan memahami apa itu tipe reference dan tipe value. Kedua, Kamu akan menemukan mengapa struct tidak dapat diinherit.

Class

Untuk menunjukkan perbedaan antara class dan struct, pertama buatlah sebuah class HumanClass yang memiliki property name.

class HumanClass {
  var name: String
  init(name: String) {
    self.name = name
  }
}

Buat Instance

var humanClassObject = HumanClass(name: "Panjul")
humanClassObject.name // "Panjul"

Buat instance lain yang meng-copy humanClassObject

let newHumanClassObject = humanClassObject

Ubah value properti name dari newHumanClassObject menjadi “Faishal”

humanClassObject.name = "Faishal"
newHumanClassObject.name // "Faishal"

properti name dari newHumanClassObject ikut berubah menjadi “Faishal”

Struct

Sekarang mari kita cari tahu apakah perilaku yang sama terjadi dengan objek yang dibuat dengan struct

struct HumanStruct {
  var name: String
  init(name: String) {
    self.name = name
  }
}

Buat Instance

Buat instance structObject dan instance newStructObject yang meng-copy dari structObject

var structObject = HumanStruct(name: "Panjul")
let newStructObject = structObject

Ubah value dari properti name dari structObject menjadi “Faishal”.

structObject.name = "Faishal"
newStructObject.name // "Panjul"

Perubahan pada properti name dari structObject tidak berpengaruh pada newStructObject.name, begitupun sebaliknya.

Perbedaan antara tipe value (struct) dan tipe reference (class)

Untuk class, ketika kamu membuat sebuah instance yang “meng-copy”, instance baru tersebut men-share objeknya dengan instance yang originalnya.

let newHumanClassObject = humanClassObject // share

Untuk struct, ketika kamu membuat sebuah instance yang “meng-copy”, instance yang baru membuat salinan identik dari objek, tetapi tidak men-share.

let newStructObject = structObject // copy-paste

Mutablity

Karena perbedaan mendasar, ada perbedaan yang menarik ketika membuat instance dengan let.

Mutability pada Class

class FadilClass {
  var name = "fadil"
}

// Create Instance
let fadilClass = FadilClass()
fadilClass.name = "Fadielse"
fadilClass.name // "Fadielse"

let newFadilClass = fadilClass

newFadilClass.name = "Fadielse the Developer"
fadilClass.name // "Fadielse the Developer"

Meskipun instance fadilClass telah dibuat dengan let, properti itu telah dimutasi. Itu dimungkinkan karena instance tidak memiliki objek. Sebagai gantinya, ia memiliki referensi ke objek FadilClass di cloud / RAM.

No Mutability pada Structs

struct FadilStruct {
  var name = "Fadil"
}

let fadilStruct = FadilStruct()
fadilStruct.name

fadilStruct.name = "Fadielse"
// Error: Cannot assign to property: 'fadilStruct' is a 'let' constant

Dengan struct, ketika sebuah instance dibuat dengan konstanta let, itu tidak mungkin untuk mengubah propertinya karena instance memiliki salinannya sendiri dan melindungi dari campur tangan siapa pun dengan instance itu sendiri.

Kapan menggunakan Struct/Tipe Value?

  • struct10,000 – 1,000,000 lebih cepat dari class – Stack Overflow
  • Tidak ada mutabilitas karena tidak ada hubungan antara objek
  • Struktur Non-nested / tidak bercabang

Semoga bermanfaat.

0 0 votes
Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments

0
Would love your thoughts, please comment.x
()
x