Focus mode
Struct ve Class yapısı, temelde programcının kendi veri tiplerini oluşturmasını sağlar. Bu oluşturulan yeni veri tipi birden çok temel veri tipini bünyesinde barındırabileceği gibi, bir takım metodlar ile kendine has davranış özellikleri kazanabilir.
Bu notada peki neden iki farklı anahtar kelime kullanıyoruz diye düşünebilirsiniz. Struct ve Class çok benzer gözükse de hafızada tutulma şekilleri açısından birbirinden çok farklı yapılardır.
Struct, veri tipidir ve bir kopyası üretildiğinde iki kopya birbirinden bağımsız hafıza adreslerini temsil eder. Bu da bir nesnede yapılan değişikliğin kopyası üzerinde hiç bir etkisi olmayacağı anlamına gelir.
Class ise bir referans tipidir. Bir nesneden oluşturduğunuz kopyalar hafızada aynı adresleri gösterir. Bu da bir nesnenin kopyası üstünde yapacağınız değişikliğin, nesnenin orjinali üstünde de aynı etkiye sebep olacağı anlamına gelir. Nesneye yönelimli dillerdeki pointer yapısına hakimseniz bu kısmı anlamanız daha kolay olacaktır.
Bu yapıyı basit bir anoloji üstünden anlatmak istiyorum. Bu sayede kafanızda daha net şekilleneceğine inanıyorum. Struct daha çok sizin cihazınızın yerel hafızasında yer alan bir dosyaya benzer. Bu dosyanın bir kopyasını başka birine gönderseniz ve o kişi de dosya üstünde değişiklik yapsa sizin yerel hafızanızdaki dosya bu değişiklikten etkilenmeyecektir. Çünkü bu iki dosya birbirinden tamamen bağımsız iki farklı varlıktır. Halbuki bu dosya bulutta olsa ve sizde bu buluttaki dosyaya erişim için birisine yetki verseniz, o kişinin dosya üstünde yaptığı değişiklikler dosyanın orjinalini etkileyecektir. Bu durumda ikinizin de gördüğü dosya aynıdır fakat o dosyaya iki farklı kullanıcı erişebilmektedir. İlk örnek Struct yapısına karşılık gelirken ikinci örnek Class yapısına karşılık gelir. Bu şekilde bir kullanıma başvurulmasının sebebi Nesneye Yönelimli/Nesne Tabanlı geliştirme paradigmasının temelinde yatmaktadır. Nesne, içinde bulunduğumuz fiziksel dünyadaki bir nesnenin teknolojik ortamdaki yansımasıdır. Bu nesne bir hafızaya sahiptir, kendi davranışları vardır ve bir hayat döngüsü mevcuttur. Nesne hayat döngüsü sona erene kadar hafızada verileri tutmaya ve kendine has davranışları sergilemeye devam eder. O bir veri tipinden çok bir varlıktır ve tıpkı dünyamızda olduğu gibi benzerleri olsa da eşi yoktur. Hafızada bulunduğu adres onun benzersiz kimliğidir. Tıpkı canlıların DNA'sının diğer canlılardan farklı olması gibidir.
Struct ve Class yapısının pek çok ortak yönü vardır. Bunlar;
Class yapısının sahip olduğu ama Struct yapısında olmayan bazı özellikler ise şu şekildedir;
Eğer Class yapısına ait; miras, özellik, metod, başlatıcı, sonlandırıcı vb. terimler yabancı geliyorsa aşağıda bu özelliklerin kısaca verilmiş tanımlarına göz atabilirsiniz. Eğitim boyunca yeri geldikçe bu yapılardan bahsedilecektir fakat bu kurs bir programlama dili eğitimi üstüne olmadığı için yapılar üstünden hızlıca bir özet geçilecek ama derinlemesine anlatılmayacaktır. Eğer bu konuda eksik olduğunuzu düşünüyorsanız Nesneye Yönelimli Programlama üstüne okumalar yapabilir veya eğitimler alabilirsiniz.
Aşağıda Struct ve Class yapısına ait tanım sözdizimini görebilirsiniz.
struct StructureDefinition {
// Struct'a ait özellik ve metod tanımları bu kod bloğu içinde yapılır.
}
class ClassDefinition {
// Class'a ait özellik ve metod tanımları bu kod bloğu içinde yapılır.
}
Struct ve Class isimlendirmesinde, değişken ve fonksiyon isimlendirmesinden farklı olarak dikkat etmeniz gereken kısım, büyük harfle başlıyor olmalarıdır. Struct tanımı için isimden önce struct anahtar kelimesi, Class tanımı için ise Class adından önce class anahtar kelimesi kullanmanız gerekmektedir.
Şimdi birtakım özellikleri hafızada saklayan Struct ve Class tanımı yapalım.
struct Diploma {
var title: String = "Licance"
var grade: String = "BSc"
}
class Student {
var no: Int = 001
var name: String = "John Doe"
}
Yukarıda diploma adında bir Struct tanımı yaptık. Bu Struct yapısı title ve grade olmak üzere iki özelliği hafızada tutuyor. Aynı şekilde Student adında bir Class tanımı yaptık. Bu Class yapısı da no ve name olmak üzere iki özelliği hafızada tutuyor. Şimdi bu Struct ve Class modellerinden birer örnek oluşturalım.
let licanceDiploma = Diploma()
let johnDoe = Student()
Bir özelliğe ulaşmak için <b>Nokta Notasyonu(Dot Notation)</b> kullanacağız.
print("Okulumuzun öğrencisi \(johnDoe.name), \(licanceDiploma.grade) diploması almaya hak kazanmıştır.")
// Çıktı: Okulumuz öğrencisi John Doe, BSc diploması almaya hak kazanmıştır.
Programs to Accelerate Your Progress in a Software Career
Join our 4-8 month intensive Patika+ bootcamps, start with the fundamentals and gain comprehensive knowledge to kickstart your software career!
You need to enroll in the course to be able to comment!