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.
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?
struct
10,000 – 1,000,000 lebih cepat dariclass
– Stack Overflow- Tidak ada mutabilitas karena tidak ada hubungan antara objek
- Struktur Non-nested / tidak bercabang
Semoga bermanfaat.