Menu
Coddy logo textTech

Mantık Hatası (Logic Error) Nedir?

Mantık hatası (logic error), bir programın akıl yürütmesindeki, çökmeden ya da hiçbir hata mesajı göstermeden yanlış sonuç üretmesine yol açan bir yanlıştır. Kod geçerlidir ve her satır çalışır, ama programcının istediği şeyi yapmaz.

Yazan Kevin Spektor, Kurucu ortak ve CTO

Güncellendi: 24 Eylül 2026

Üç sınav notunun, 80, 90 ve 100'ün, ortalaması 90'dır. Bu program tek bir şikayet olmadan çalışır ve başka bir şey yazdırır:

Average: 203.33333333333334

Python satırın söylediğini tam olarak yaptı. Bölme toplamadan önce yapılır, bu yüzden yalnızca son not 3'e bölündü ve sonuç 80 + 90 + 33,33 oldu. Programcı (scores[0] + scores[1] + scores[2]) / 3 demek istemişti. Parantezleri ekle, program Average: 90.0 yazdırır.

Neden hata mesajı çıkmaz

Bilgisayar kodun doğru olup olmadığını değil, geçerli olup olmadığını kontrol eder. Ayrıştırıcı dilbilgisini kontrol eder ve bir sözdizimi hatasını yakalar. Runtime her işlemi kontrol eder ve sıfıra bölme gibi bir çalışma zamanı hatasını yakalar. Üç sayıyı toplayıp birini 3'e bölmek geçerli bir dilbilgisi ve yasal bir işlemdir, bu yüzden iki kontrol de geçer.

Programın bir ortalama hesaplaması gerektiğini yalnızca onu yazan kişi bilir. Bu niyet kodun hiçbir yerinde yoktur, dolayısıyla hiçbir araç sonucu onunla karşılaştıramaz. Mantık hatası, bilgisayara yapmasını söylediğin şey ile yapmasını istediğin şey arasındaki farktır.

Mantık hatalarının yaygın nedenleri

Mantık hatalarının çoğu kısa bir kalıp listesinden gelir.

  • Bir eksik ya da bir fazla (off-by-one) hataları. Bir döngü bir kez fazla ya da eksik çalışır. range(1, 5) 1, 2, 3 ve 4 üretir, çünkü bitiş değeri dahil değildir. Bkz. yineleme.
  • İşlem önceliği. a + b / 2 yalnızca b'yi böler, yukarıdaki ortalamada olduğu gibi.
  • Yanlış karşılaştırma. <= gereken yerde <, ya da or gereken yerde and. Koşullar boolean ifadelerdir ve tek bir yanlış operatör bazı girdiler için sonucu tersine çevirir.
  • Yanlış sırada koşullar. Bir if ve elif zincirinde ilk doğru koşul kazanır; bu yüzden başa konan geniş bir test, altındaki daha dar testleri gizler.
  • Yanlış değişken. Bir döngü içinde total güncelleyip subtotal yazdırmak.
  • Sayılar hakkında varsayımlar. Python, Java ve JavaScript'te 0.1 + 0.2 == 0.3 sonucu False olur, çünkü kayan noktalı sayılar yaklaşık değerlerdir. 7 // 2 3.5 değil, 3'tür.

İşte koşul sırası hatası. 95 alan bir öğrenci A almalı:

D
D
F

95, 60'tan büyük ya da eşit olduğu için ilk dal kazanır ve elif satırına hiç ulaşılmaz. En yüksek eşiği başa koy, her sonuç doğru olur.

Programlamada hata türleri

Programlama hataları genellikle ne zaman ortaya çıktıklarına ve onları neyin bildirdiğine göre üç türe ayrılır.

Sözdizimi hatasıÇalışma zamanı hatasıMantık hatası
Ne zaman ortaya çıkarProgram çalışmadan önceProgram çalışırkenProgram çalışırken ya da hiç fark edilmez
Onu ne tespit ederAyrıştırıcı ya da derleyiciRuntime ya da işletim sistemiBir insan ya da bir test
Program çalışır mı?HayırHatalı satıra kadarEvet, sonuna kadar
Hata mesajıEvet, satır numarasıylaEvet, traceback ileYok
Python örneğiİki noktası olmayan if x > 310 / 0Ortalama için a + b / 2
Nasıl bulunurMesajı okuTraceback'i okuÇıktıyı bilinen bir cevapla karşılaştır

Bazı ders kitapları daha fazla tür sayar ve çoğu bu üçünün içine sığar. Java derleyicisinin reddettiği incompatible types: String cannot be converted to int gibi bir tip hatası, sözdizimi hatası gibi derleme zamanında bulunur ve bazı kitaplar buna anlamsal hata (semantic error) der. Bağlayıcı (linker) hatası, bir C ya da C++ programı derlenirken son adımda, bir fonksiyon tanımlanmış ama kodu hiçbir yerde bulunamamışsa olur. Sıfıra bölme, belleğin tükenmesi ya da olmayan bir dosyayı açma gibi aritmetik, kaynak ve dosya hatalarının hepsi çalışma zamanı hatasıdır. "Anlamsal hata" terimi bazı kurslarda mantık hatasının başka bir adı olarak da kullanılır; bu yüzden bir ders kitabının hangi anlamı kullandığını kontrol et.

Mantık hatası nasıl bulunur

  1. Cevabını zaten bildiğin bir durumla test et. Küçük bir girdi için doğru sonucu elle hesapla, sonra karşılaştır. Üç notu kontrol etmek üç bin notu kontrol etmekten kolaydır.
  2. Aradaki değerleri yazdır. score değerini ve seçilen dalı ya da her turda döngü sayacını yazdırmak, gerçeğin planından ayrıldığı adımı tam olarak gösterir.
  3. Debugger ile adım adım ilerle. Bir breakpoint koyup her seferinde bir satır çalıştırmak, kodu düzenlemeden aynı işi yapar.
  4. Sınırları test et. 0, 1, en büyük değer, boş bir liste ve eşiğin tam kendisini dene (not örneğinde 60 ve 90).
  5. Kodu sesli anlat. Her satırı başka birine ya da bir lastik ördeğe anlatmak, satırın ne yaptığını varsaydığın şeyi değil, gerçekte ne yaptığını söylemeye zorlar.

Bir assert, bildiğin bir cevabı otomatik bir kontrole dönüştürür. Koşul doğruysa hiçbir şey yapmaz, yanlışsa programı durdurur:

Traceback (most recent call last):
  File "main.py", line 10, in <module>
    assert grade(95) == "A", "95 should be an A"
           ^^^^^^^^^^^^^^^^
AssertionError: 95 should be an A

Başarısız bir test, sessiz bir mantık hatasını satır numarası olan yüksek sesli bir hataya dönüştürür. Birim testinin (unit testing) bütün fikri budur.

Diğer dillerde mantık hataları

Kalıplar her yerde aynıdır ama her dilin kendi tuzakları vardır. JavaScript'te "5" + 3 string "53" olur, "5" - 3 ise sayı 2 olur; bu yüzden bir formdan metin olarak okunan bir değer hiçbir hata vermeden yanlış toplanabilir. C'de if (x = 5), x değişkenine 5 atar ve her zaman doğrudur. Clang bunun için varsayılan olarak uyarı verir (using the result of an assignment as a condition without parentheses) ama kod yine derlenir ve çalışır; bu yüzden derleyici uyarılarını hatalar kadar ciddiye al.

Sırada ne var

Her türün nasıl bildirildiğini görmek için bu sayfayı sözdizimi hatası ve çalışma zamanı hatası sayfalarıyla karşılaştır. Bir eksik ya da bir fazla hataları döngülerde yaşar; bu yüzden yineleme sayfası ve Python'daki for döngüleri rehberi iyi bir sonraki okuma olur. Gerçek alıştırmalarda yanlış sonuçları bulmayı pratik etmek için Python kursunu dene.

Sıkça Sorulan Sorular

Sözdizimi hatası ile mantık hatası arasındaki fark nedir?
Sözdizimi hatası dilin dilbilgisini bozar; program çalışmadan reddedilir ve satır numaralı bir mesaj alırsın. Mantık hatası dilbilgisine tamamen uyar ve sonuna kadar çalışır, ama sonuç yanlıştır ve hiçbir mesaj yoktur. Sözdizimi hatasını mesajı okuyarak, mantık hatasını çıktıyı test ederek bulursun.
Python'da mantık hatası nedir?
Traceback vermeden çalışan ama yanlış cevap veren Python kodudur. Tipik örnekler: 1'den 5'e dahil istediğinde range(1, 5), (a + b) / 2 istediğinde a + b / 2 ve yanlış sırada kontrol edilen if dalları. Python bunları tespit edemez, çünkü ne demek istediğini bilmesinin bir yolu yoktur.
Programlamadaki 5 hata türü nedir?
Sık kullanılan beşli liste şöyledir: sözdizimi hataları, anlamsal (tip) hatalar, bağlayıcı (linker) hataları, çalışma zamanı hataları ve mantık hataları. İlk üçü program derlenirken bulunur, çalışma zamanı hataları program çalışırken ortaya çıkar, mantık hataları ise yalnızca yanlış sonuç olarak görünür. Birçok kurs yalnızca üçünü öğretir: sözdizimi, çalışma zamanı ve mantık.
Mantık hatası bir bug mıdır?
Evet. Bug, bir programın amaçlanandan farklı davranmasına yol açan her türlü kusurdur ve mantık hataları en yaygın türüdür. Çökmeler ve hata mesajları da bug'dır ama kendilerini belli ederler; mantık hatasını ise bir insanın ya da bir testin fark etmesi gerekir.
Mantık hataları neden zor bulunur?
Çünkü hiçbir şey onları göstermez. Satır numarası da mesaj da yoktur ve yanlış sonuç makul görünebilir; örneğin üç sınav notu için kimsenin tekrar kontrol etmediği 203 ortalaması. Çıktıyı zaten bildiğin bir cevapla karşılaştırarak bulunurlar; sonucu bilinen testlerin önemli olmasının nedeni budur.
Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA