Swift Struct vs Class ? Nasıl kullanılır ?
Merhaba arkadaşlar bugün programlamada sık sık kullandığımız 2 yapı olan struct ve class’ lardan bahsedeceğim. İlk önce bunların kısa bir tanımını yaparak başlayalım.
Struct ve class’ lar , programımızın yapıtaşları olan genel amaçlı, esnek yapılardır. Struct ve Class’ımızın fonksiyonelliğini properties ve method ekleyerek artırabilirsiniz.(Properties ve method’ların syntax’ları constant, variables ve fonksiyon ile aynıdır.)
Diğer dillerin aksine Swift’te özel Class ve Structları ayrı interface yada dosyalarda oluşturmamıza gerek yoktur.(Struct veya Class ‘ ı tek sayfada tanımlayabilirsiniz.)
★ Struct Ve Class’ların Özellikleri
Swift’ de struct ve classların ortak birçok özelliği vardır.
● Değer saklamak için properties tanımlanabilmesi,
● Fonksiyonelliği artırmak için method tanımlanabilmesi,
● Başlangıç durumlarını(initial state) belirlemek için initializers kullanılması,
● Fonksiyonelliklerini aktarmak için extend edilebilir olma,
● Bir tür de fonksiyonellik sağlamak için protokollere uyabilmeleri.
Class’lar structların sahip olamadığı ek özelliklere sahiptir.
● Inheritance : Bir sınıfın karakteristiğini başka sınıfa kalıtabilir. (Devredebilir)
● Type Casting : Çalışma zamanında bir sınıf örneğinin türünü kontrol etmenizi ve yorumlasınız sağlar.
● Reference Counting : Sınıf örneğinden birden fazla olmasına izin verir.
NOT : Sınıfların ek özellikleri güzeldir. Fakat her güzelliğin bir bedeli vardır buda kodun karmaşıklığının artmasıdır.
Genel olarak structur’ ı tercih etmek daha mantıklıdır. Class’ı uygun ve gerekli olduğu olduğunda kullanmamız gereklidir.
Bunun anlamı aslında tanımladığımız çoğu özel data type’ın struct ve enum olacağı demektir.
→ Definition Syntax
Struct ve class tanımlamaları aşağıdaki gibidir.
NOT : Yeni struct veya class tanımladığımızda yeni bir Swift type'ı tanımlamış olursunuz. Ve bildiğimiz gibi type tanımlanırken kelimenin baş harfi büyük harf olur.
Aşağıda struct ve class tanımlamayı görelim.
Yukarda adı Cozunurluk olan bir struct tanımladık. Bu struct 2 adet değer tutan değişkene sahip(genislik ve yukseklik). Bu2 özellik başlangıç değeri 0 atandığından TYPE INFERRED ile tiplerinin int olduğu zaten belirlendi. Bir de VideoModu adında bir class tanımladık. Bu class’da 3 tane değişkene sahip. Bir tanesi Cozunurluk sınıfından oluşturulan bir instance . Bir tanesi de isim adında bir property. Bu property optional olduğu için default olarak içine nil atanmıştır. (Optional’lerden sonraki yazılarda bahsedeceğiz.)
→ Property’ lere Erişim
Özelliklere . syntax’ ı ile erişebiliriz.
NOT : Structlar initializer'ı otomatik üretir. let vga = Cozunurluk(genislik:640 , yukseklik:480)
★ Struct’lar Value Type’ dır
Value type olan bir tür demek , bir değişkene yada sabite atandığında veya fonksiyona parametre olarak geçirildiğinde kopyalanan tür demektir.
Aslında bütün Swift basic type’ları value type’ dır.(integers,floating,booleans,strings,arrays ve dictionary) ve arka planda struct gibi implement edilir.
Yani value type’ da struct’ dan oluşturduğumuz bir instance’ ı kod içinde atama yaptığımızda veya bir fonksiyona parametre olarak geçirdiğimizde kopyalanır.
En sonunda size bunu anlamanızda çok yardımcı olacak bir görsel ekleyerek bitirelim.
★ Class’lar Reference Type’dır
Value type’ların tersine , reference type’lar bir değişkene veya sabite atandığında kopyalanmazlar. Yada bir fonksiyona parametre olarak geçtiklerinde kopyalamak erine mevcut aynı referans kullanılır.
Örneğine bakalım .
örnek de gördüğümüz gibi aslında ornek2 nesnesinin kareHizini değiştirdik fakat ornek nesnesinin de değeri değişti.Bunun sebebi ikisinin de aynı referansı gösteren 2 farklı isim de nesne olmasıdır.Yani birinde bir özelliği değiştirirseniz hepsinde değişir.
Bunuda daha rahat anlamak için şu görsele bakalım.
Resimden de görüldüğü gibi iki farklı referans bellekte aynı noktayı kullandığı için birinde yapılan değişiklik diğerini de etkiliyor.
Bu yazımızında sonuna gelmiş bulunmaktayız. Data detaylı incelemek isteyenler buradan dokümantasyona ulaşabilir.
Okuduğunuz için teşekkür ederim yorumlarınızla bize destek olabilir veya kişisel hesaplarımdan bana ulaşabilirsiniz. Keyifli kodlamalar 🙂
2 Yorumlar
Çok faydalı bir yazı olmuş teşekkürler kutluhan
Güzel yorumun için çok teşekkür ederim 🙂