[*] Bu blogun başlarında 'staff' diye bir değişken oluşturmuşuz fakat dalgınlığımıza geldiği için ilerleyen kısımlarda onu 'stuff' olarak değiştirmişiz. Mantık aynı; aklınız karışmasın.
Bu bölümde, 'struct' yapılarını göreceğiz. Struct yapıları bize, Python gibi dillerde bulunan class yapıları yani Nesne Yönelimli Programlama gibi bir imkan sunar. Eğer bunun ne olduğunu bilmiyorsanız sorun değil; örneklerle açıklayınca kafanıza oturacaktır ama biliyorsanız, bu blogu anlamanız daha kolay olacaktır. Hadi başlayalım.
Şimdi biz, bir şirketin çalışanları hakkında bilgileri tutan bir yazılım geliştireceğimizi düşünelim. Bu durumda, şu anki bilgilerimiz ile nasıl bir yol izleriz?

Muhtemelen ya yukarıdaki gibi yaparsınız ya da yine yukarıda gibi çok işlevsel olmayan, karışık bir kod yazarsınız. İşte bu tarz durumlar için 'struct' kavramı geliştirilmiştir. Burada biz, bir değişken tanımlamak yerine bir veri tipi yaratırız. Değişken tanımlarken 'var' anahtar kelimesini giriyorduk. Veri tipi yaratırken de 'type' anahtar kelimesini kullanırız. Hemen bakalım.

Dikkatli bakın. var stuff string tarzında değil de type stuff struct şeklinde bir yapı kurduk. Buradaki 'stuff' değeri de yeşil oldu; sadece veri tipleri yeşil renkteydi, hatırlayın. Buna göre biz, 'stuff' veri tipini başka yerlerde de kullanabiliriz, öyle değil mi?
Değişkenlerimizi de, bu yapının içerisine, aşağıdaki gibi tanımlıyoruz. Fakat burada 'var' anahtar kelimesini kullanmıyoruz. Direkt olarak değişkenin adını ve tipini belirtiyoruz.

Bu kısım için tamamsak bir de değişken tanımlayalım.

Dikkatli bakın. Aşağıda, var anahtar kelimesini kullanmaya başladık. Struct yapımızı oluşturup içerisine özellik ekledikten sonra bu özellikleri alacak olan değişkenleri tanımlamamız gerekiyor. var stuff1 stuff derken biz, "stuff1 değişkenine stuff struct'ını referans vermiş oluruz." Başka bir deyişle; "stuff1 değişkenini stuff Struct'ına bağlıyoruz." Bunu yaptığımız için aşağıda, stuff1.name şeklinde kullanımlar yapabiliyoruz. Yani stuff1, stuff'a bağlı olduğu stuff için içerisinde tutulan değişkenlere erişebiliriz. Bu yüzden bu kullanımı da sağlayabiliyoruz.
Normal değişkenlerimizi ekrana yazdıracağımız zaman direkt olarak kullanabiliyorduk. Burada ise, yine stuff1.name şeklinde yapıyoruz. Buradaki mantık; "stuff1 nesnesinden name değişkenimizi çağırmak" olarak düşünülebilir. Bakalım.

YA DA
fmt. dediğimizde fmt modülü içerisindeki fonksiyonları görebiliyor ve çağırabiliyorduk ya? İşte, burada da aynı şekilde düşünebiliriz. Burada, 'stuff' bizim modülümüz ve içerisinde 3 değişkenimiz tutuluyor. Daha sonra biz, stuff'a bağlı olan değişkenlerimizi (stuff1, stuff2 gibi) stuff1. diyerek stuff içerisindeki değişkenlere erişebiliyoruz ve bunu ekrana verebiliyoruz.
Peki, burada kendi veri tipimizi oluşturuyoruz ve bunun üzerinden baz işlemleri gerçekleştirebiliyoruz. Struct bunun neresinde? Struct'ın Türkçe karşılığı; 'yapı' şeklindedir. İşte, struct yapısı bize, kendi veri tipimizi veya modülümüzü (ne derseniz deyin) yapılandırmamıza, oluşturmamıza olanak sağlıyor. Yani biz type stuff struct derken evet, struct yapısıyla bir veri tipi oluşturuyoruz. Fakat bunu kullanırken struct veri tipini değil, oluşturduğumuz veri tipini kullanmış oluyoruz.
Burada dikkatli olmanızı istediğim bir nokta daha var. Artık Scope kavramına hakim olduğunuzu düşünüyorum. main() dışında başka bir yerde değişken veya herhangi bir şey tanımladığımız zaman bu, global oluyordu yani tüm kod sayfasınca ulaşılabilir oluyordu. İşte, struct yapısıyla veri tipi oluştururken bu tanımlama genelde, aşağıda da gördüğünüz gibi her yerden erişilebilmesi adına global alana yapılır.

Hatta isterseniz daha estetik bir görünüm sağlamak ve daha kolay hata ayıklamak için bu verileri aşağıdaki gibi gruplandırabilirsiniz; tamamen size kalmış.

Bu da size karmaşık geliyorsa ama az önceki gibi arka arkaya kod satırları da yazmak istemiyorsanız aşağıdaki gibi bir kullanım gerçekleştirebilirsiniz. Bu da bir nevi gruplandırmadır.

Artık sizin için hangisi daha uygunsa onu kullanabilirsiniz veya kendi tarzınızı da oluşturabilirsiniz.
Yayınlanma Tarihi: 2022-08-14 22:25:48
Son Düzenleme Tarihi: 2022-08-16 17:35:22