CPP Değişkenler

Değişken Nedir?

Variables(değişkenler) değer tutmak için kullanılır. Örneğin bir sayıyı, bir karakteri, bir ismi tutmak için değişkenlere ihtiyacımız vardır. Her değişken bellekte(RAM) belli bir alan kaplar. Kaplanılan alan değişkenin tipine göre değişir. Temelde tüm veriler bellekte 0 ve 1 olarak depolanır. Farklı tiplerdeki değişkenlerin bize sağladığı bu bilginin işlenme ve anlaşılma şeklidir. Örneğin char, karakter tutan bir veri tipidir. Bu karakterler ASCII tablosuna göre tutulur. Bu tablo her karakter için bir sayı değeri belirlemiştir. Yani aslında her karakter bir sayıya karşılık gelmekte. Bellekte de aynı şekilde tutulmaktadır.

#include <iostream>
using namespace std;

int main(){
	char a = 100;
	char b = 33;

	cout << a << endl; 
	cout << b << endl;

	a = a + b;
	cout << a << endl;
}
d
!
à

Değişken Nasıl Tanımlanır?

Değişken tanımlamanın bazı yolları vardır.

#include <iostream>
using namespace std;

int main(){
	//method 1 
	int tamsayi1; //once degiskeni olusturduk
	tamsayi1 = 5; //sonra deger atadik

	//method 2 
	//degiskeni tanimlarken deger atiyoruz
	//bunun 3 farkli yolu vardir 
	int tamsayi2 = 6;  // C-benzeri initialization
	int tamsayi3(7);   // Constructor initialization
	int tamsayi4{ 8 }; // C++11 list initialization syntax


	cout << tamsayi1 << endl; //5
	cout << tamsayi2 << endl; //6
	cout << tamsayi3 << endl; //7
	cout << tamsayi4 << endl; //8
}

Birden fazla değişkeni tek bir satırda tanımlıyabiliriz

#include <iostream>
using namespace std;

int main(){
	int tamsayi1,tamsayi2 = 6, tamsayi3(7), tamsayi4{ 8 }; 
	tamsayi1 = 5;
	
	cout << tamsayi1 << endl; //5
	cout << tamsayi2 << endl; //6
	cout << tamsayi3 << endl; //7
	cout << tamsayi4 << endl; //8
}

Değişken İsmi Nasıl Olmalı

Değişkenlere isim verirken bazı kurallara uymalıyız, bu kurallar:

  • Değişken isimleri; harf, sayı, alt tire _ içerebilir
  • Değişken isimleri; harf veya alt tire _ ile başlamalıdır. (Sayı ile başlayamaz)
  • C++ tarafında kullanılan anahtar kelimeler(keywords) değişken ismi olamaz.
  • Aynı scope(kod bloğu { }) içerisinde tekrar tanımlanamaz.
  • Büyük küçük harf duyarlıdır. Yani tamsayi ile Tamsayi farklı değişkenleri ifade eder.

Bu kurallar dışında verilebilecek tavsiyeler

  • Anlamsız değişken isimleri kullanmayın
  • Kısa olsun diye kafa karıştırıcı değişken isimleri kullanmayın
  • tbmmmilletvekilisayisi yerine tbmmMilletVekiliSayisi veya tbmm_millet_vekili_sayisi gibi daha okunaklı biçimleri tercih edin

Değişken Türleri

Temel olarak 2 tür değipken tipi bulunmaktadır.

  • C++ ile gömülü olarak gelen ilkel veri türleri (primitive/fundemental/built-in data types)
  • Kullanıcının tanımlı veri türleri (user defined data types)

Biz şimdilik ilkel veri türlerini göreceğiz. İlkel veri türleri C++ içinde gömülü olarak gelir. Boyutları platformdan platforma değiştirilebilir.

Boolean

Mantıksal olarak true ve false‘ı (doğru/yanlış) ifade edebilmek bolean veri tipini kullanıyoruz. bool ile gösterilir. Örnek:

#include <iostream>
using namespace std;

int main(){
	bool yagmur_yagacak = true;

	if (yagmur_yagacak) //eger yagmur yagacaksa
		cout << "Semsiye al" << endl;
	else //eger yagmur yagmayacaksa
		cout << "Semsiye alma" << endl;
}
Semsiye al

Yukarıdaki örnekte öncelikle yagmur_yagacak değişkenine true değeri atadık. Sonra bir if-else bloğu yazarak gelen mantıksal değere göre if veyahut else bloğunu çalıştırdık. Yukarıdaki örnekte if bloğu çalıştı çünkü verdiğimiz değer true. Eğer true, yerine false yazsaydık else bloğu çalışacaktı.

Karakter

Karakterleri ifade etmek için char veri türünü kullanıyoruz. Bu veri türü ile ASCII tablosundaki karekteri temsil ediyor. Aynı zamanda bir sayı gibi de kullanabiliyoruz. Tanımlarken tek tırnak ‘ ‘ kullanıyoruz Örnek

#include <iostream>
using namespace std;

int main(){
	char karakter = 'A';
	cout << karakter << endl;
	karakter = karakter + 1;
	cout << karakter << endl;
}
A
B

Noktalı Sayılar

Tam sayılarla, noktalı sayıları temsil etmek farklı veri türleri kullanmak zorundayız. Çünkü bellekteki tutulma şekilleri farklı. Noktaları sayıları göstermek için float ve double veri türüne sahibiz. float bellekte daha az yer kaplar ve hassasiyeti(virgülden sonraki tutabileceği basamak sayısı) daha azdır. Double daha fazla yer kaplar ve float’a göre daha hassastır.

#include <iostream>
using namespace std;

int main(){
	float f{ 5.92331 };
	double d{ 3.53241 };
	cout << f << endl;
	cout << d << endl;
			
}

Tamsayılar

Tamsayıları tutmak için short, int, long long kullanabiliriz. Genelde int kullanıyoruz daha küçük sayıları tutmak için short, daha büyükleri tutmak için long long kullanıyoruz. İstersek char veri türünü de tamsayı tutmak için kullanabiliriz.

#include <iostream>
using namespace std;

int main() {
	int a = 3;
	int b = 5;

	cout << a + b << endl;
//8

}

sizeof() Operatörü

İçine konulan veri türü veya verinin bellekte kapladığı alanı byte cinsinden verir.

#include <iostream>
using namespace std;

int main() {
	char karakter = 'A';
	cout << sizeof(short) << endl;     //2
	cout << sizeof(int) << endl;       //4
	cout << sizeof(long long) << endl; //8
	cout << sizeof(karakter) << endl;  //1

}

Scope

Alan, gövde, kapsam diyebiliriz. main fonksiyonunu biliyoruz. Main fonksiyonunun belli bir sınırı var bu sınır { ile başlar ve } ile biter.

int main() {
//main fonksiyonunun scope'u 
}

Bir scope içinde başka bir scope da olabilir

int main() {
	//main fonksiyonunun scope'u 
	if (true) {
		//if scope'u 
	}

	//main fonksiyonunun scope'u 

	while (true) {
		//while scope'u
	}

	//main fonksiyonunun scope'u 
}

Bir değişken tanımladığımızda eğer scope’un dışındaysa scope’un içinde de kullanabiliriz.

int main() {

	int i = 5;
	cout << i << endl;//5

	{
		cout << i << endl;//5
	}

}

scope dışındaki değişkeni kullanmak yerine yeniden de tanımlıyabiliriz

int main() {
	int i = 5;
	cout << i << endl;//5

	{
		cout << i << endl;//5
		int i = 3;
		cout << i << endl;//3
	}
}

Global Değişkenler

Tüm scope’ların dışında programın her tarafında geçerli ve erişilebilir olan değişkenlere global değişken diyoruz. Eğer herhangi bir scope içinde ayni isimde başka bir değişken tanımlıysa ve biz scope içindeki local değişkeni değil de global değişkeni kullanmak istiyorsak :: operatörünü kullanıyoruz. Aşağıda bir örnek yapılmıştır

#include <iostream>
using namespace std;

int sayi = 5;

int main() {
	cout << sayi << endl;//5 //global degiskeni kullandik

	int sayi = 3; //local degisken tanimladik

	cout << sayi << endl;//3 //local degiskeni kullandik
	cout << ::sayi << endl;//5 //global degiskeni kullandik
}

💡 Mümkün olduğunca global değişken kullanmaktan kaçınmalıyız. Çünkü ne kadar fazla global değişken kullanırsak işlerimizi zorlaştırmış; programın karmaşıklığını o kadar artırmış oluruz.

Constants (Sabitler)

Bazı durumlarda tanımladığımız değişkenlerin değiştirilememesini isteriz. Böyle bir durumda const kullanacağız. Constantları tanımlarken değer atamısını yapıyoruz. Örnek:

#include <iostream>
using namespace std;

const double PI = 3.14159265359;

int main() {
	//PI = 3; //hata verecektir
	cout << PI << endl;
}


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *