Double ve String değişkenleri tanımlamaktan sıkıldınız mı? “Struct” yapıları tam size göre! Bu derste Struct kullanımı ve bir nesneyi nasıl tanımlamamız gerektiğinden bahsedeceğiz. Hazırsanız başlayalım!
“Struct” yapısı, ortak birkaç özelliği olan nesnelere değişken özellikleri vermek için kullanılır. “Struct” yapısının kendisi, tanımlayacağınız kavramların en genel adıdır ve içindeki değişkenleri ise bu kavramların ortak özellikleridir.
struct Ad {
// özellikleri ve değişkenleri buraya tanımlayabilirsiniz
}
Örnek olarak güneş sistemimizi ve gezegenleri düşünün. Her 8 gezegeni birbirinden ayırt eden ortak özellikleri vardır. Bu güneşe olan uzaklıkları, adları ve yarıçapları olabilir. Bu gezegenleri ayırt etmek için her birine teker teker bu özellikleri vermek yerine “gezegen” diye bir struct oluşturup her gezegene bu “struct” yapısının içinde bulunan özellikleri tanımlamak daha kolaydır.
struct Gezegen {
var ad: String
var yaricap: Double
var gunesUzaklik: Double
}
Birden fazla nesne aynı özelliklere sahipse kullanılır. Bu özellikleri teker teker yazmak yerine ortak bir “struct” yapısı tanımlayıp o “struct” yapısını her nesne için kullanabilirsiniz. Bu kodunuzun okunabilirliği açısından büyük önem taşır.
Yukarıdaki örnekten yola çıkıp Marsı tanımlamak istediğinizi düşünün. Gezegen kavramı için bir struct oluşturduktan sonra Mars değişkeni oluşturup bu Gezegen adlı “struct” yapısının içinde olan özellikleri Mars’ın özelliklerine uygun olacak şekilde tanımlayabilirsiniz.
var mars = Gezegen(ad: "Mars", yaricap: 3389.5, gunesUzaklik: 224780000)
Şimdi “struct” yapılarını kullanmanızın en faydalı yanlarından birini deneyelim. Bu gezegenlerden 8 tane var. Hepsine ayrı ayrı 3 tane özellik tanımlasaydık 8 x 3'ten tam olarak 24 satır kod yazmış olacaktık. Ancak “struct” yapılarını kullanınca bu 24 satırlık kod bir anda 8 satıra iner.
var mars = Gezegen(ad: "Mars", yaricap: 3389.5, gunesUzaklik: 224780000)
var jupiter = Gezegen(ad: "Jüpiter", yaricap: 69911, gunesUzaklik: 778500000)
var dunya = Gezegen(ad: "Dünya", yaricap: 6371, gunesUzaklik: 149600000)
var merkur = Gezegen(ad: "Merkür", yaricap: 2439.7, gunesUzaklik: 57910000)
var venus = Gezegen(ad: "Venüs", yaricap: 6051.8, gunesUzaklik: 108200000)
var saturn = Gezegen(ad: "Satürn", yaricap: 58232, gunesUzaklik: 1434000000)
var uranus = Gezegen(ad: "Uranüs", yaricap: 25362, gunesUzaklik: 2871000000)
var neptun = Gezegen(ad: "Neptün", yaricap: 24622, gunesUzaklik: 4495000000)
“Struct” yapıları aynı zamanda tanımladığınız bir objenin belirli bir özelliğine ulaşmak istediğinizde işinize yarar. Mesela, Mars gezegeninin yarıçapını bilmek istiyorsunuz. Sadece bu veriyi almak için structların değişkenlere ulaşma özelliğini kullanabilirsiniz!
print(mars.yaricap)
Belirli bir özelliğin değerini “struct” yapısını kullanarak değiştirebilirsiniz.
mars.yaricap = 2398.9
“Struct” yapılarının içinde fonksiyonlar da tanımlayabilirsiniz. Örneğin Gezegen adlı “struct” yapısının içine bir tane “print” fonksiyonu tanımlayabilirsiniz.
“Struct” yapılarının içinde fonksiyon tanımlarken ve kendi özelliklerini kullanırken, “self” kodunu kullarınız. “Self”, kullanacağınız özelliklerin kendi “struct” yapısına özel olduğunu belirtir, bilgisayarınız da böyle bir özelliği nerede bulacağını anlamış olur.
struct Gezegen {
var ad: String
var yaricap: Double
var gunesUzaklik: Double
func ozelliklerYazdir() {
print("Gezegenimiz \(self.ad), yarıçapı \(self.yaricap) km,
Güneş'e uzaklığı \(self.gunesUzaklik) km.")
}
}
Gezegen adlı “struct” yapısının içinde kullanılan fonksiyonu çağırmak için değişkenlere ulaşmak için kullandığınız formu kullanabilirsiniz. Fonksiyonu Mars’a göre çağırmayı deneyin.
mars.ozellikleriYazdir()
Bu kodu çalıştırdığınızda konsolunuzda Mars’ın özelliklerini görebileceksiniz.