goto komutu, Arduino programlamada (ve genel olarak C/C++ gibi dillerde) bir programın akışını belirli bir etikete (label) yönlendirmek için kullanılan bir atlama komutudur. goto komutu, programın yürütme sırasını, kodun başka bir yerinde tanımlanmış bir etikete (label) anında taşır. Etiket, bir isimle ve iki nokta üst üste (:) ile tanımlanır. Ancak baştan belirtmek gerekir ki, goto komutu genellikle kötü programlama pratiği olarak kabul edilir ve mümkün olduğunca kullanılmaması tavsiye edilir.
// ... bazı kodlar ...
goto etiketAdi; // Program akışı buraya geldiğinde etiketAdi'na atlar
// ... bu kısım atlanacak ...
etiketAdi: // Burası bir etiket
// etiketAdi'na atlandığında çalışacak kod
Yukarıdaki örnekte, goto etiketAdi; komutu çalıştığında, program normal akışını durdurur ve doğrudan etiketAdi: ile tanımlanmış satıra atlar. Araya yazılan tüm kodlar atlanmış olur. Program etiketAdi: ile tanımlanmış satırdan itibaren devam eder.
Neden Genellikle Kaçınılması Gereken Bir Komuttur?
goto komutunun yaygın olarak eleştirilmesinin ve "kötü programlama pratiği" olarak görülmesinin birkaç önemli nedeni vardır:
Okunabilirlik ve Anlaşılırlık Azalır (Spaghetti Kodu) : goto kullanımı, programın akışını takip etmeyi son derece zorlaştırır. Programın kodu "spaghetti kodu" gibi iç içe geçmiş ve karmaşık hale gelebilir, bu da başkalarının (veya gelecekte kendinizin) kodu anlamasını neredeyse imkansız kılar.
Hata Ayıklamayı Zorlaştırır : Programın beklenmedik yerlere atlaması, hataları bulmayı ve düzeltmeyi çok daha güç hale getirir. Hata ayıklarken hangi kod yolunun izlendiğini anlamak zordur.
Yapısal Programlamanın İhlali : Modern programlama prensipleri, kodun mantıksal ve öngörülebilir bir akışa sahip olmasını teşvik eder (sıralama, koşullu dallanma (if-else, switch-case), döngüler (for, while)). goto bu yapısal akışı bozar.
Kaynak Sızıntıları : goto ile bir kod bloğundan atlarken, o blok içinde ayrılmış kaynaklar (örneğin bellek, dosya tanımlayıcıları) düzgün bir şekilde serbest bırakılamayabilir, bu da bellek sızıntılarına veya diğer kaynak sorunlarına yol açabilir.
Daha İyi Alternatifler Mevcut : Neredeyse goto ile yapılabilecek her şey, if/else, switch-case, for, while döngüleri ve fonksiyonlar kullanılarak daha temiz ve yapısal bir şekilde yapılabilir.
Ne Zaman Kullanılabilir (Nadiren)?
Çok nadir durumlarda, özellikle iç içe geçmiş döngülerden hızlıca çıkmak gibi belirli senaryolarda goto kullanımı düşünülebilir, ancak bu bile genellikle daha zarif yollarla (örneğin, bir bayrak değişkeni kullanma veya döngüyü bir fonksiyona sarıp return kullanma) yapılabilir.
Örnek Program Kodları:
int i;
void setup()
{
Serial.begin(9600);
for(i=0; i<10; i++)
{
Serial.print("i= "); Serial.println(i);
delay(500);
if(i==5)
{
goto devam;
}
}
devam:
Serial.print("i= "); Serial.print(i); Serial.println(" olduğu için döngüden çıkıldı.");
}
void loop()
{
}
________________________________________________________________________________________________________________________________________________________
0 comments:
Yorum Gönder