Kural
Goto kullanımından kaçının.
Goto ifadesi, kodun takip edilmesini ve
sürdürülmesini zorlaştıran yapılandırılmamış bir akış kontrolü oluşturur.
Desteklenen diller: 45+Giriş
goto kod içindeki rastgele noktalara doğrudan atlayarak doğal yürütme akışını bozar. Bu durum, state'i, hata yönetimini ve performansını mantıksal olarak değerlendirmeyi oldukça zorlaştırır. Goto içeren kodların bakımı, ufak hataların (subtle bugs) ve istenmeyen davranışların riskini artırır. Yapılandırılmış alternatifler ise öngörülebilir, okunabilir ve sürdürülebilir kod üretir.
Neden önemli?
Güvenlik etkileri: Yapılandırılmamış atlamalar, doğrulama veya yetkilendirme kontrollerini atlayarak potansiyel olarak hassas işlemleri açığa çıkarabilir.
Performans etkisi: Karmaşık goto zincirleri, profilleme ve optimizasyonu zorlaştırarak verimsiz yürütme yolları riskini artırır.
Kod sürdürülebilirliği: goto, yeniden düzenlenmesi (refactor) veya güvenli bir şekilde genişletilmesi zor olan spaghetti benzeri bir kontrol akışı yaratır.
Saldırı yüzeyi: Uygunsuz atlamalar, güvenli olmayan kod yollarını istemeden açığa çıkarabilir veya güvenlik açısından kritik bölümleri atlayabilir.
Kod örnekleri
❌ Kural dışı:
<?php
for ($i = 0; $i < 10; $i++) {
if ($i == 3) {
goto end;
}
echo "$i\n";
}
end:
echo "Jumped out!";
?>
Neden yanlış?: Goto ifadeleri yapılandırılmamış döngüler oluşturarak akışı anlamayı veya ek mantığı güvenli bir şekilde eklemeyi zorlaştırır.
✅ Kurallara uygun:
<?php
for ($i = 0; $i < 10; $i++) {
if ($i == 3) {
break;
}
echo "$i\n";
}
echo "Jumped out!";
?>
Neden önemli?: For döngüsü kullanmak, kontrol akışını açık, öngörülebilir ve sürdürülebilir kılarken aynı davranışı korur.
❌ Kural dışı:
function process(items) {
for (const item of items) {
if (!item) {
console.error('Invalid item detected');
return false;
}
}
return true;
}Neden yanlış?: Goto atlamaları hata yolunu ve normal yürütmeyi anlaşılmaz hale getirerek takip etmeyi veya genişletmeyi zorlaştırır.
✅ Kurallara uygun:
function process(items) {
for (const item of items) {
if (!item) {
console.error('Invalid item detected');
return false;
}
}
return true;
}Neden önemli?: Yapılandırılmış döngüler ve erken return'ler (early returns) mantığı netleştirir, hata yönetimini açık hale getirir ve bakımı kolaylaştırır.
Sonuç
Yapılandırılmış, okunabilir ve güvenli bir kod tabanı sürdürmek için goto kullanımından kaçının. Öngörülebilir bir kontrol akışı için döngüler, fonksiyonlar ve erken return'ler kullanın. Bu yaklaşım bakım maliyetini düşürür, gizli hataları önler ve güvenli yürütme yolları sağlar.

