C++ Go To Komutu

3 ay önce , Okuma süresi 2 dakika.

Programlama dillerinde kullanılan ve dilin içerisindeki akışın bir başka noktaya yönlendirilmesini sağlayan komutlardır. Yapısal programlama dillerinde (Structured programming languages) bu tip atlama komutlarının kullanılması yasaktır.
C++ Go To Komutu

Ancak programlama dilleri, programcıya tanıdıkları esneklikten dolayı gitme komutlarını desteklerler. Goto kullanımı çoğu zaman kötü programcılıkla karıştırılır ki; çoğu zaman da öyledir aslında. Her goto kullandığınızda koda bir daha bakın, başka bir yol olmadığından emin olmak için. Ancak bazı ender durumlarda bir sorunun ancak goto ile çözüldüğünü görebilirsiniz, ama yine de dikkatli olun.

goto, çalışabilmek için etiketlere ihtiyaç duyar. Etiketler, vereceğiniz herhangi bir isme sahip olabilir. Etiket oluşturmak için bütün yapmanız gereken; etiket adını belirleyip,sonuna iki nokta üst üste eklemek ( : ) ve programın herhangi bir yerine bunu yazmaktır. goto deyimi kullanarak bu etiketleri çağırırsanız, etiketin altında bulunan kodlardan devam edilir.    goto ve etiketlere dair genel yapıyı, akış diyagramıyla birlikte aşağıda bulabilirsiniz:

goto Akış Diyagramı 

goto Yapısı:

label_name: 
	.
	.
if( kosul ) {
	goto label_name
}
	.
	.
	.

 

NOT: goto deyimi tek başına da kullanılabilir. Fakat mantıksal bir sınama olmadan, goto yapısını kullanmanız, sonsuz döngüye neden olacaktır.

Şimdi goto ifadesiyle basit bir döngü örneği oluşturalım.ekrana 10 defa "Merhaba Dünya" yazdıralım:

Örnek 1 :

#include
int main()
{
	int i = 0;
	// baslangic_noktasi adinda bir etiket koyuyoruz.
	// i degiskeni 10 degerine ulasmadigi surece, 
	// program buraya donecektir. 
	baslangic_noktasi:
	printf( "Merhaba Dünyan" );
	// i degerini arttiriyoruz.
	i++;
	// i degeri kontrol ediliyor. Sayet 10'dan kucukse, 
	// en basa donuyor.
	if( i<10 ) goto baslangic_noktasi;
	
	return 0;
}

Program derlendiğinde aşağıdaki sonucu verecektir.

 

İstediğiniz sayıda etiket koyup, goto kullanarak, programın herhangi bir noktasına ulaşabilirsiniz. Programınız, etiket altında kalan kısımdan itibaren çalışır. goto yapısıyla gelen esneklik, ilk bakışta oldukça güzel görünüyor. Ancak goto için birçok kaynak, "ya hiç kullanmayın ya da olabildiğince az kullanın" demektedir.

Okunup, anlaşılması zor ve üzerinde çalışılması güç bir koddan, herkesin uzak durması gerekir. İngilizce'de, karman çorman koda, "spagetti kod" adı verilmiştir. goto deyimi, kodunuzun spagetti koda dönüşmesine neden olur. Çünkü program akışının takibini zorlaştırıp, kodun okunabilirliğini azaltır. Diliyorsanız, goto deyimini kullanabilirsiniz. Ama zorunlu kalmadıkça kaçınmak en iyisi...

Örnek 2 : 
 

// C / C ++ programının bir sayının olup olmadığını kontrol etmesi
// goto deyimini kullanıyor veya kullanmıyor
#include  
using namespace std; 

// eşit olup olmadığını kontrol etme işlevi
void checkEvenOrNot(int num) 
{ 
	if (num % 2 == 0) 
		goto even; // even’a atla
	else
		goto odd; // odd’a atla

even: 
	cout << num << "cift sayi"; 
	return; // ciftse dön
odd: 
	cout << num << "tek sayi "; 
} 

// Yukarıdaki fonksiyonu test etmek için sürücü programı
int main() 
{ 
	int num = 26; 
	checkEvenOrNot(num); 
	return 0; 
}

Program derlendiğinde aşağıdaki sonucu verecektir.



CheckEvenOrNot işlevinde ‘even:’ işleminden sonra return ifadesine dikkat edin. Program, etikete çift ile atladıktan sonra: program her kod parçasını çalıştırır. Bu yüzden eğer sayı eşitse geri dönmek önemlidir. Aksi takdirde, tek sayılı etiket sonrasındaki kod da sonrasındaki gibi çalıştırılır.

Örnek 3 : 

// C / C ++ program numaraları yazdırmak için
// goto deyimini kullanarak 1-10 arası
#include  
using namespace std; 

// 1'den 10'a kadar sayıları basmak için işlev
void printNumbers() 
{ 
	int n = 1; 
label: 
	cout << n << " "; 
	n++; 
	if (n <= 10) 
		goto label; 
} 

// Yukarıdaki fonksiyonu test etmek için sürücü programı
int main() 
{ 
	printNumbers(); 
	return 0; 
}

Program derlendiğinde aşağıdaki sonucu verecektir;



C++ ile daha fazla makale paylaşımlarım için C++ etiketini takipte kalın.
Herkese kolay gelsin....

 

#Yazılım #c++