Bir C++ Programının Yapısı ve İfadeler [C++ Bible]

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üye
Katılım
12 Nis 2021
Mesajlar
8
Tepki puanı
8
Yaş
108
5 HİZMET YILI
Selam yoldaşlar, ben FackCapital (BKZ: Anti Kapitalist). Henüz daha yeni yola koyulmuş olduğum bu C++ yolculuğunda C++ Bible dokümantasyonunun ilk bölümü ile karşınızdayım. Bu bölümde C++ programlama dilinde anlaşılması önemli olan konulara kısa bir dalış yapacağız. Kısa bir dalış yapacağız diyorum çünkü ilk bölümde değineceğimiz konular oldukça derin ve yeni başlayanlar için anlaşılması güç olabilecek konular. Bu bölümün temel gayesi size bir C++ programının nasıl inşa edildiğini net ve anlaşılır bir biçimde sunabilmek. Eğer bu bölümü müstahak bir şekilde idrak etmeyi başarabilirseniz sizde bölümün sonunda kendi küçük C++ programınızı yazabilecek kıvama erişeceksiniz. Gelecek bölümlerde, şuan yüzeysel olarak değindiğimiz konulara daha ayrıntılı bir şekilde değineceğiz.

Programlamada İfade (Statement) Nedir?
Bir bilgisayar programı, bir dizi ifadeden oluşur. İfadeler her zaman için ( ; ) ile biter ve programda göründükleri sıraya göre yürütülürler. Ancak ifadeler her zaman doğrusal bir sıraya göre hareket etmek zorunda değildir. İşlem sırasında program bir ifadeyi birden fazla kez çalıştırabilir veya yarıda kesebilir. Bu tarz durumlar için C++ programlama dilinde hangi ifadenin ne durumda çalıştırılıp, ne durumda son bulmasını yönetebileceğiniz Flow Control Statements (Akış Kontrol İfadeleri) bulunur. Bu tarz ifadelere selection statements, iteration statements ve jump statements örnek olarak gösterilebilir. Flow Control Statements (Akış Kontrol İfadeleri) kısaca bizim programda yer alan ifadeler dizisinin çalışma sırasını yönetmemize olanak sağlar. Eğer ifadelerin ne olduğunu hala tam anlamadıysanız isterseniz günlük hayattan bir örnek verelim. Günlük hayatta birine fikrimizi beyan etmek istediğimizde, fikirlerinizi karşı tarafa cümlelerin gücünden yararlanarak iletirsiniz (Rastgele kelimelerden değil). Bizde C++ ile yazdığımız bir programda programımızın bir şey yapmasını istediğimizde ifadelerden yararlanırız. Az öncede dediğimiz gibi C++ programlama dilinde birçok ifade çeşidi bulunmaktadır. İsterseniz şimdi bu ifadelere bir göz atalım.

C++:
int main()
{
    int n = 1;                        // declaration statement
    n = n + 1;                        // expression statement
    std::cout << "n = " << n << '\n'; // expression statement
    return 0;                         // return statement
}

Flow Control Statements (Akış Kontrol İfadeleri)

C++ programlama dilinde ifadeler yukarıdan aşağıya doğru doğrusal bir şekilde çalıştırılır. Ancak yapacağımız işe göre bazen belli bir ifadeyi tekrarlamak veya atlamak isteyebiliriz. Bu tarz durumlarda imdadımıza Flow Control Statements (Akış Kontrol İfadeleri) koşuyor. C++ dilinde akış kontrol ifadeleri temel olarak aşağıdaki gibidir.
  • Iteration Statements
  • Selection Statements
  • Jump Statements

Iteration Statements (Loops)

C++ programlama dilinde belli bir ifade bloğunu defalarca veya belli bir koşulu sağlayıncaya dek tekrarlamak istediğimiz zaman Iteration Statements (Yineleme İfadeleri) yararlanırız. Yineleme ifadeleri genel olarak Döngü İfadeleri (Loop Statements) veya Döngüler (Loops) olarak da bilinir. Aynı zamanda Iteration Statements kodun uzunluğunu kısaltmak, bellekten tasarruf etmek içinde kullanılır. C++ programlama dili temel olarak 3 tür yineleme ifadesini destekler.
  • For Statement
  • While Statement
  • Do-While Statement

Selection Statements (If ve Else)

C++ programlama dilinde Selection Statements (Koşul İfadeleri), ifadeleri belli bir koşula göre çalıştırmamıza olanak sağlar. Koşul İfadeleri (Selection Statements) aynı zamanda Karar Verme İfadeleri (Decision Making Statements) olarak da anılır.
  • If Statement
  • If-Else Statement

Jump Statements

Jump Statements program içinde belirli konumlara atlamalar yaparak programın akışını değiştirmenize olanak sağlar.
  • Break Statement
  • Continue Statement
  • Goto Statement

Other Statements (Diğer İfadeler)

C++ programlama dilinde Flow Control Statements (Akış Kontrol İfadeleri) dışında daha birçok temel ifade de bulunur.

Assignment Statements (Atama İfadeleri)

Değişkenlere atama ifadeleri kullanılarak değer verilir. Örneğin:
C++:
int Cevap;
Cevap = (2 + 2) * 4; // Assignment Statement

Compound Statements (Blocks)

Compound Statements (Bileşik İfadeler) küme ayraçları içine alınmış bir ifade dizisidir. Compound Statements (Bileşik İfadeler) genel olarak Iteration Statements (Yineleme İfadeleri) ve Selection Statements (Koşul İfadeleri) için kullanılır. Compound Statements, bazen Blocks olarak da adlandırılabilir.

Evet, daha birçok ifade çeşidi var ancak bu giriş yazısında fazla göz korkutmamak için sadece şu anlık işimize yarayabileceklere değindik. Eğer şuan bu yazılanlardan pek fazla bir şey anlamadıysanız da sıkıntı değil ilerleyen bölümlerde tüm ifadelere daha ayrıntılı bir biçimde giriş yapacağız, bu giriş dersinde gayemiz sadece ifadelerin ne kadar önemli olduğunu ve ne çeşit ifadelerle karşılaşabileceğimizi anlamak.

Fonksiyonlar ve Main Fonksiyonu
Fonksiyonlar belli bir işlevi gerçekleştirmek için yazılan kod bloklarıdır. Bir diğer deyişle fonksiyonlar ifadelerin tek bir çatı altında toplandığı koleksiyonlardır desek yanlış olmaz. Fonksiyonların programlamada yeri büyüktür. Fonksiyon yapıları sayesinde kodunuzu daha anlaşılabilir ve daha optimize bir şekilde yazabilirsiniz. C++ derslerinde ilerledikçe sizde kendi fonksiyonlarınızı oluşturabilir ve istediğiniz gibi kullanabilirsiniz (Buna ileriki bölümlerde tekrardan değineceğiz). Ayrıca önemli bir noktaya değinelim, C++ ile yazılmış her programda muhakkak "main" fonksiyonu olmak zorundadır. Program çalıştırıldığında, main fonksiyonu içindeki ifadeler sırayla yürütülür. Programlar genel olarak main fonksiyonu içinde ki son ifade çalıştırılınca durur ancak yine de bazı durumlarda programlar daha erken durabilir. Fonksiyonlar genellikle belli bir görevi veya işi halletmek için yazılır. Neyse fonksiyonların dediğimiz gibi programlamada yeri büyük bu yüzden bu konuya şimdi üstün körü dalıp heyecanı kaçırmak istemiyorum ileriki bölümlerde buna daha ayrıntılı değineceğiz.

Standard Libraries (Standart Kütüphaneler)
C++ programlama dilinde birçok hazır kütüphane bulunur. Ayrıca hazır kütüphanelerin yanı sıra bizde istersek kendi kütüphanemizi oluşturabiliriz. Programlamada kütüphanelerin yeri büyüktür, bu yüzden konuyu ciddiye almanızı tavsiye ederim. Az önce C++ programlama dilinde birçok hazır kütüphane olduğundan bahsetmiştik isterseniz bu kütüphaneleri örneklendirelim. <iostream>, <filesystem>, <math>, <iterator>, <complex>, <fstream> ve daha birçok kütüphane... Bu kütüphaneler birçok yerde işimize yarayacak. Bölümün devamında <iostream> kütüphanesi sayesinde konsola çıktı vereceğiz.

Bir C++ programı daha birçok yapıdan oluşur yorum satırları, anahtar kelimeler, operatörler, I/O vb. ancak bunlara tekrar tekrar dediğim gibi ileriki bölümlerde değineceğiz şimdilik sabırsızlanmamanızı tavsiye ediyorum, bu yolda hep beraber küçük adımlarla ilerleyeceğiz acele işe Zeus karışır malum.

Selâmün Aleyküm Dünya!
Fonksiyonların ve ifadelerin ne olduğunu kısaca anladığımıza göre artık yavaştan programlamaya girebiliriz diye düşünüyorum.
C++:
#include <iostream>

int main()
{
   std::cout << "Selâmün Aleyküm!";
   return 0;
}
  • Satır 1: İlk satırda Preprocessor Directive (Önişlemci Direktifi) olarak adlandırılan özel bir yönerge var. Önişlemci direktifleri ifadeler ile karıştırılmamalıdır, önişlemci direktifleri ifade olmadığı için sonuna ( ; ) konmaz. Önişlemci direktifleri daha program derlenmeden önce meydana gelirler. İlk satırdaki bu önişlemci direktifi sayesinde iostream kütüphanesine tam teşekküllü bir şekilde erişebiliyoruz (iostream kütüphanesi cin, cout, cerr ve clog nesnelerini içerir). Bu kütüphane sayesinde kullanıcıdan girdi alıp konsola yazı yazdırabiliyoruz. 5.Satırdaki ifadeyi kullanabilmek içinde bu satıra ihtiyacımız var. Eğer ilk satırı silip programı çalıştırmayı denersek 5.satırda hata ile karşılaşacağız.
  • Satır 2: İkinci satır gördüğünüz üzere boş, boş satırlar derleyici tarafından görünmez. Programlamada boş satırları kullanırız çünkü bu sayede yazdığımız kod daha okunabilir bir hale gelir.
  • Satır 3: Üçüncü satırda main adında bir fonksiyon tanımlıyoruz. Her C++ programında main fonksiyonu olmak zorundadır aksi takdirde hata ile karşılaşırsınız.
  • Satır 4/7: Dördüncü ve yedinci satırdaki süslü parantezler hangi ifadelerin main fonksiyonunun bir parçası olduğunu belirler. 4.Satırdaki açılış parantezi le 7.satırdaki kapanış parantezi arasındaki yazılan her ifade main fonksiyonunun bir parçası olarak kabul edilir. Bu kısma Function Body (Fonksiyon Gövdesi) denir.
  • Satır 5: main Fonksiyonundaki ilk ifadedir ve programı çalıştırdığınızda ilk bu ifade yürütülür. std::cout (Karakter çıkışı anlamına gelir. BKZ: Character Output) ve << operatörü çıktı alınacak konsola harf veya sayı göndermemizi sağlar. Bizse bu yazdığımız kodda konsola "Selâmün Aleyküm!" yazısını çıktı olarak gönderiyoruz.
  • Satır 6: Son satırda return ifadesini görmektesiniz. Return ifadesi programımız çalışmayı bitirdiğinde, program başarılı bir şekilde çalıştırıldı mı, çalıştırılmadı mı bunu belirtmek için sisteme bir değer gönderir. Bizim yazdığımız return ifadesi 0 değerini döndürüyor, buda sistemde her şeyin düzgün gittiği anlamına gelir. Ayrıca return ifadesi her zaman bir değer döndürmek zorunda değildir, void bir fonksiyon için hiç bir değer döndürmesine gerek yoktur.
Bu kodu kendiniz çalıştırmayı denerseniz alacağınız sonuç:
"Selâmün Aleyküm!"

Syntax (Sözdizimi) ve Syntax Hataları
Türkçede veya İngilizcede cümle kurarken kafamıza göre cümle kurmayız değil mi? Okulda bize gösterilen grammar kuralları doğrultusunda cümleler kurarız. Bir dilde cümlelerin cümlenin nasıl oluşturulduğunu yöneten kurallara sözdizimi denir. Programlama dillerinin de kendine ait Syntax (Sözdizimi) kuralları vardır. Eğer Syntax (Sözdizimi) kurallarından birine dahi ihlal etseniz, derleyici size Syntax Error verir. O zaman bir deneme yapalım isterseniz. C++ programlama dilinde her ifadenin ( ; ) ile bitmesi gerektiğini söylemiştik, bakalım 5.satırdan bu noktalı virgülü çıkartırsak nasıl bir hata alacağız?
C++:
#include <iostream>

int main()
{
   std::cout << "Selâmün Aleyküm!"
   return 0;
}
Kısa bir not: Hata yapmaktan asla çekinmeyin çünkü daha henüz yeni programlamaya başladıysanız hayal edemeyeceğiniz kadar hata yapacaksınız.

Visual Studio gördüğünüz üzere şu hatayı verdi:
c:\vcprojects\selamunaleykum.cpp(6): error C2143: syntax error : missing ';' before 'return'
Kullandığınız derleyici hatayı farklı ifadelerle size iletebilir. 6.Satırda bir söz dizimi hatası olduğundan bahsediyor, derleyici return ifadesinden önce noktalı virgül bekliyordu ancak bulamadı. Derleyiciler hatanın hangi satırda olduğunu size bildirseler de kimi zaman bir önceki satıra da bakmanızda yarar vardır. Bizim yaptığımız hata 5.satırda olmasına rağmen, 6.satırda bir hata olduğundan bahsediyor. Çünkü derleyici 6.satıra gelene kadar hatayı fark edemedi. Program yazarken büyük ihtimalle sık sık sözdizimi hataları ile karşılaşacaksınız ama merak etmeyin günümüzde ki derleyiciler bu konuda kendilerini oldukça geliştirdiler. Derleyiciler sayesinde hatanızı kolayca tespit edip düzeltebilirsiniz.

Bir C++ Programının Yapısı
Bir C++ programının genel yapısı aşağıda ki gibidir:
  • Documentation Section
  • Link Section
  • Definition Section
  • Global Declaration Section
  • Function Definition Section
  • Main Function

Documentation Section

Bu bölümde programcı, yazdığı programın spesifik olarak amacını ve çalışma mantığını not eder. Documentation Section (Dokümantasyon Bölümü) yazmak zorunda değilsiniz, bu tamamen sizin tercihinize bağlı. Bu oldukça önemsiz bir bölüm gibi gözüksede kodun genel çalışma prensibini anlamak için oldukça önemli bir bölümdür. Yazdığımız kodu ilk defa okuyan bir kişi bu bölüm sayesinde kodumuzu daha rahat bir şekilde anlayabilir.

Link Section

Linking Section iki bölümden oluşur:
  • Header Files
  • Namespaces
Header Files
C++ programlama dili programlamayı kolaylaştırmak için önceden tanımlanmış fonksiyonlar içeren çok sayıda kütüphaneye sahiptir. Bu Header Dosyaları hem kodun işlevselliğini arttırır hem de uzun kodlarda oluşan karmaşıklığın engellenmesine destek olur. Programlamada uzun uzun yazılan kodlar sonucu oluşan karmaşıklığı çözmek için kodlar farklı dosyalara bölünür. İstersek bizde kendi Header dosyamızı yazabiliriz. Genellikle Header dosyaları şunları içerir:
  • Function Definitions (Fonksiyon Tanımlamaları)
  • Data Type Definitions (Veri Tipi Tanımlamaları)
  • Macros (Makrolar)
Yazdığımız Header dosyalarını Preprocessor Directive (Önişlemci Direktifleri) ile programımıza aktarırız. Az öncede bahsetmiştik zaten isterseniz tekrar bir hatırlayalım önişlemci direktiflerinin ne olduğunu. Önişlemci direktifleri Header dosyalarının derleyici programı derlemeden önce işlenmesi gerektiğini bildirir. Bu Header dosyası ister önceden tanımlanmış olsun ister kullanıcı tarafından sonradan yazılmış olsun #include komutu ile Header dosyalarını kodumuza dahil edebiliriz.

Namespaces
Az önce programlamada her bir fonksiyonun Function Body (Fonksiyon Gövdesi) olduğundan bahsetmiştik. Bu Function Body çoğu zaman Scope (Kapsam) olarak anılır. Örneğin main fonksiyonu içinde tanımladığımız int veri tipinde bir değişkene sadece main fonksiyonunun Scope kısmı içinden erişebiliriz ve bu şekilde oluşturulan değişkenlere Local Variables (Yerel Değişkenler) adı verilir. Ancak bazen programlarımızda bir değişkene birden fazla yerde ihtiyacımız olabilir bu tarz durumlarda ise Global Variables (Global Değişkenler) oluştururuz. Global değişkenleri, fonksiyonları, nesneleri tek bir çatı altında Namespaces (Ad Alanları) sayesinde toplarız. Herhangi bir programcı kendi başına Namespace (Ad Alanı) oluşturabilir.

Definition Section

Bu bölümde programda kullanılacak değişkenler, sınıflar vb. tanımlanır veya bildirilir. Ayrıca bu bölümde Primitive Data Types (İlkel Veri Türleri) yararlanarak herkes kendi değişkenini oluşturabilir.

Global Declaration Section

Bu bölümde tanımlanan değişkenler Global Variables (Global Değişkenler) olarak geçer ve programın her yerinde kullanılabilir.

Function Declaration Section

Bu bölümde ihtiyacımız olan fonksiyonları tanımlarız.

Main Function

Main fonksiyonu derleyiciye programın çalıştırılmaya nereden başlaması gerektiğini söyler. Programda yürütülecek tüm ifadeler bu kısımda yazılır. Yani bir diğer deyişle derleyici main fonksiyonunun küme parantezleri içerisinde yer alan tüm ifadeleri çalıştırır. main Fonksiyonunda ki tüm ifadeler yürütüldüğünde programın çalışması sona erer.

Evet, artık yavaş yavaş bölümün sonuna geldik. Umarım sizin için bilgilendirici bir bölüm olmuştur. Bazı yerlerde kafanız karıştıysa sorun değil ileriki bölümlerde zaten bunları açıklayacağız, şimdilik sadece C++ programlama dilinde bu tarz yapıların olduğunu bilmeniz önemli. Hazırlarken açıkçası çok yoruldum ama değdiğini söyleyebilirim. Şahsen ben yazarken çok keyif aldım, umarım sizde okurken benle aynı keyfi almışsınızdır.
 
Yaşayan efsane
Banlı Üye
Katılım
26 Mar 2018
Mesajlar
1,360
Çözümler
37
Tepki puanı
402
Ödüller
7
8 HİZMET YILI
Güzel konu :gelisirabi::gelisirabi:
 
gelenler için gidenler gidenler için gelenlerdir
Seçkin Üye
Katılım
12 Şub 2021
Mesajlar
304
Tepki puanı
14
Ödüller
3
Yaş
38
5 HİZMET YILI
Sağol reis bilgilendirme için eline koluna sağlık
 
sudo apt get install NEWLIFE
Süper Üye
Katılım
11 Nis 2018
Mesajlar
609
Çözümler
9
Tepki puanı
66
Ödüller
9
Sosyal
8 HİZMET YILI
güzel ve eğlenceli bir paylaşım olmuş özellikle "Selâmün Aleyküm Dünya!" dediğin yerde bittim :D iyi forumlar
 
Onaylı Üye
Katılım
7 Ağu 2020
Mesajlar
50
Tepki puanı
2
Ödüller
2
Yaş
29
5 HİZMET YILI
Faydalı bir konu teşekkürler eline sağlık
 
Seçkin Üye
Katılım
5 Eki 2017
Mesajlar
309
Çözümler
2
Tepki puanı
41
Ödüller
7
8 HİZMET YILI
Emeğine sağlık dostum, ilgilisi ve meraklısı için çok faydalı bir konu olacağını düşünüyorum
 
da best
Banlı Üye
Katılım
19 Kas 2017
Mesajlar
1,562
Çözümler
61
Tepki puanı
269
8 HİZMET YILI
Emeğine sağlık kral bilgi için teşekkürler
 
⇆  ◁  ❚❚  ▷  ↻
Süper Üye
Katılım
23 Şub 2017
Mesajlar
739
Çözümler
7
Tepki puanı
50
Ödüller
7
9 HİZMET YILI
forumda gördüğüm en faydalı konulardan biri eline sağlık
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst