Derleyici, kaynak kodu program çalışmadan önce başka bir forma dönüştüren araç veya süreçtir. Yorumlayıcı ise programın talimatlarını çalışma sırasında okuyup işleyen yaklaşımdır. Ancak bu iki kavramı tamamen zıt kutuplar gibi düşünmek yanıltıcı olabilir; bir dil ve çalışma ortamı, derleme, ara çıktı üretme ve yorumlama adımlarını birlikte kullanabilir.
Bu nedenle asıl soru “Dil derlenen mi, yorumlanan mı?” değil, kaynak kod hangi aşamalardan geçiyor ve hangi araç tarafından çalıştırılıyor? sorusudur.
Derleyici ve yorumlayıcı arasındaki temel fark nedir?
Derleyici, yazdığınız kaynak kodu doğrudan işlemcinin anlayabileceği makine koduna veya başka bir çalıştırılabilir biçime dönüştürebilir. Bu dönüşüm tamamlanmadan programın çalıştırılması mümkün olmayabilir. Örneğin Java kaynak kodu önce bytecode adı verilen ara bir biçime çevrilir; daha sonra bu çıktı Java Virtual Machine, yani JVM tarafından çalıştırılır.
Yorumlayıcı yaklaşımda ise kaynak kodun talimatları çalışma sırasında ele alınır. Yorumlayıcı, kodu okur, ilgili işlemi gerçekleştirir ve sonraki talimata geçer. Bu açıklama özellikle başlangıç düzeyinde yararlıdır; fakat modern çalışma ortamlarında kaynak kodun önce ara bir biçime dönüştürülmesi, ardından bu ara çıktının bir çalışma ortamı tarafından işlenmesi de mümkündür.
Bu ayrımı günlük bir benzetmeyle şöyle düşünebilirsiniz:
- Derleyici: Bir metni konuşmadan önce tamamen başka bir dile çeviren çevirmen gibidir.
- Yorumlayıcı: Konuşma sırasında cümleleri sırayla açıklayan tercüman gibidir.
- Ara çıktı: Kaynak metin ile nihai çalışma biçimi arasında bulunan hazırlık çıktısıdır.
Bu bakış açısı, “Python sadece yorumlanır” veya “Java sadece derlenir” gibi kesin ifadelerden kaçınmayı sağlar. Önemli olan dilin etiketinden çok, kaynak kodun hangi dönüşümden geçtiğini ve çalışma anında hangi ortamın devreye girdiğini adım adım izlemektir. Bu düşünme alışkanlığını geliştirmek için algoritma bilgi testi üzerinden problemlerin adımlara nasıl ayrıldığını sınayabilirsiniz.
Kaynak koddan çalışma zamanına giden yol nasıl işler?

Bir programın çalışmasını anlamak için aşağıdaki düşünme şemasını kullanabilirsiniz. Her adımda “Elimde ne var, hangi araç çalışıyor ve hata çıkarsa bunu nerede görürüm?” sorularını sorun.
- Kaynak kod: Programcının yazdığı, insanların okuyabildiği metindir. Örneğin değişkenler, koşullar ve fonksiyonlar bu aşamada kaynak kod olarak bulunur. Yazım kurallarındaki bir hata burada fark edilebilir.
- Derleme veya dönüştürme: Derleyici ya da dönüştürücü kaynak kodu çalışma ortamının kullanabileceği başka bir biçime çevirir. Eksik parantez, yanlış girinti veya hatalı sözdizimi gibi sorunlar bu aşamada ortaya çıkabilir.
- Ara çıktı: Kaynak koddan farklı biçimde bulunan, sonraki çalışma adımına hazırlık sağlayan çıktıdır. Java’da kaynak kod bytecode biçimine dönüştürülür. Bytecode, doğrudan belirli bir işlemciye bağlı makine kodu yerine JVM’nin anlayacağı ara talimatlar olarak düşünülebilir.
- Çalışma zamanı: Ara çıktı veya dönüştürülmüş kod bir çalışma ortamı tarafından yürütülür. JVM, Java bytecode’unu çalıştıran ortamdır. Dosyanın bulunamaması, sıfıra bölme veya olmayan bir liste elemanına erişme gibi sorunlar bu aşamada görülebilir.
Örneğin Python’da aşağıdaki kod sözdizimi hatası üretir:
if True
print("Merhaba")
Çalıştırıldığında Python, koşul satırındaki eksik iki nokta nedeniyle benzer bir hata bildirir:
SyntaxError: expected ':'
Java’da ise kod derlenebilir, fakat çalışma sırasında hata oluşabilir:
public class Main {
public static void main(String[] args) {
int sonuc = 10 / 0;
System.out.println(sonuc);
}
}
Bu programın çalışma zamanındaki tipik çıktısı şöyledir:
Exception in thread "main" java.lang.ArithmeticException: / by zero
Dolayısıyla hatayı teşhis ederken yalnızca hata mesajına değil, hatanın akışın hangi adımında ortaya çıktığına da bakmak gerekir. Kaynak koddan çalışma zamanına giden bu zinciri algoritmik adımlara dönüştürmek, bir problemi parçalara ayırma becerisini güçlendirir; bunu geliştirmek için ücretsiz kodlama bilgisi testi kullanılabilir.
IDE'de Çalıştır düğmesine basınca hangi adımlar gerçekleşir?
IDE'deki Çalıştır düğmesi, programı tek başına sihirli biçimde başlatmaz. IDE; proje ayarlarını okur, çalıştırılacak dosyayı belirler, gerekli derleme veya dönüştürme adımını başlatır, oluşan ara çıktıyı çalışma ortamına aktarır ve sonucu çıktı ya da hata panelinde gösterir.
- Proje ayarları ve çalıştırma yapılandırması okunur.
- Başlangıç dosyası, sınıfı veya komutu belirlenir.
- Gerekli sözdizimi kontrolü, derleme ya da ara çıktı üretimi yapılır.
- Programın çalışacağı yorumlayıcı, çalışma ortamı veya sanal makine devreye girer.
- Program çalıştırılır; çıktı, hata mesajı ve varsa satır bilgisi IDE paneline aktarılır.
| aşama | Python'da nasıl düşünülür | Java'da nasıl düşünülür | öğrencinin görebileceği sonuç |
|---|---|---|---|
| Dosya seçimi | Çalıştırılacak Python dosyası ve başlangıç noktası belirlenir. | Çalıştırılacak sınıf ve main metodu belirlenir. |
Yanlış dosya seçildiyse beklenmeyen program çalışabilir. |
| Ön kontrol | Sözdizimi ve ayrıştırma kontrolleri yapılır; bazı ortamlarda ara bytecode çıktısı hazırlanabilir. | Kaynak kod, çalıştırılabilir Java bytecode çıktısına dönüştürülür. | Sözdizimi veya derleme hatası varsa program gövdesine geçilmez. |
| Çalışma ortamı | Python çalışma ortamı dosyayı işler ve talimatları yürütür. | Java sanal makinesi bytecode'u yükler ve çalıştırma sürecini yönetir. | Programın çıktısı veya çalışma zamanı hatası oluşur. |
| Sonuç gösterimi | Çıktı ve hata izi konsol panelinde görünür. | Çıktı, hata türü ve çoğu zaman çağrı yığını gösterilir. | Hatanın dosya ve satır bilgisi incelenebilir. |
Bu nedenle bir hata gördüğünüzde doğrudan kodun ortasına atlamak yerine, çalıştırma akışında tamamlanan son adımı belirleyin. Dosya seçimi tamamlanmadıysa yapılandırmayı; derleme veya sözdizimi kontrolü tamamlanmadıysa kaynak kodu; program başladıktan sonra durduysa çalışma zamanı davranışını incelemek daha doğru bir başlangıçtır.
Python ve Java örneklerinde bu ayrım nasıl düşünülmelidir?

Python ve Java'yı “biri yalnızca yorumlanır, diğeri yalnızca derlenir” şeklinde ezberlemek yanıltıcıdır. Python dosyası çalıştırılmadan önce ayrıştırılır ve uygun durumlarda ara bytecode üretimi gibi adımlardan geçebilir. Java kaynak kodu ise bytecode'a dönüştürülür; ardından çalışma ortamı bu bytecode'u yükleyip işler.
Python'da sözdizimi hatası
if True print("Merhaba")
Bu örnekte if koşulundan sonra iki nokta eksiktir. Python, programın çalışma gövdesine geçmeden önce bu yapıyı anlayamadığı için hata verir.
Beklenen hata mesajı:
SyntaxError: invalid syntax
Dosya adı, satır numarası, imlecin gösterdiği konum ve hata açıklamasının ayrıntıları kullanılan Python sürümüne ve çalıştırma biçimine göre değişebilir. Python belgelerinde Python hata ve istisna açıklamaları içinde sözdizimi hatalarının ayrıştırma aşamasında oluştuğu gösterilir.
Java'da çalışma zamanı hatası
public class Bolme {
public static void main(String[] args) {
int sonuc = 10 / 0;
System.out.println(sonuc);
}
}
Bu programın yapısı derleme aşamasından geçebilir; ancak program çalışırken tam sayıyı sıfıra bölme işlemiyle karşılaşır. Bu noktada Java, ArithmeticException üretir.
Beklenen hata mesajı:
Exception in thread "main" java.lang.ArithmeticException: / by zero
Satır numarası ve hata çıktısının çevresindeki ayrıntılar kullanılan JDK, IDE ve çalıştırma ortamına göre farklılaşabilir. Buradaki temel ayrım şudur: Python örneğinde programın anlamlandırılması tamamlanamazken Java örneğinde bytecode oluşturulmuş, fakat talimat yürütülürken geçersiz bir aritmetik durum ortaya çıkmıştır. Bu hata türlerini ayırt etmeyi sürdürmek için ücretsiz yazılım bilgisi testi ile mevcut kavramlarınızı kontrol edebilirsiniz.
Bir hata hangi aşamada oluştuğu nasıl teşhis edilir?
Bir hata mesajını anlamanın en hızlı yolu, programın hangi aşamaya kadar ilerleyebildiğini belirlemektir. Hata dosya açılmadan önce mi oluştu, kaynak kod dönüştürülürken mi ortaya çıktı, yoksa program başladıktan sonra mı gerçekleşti? Bu sorular, çözüm yolunu doğrudan değiştirir.
- Kaynak kodu kontrol edilir: Sözdizimi, eksik parça, yanlış girinti veya beklenmeyen karakter var mı?
- Ara çıktı adımı incelenir: Derleme ya da bytecode gibi bir ara biçim üretme işlemi tamamlanmış mı?
- Çalışma zamanı gözlemlenir: Program başladıktan sonra belirli bir işlem, veri veya dosya üzerinde istisna oluşmuş mu?
- Hata mesajı bağlama yerleştirilir: Mesajdaki satır, hatanın görüldüğü yer olabilir; gerçek neden birkaç satır önce bulunabilir.
Hata mesajını aşamalara ayıran kontrol listesi
- Dosya veya proje daha başlatılmadan önce mi hata oluştu?
- Mesajda “sözdizimi”, “beklenmeyen karakter”, “eksik parça” veya belirli bir satır konumu mu belirtiliyor?
- Derleme ya da ara çıktı üretme adımı tamamlanmış mı?
- Program başladıktan sonra mı bir istisna meydana geldi?
- Mesaj belirli bir işlem, veri, değişken, dosya veya bağlantı üzerinde mi duruyor?
- Hata satırı ile gerçek neden aynı yerde olmayabilir mi? Özellikle eksik parantez, tırnak veya blok işareti sonraki satırda fark edilebilir.
| oluştuğu aşama | tipik belirti | ilk kontrol |
|---|---|---|
| Sözdizimi veya kaynak kod kontrolü | Program başlamadan önce hata; satır, karakter veya eksik parça belirtilir. | Parantezleri, iki noktayı, tırnakları, girintiyi ve anahtar kelimeleri kontrol edin. |
| Derleme veya ara çıktı üretimi | Kaynak koddan çalıştırılabilir ya da ara biçim üretilemez. | Tür uyumsuzluklarını, erişim sorunlarını ve derleyici mesajının ilk satırını inceleyin. |
| Çalışma zamanı | Program başlar; belirli bir işlem sırasında istisna veya hata oluşur. | Hata veren veriyi, dosya yolunu, kullanıcı girdisini ve ilgili işlemin ön koşullarını kontrol edin. |
Sözdizimi hatası ve çalışma zamanı hatası örnekleri
Aşağıdaki Python örneğinde iki nokta eksiktir. Program, ilgili satırı geçerli bir Python komutu olarak çözemediği için çalışmaya başlayamaz:
toplam = 15
if toplam > 10
print("Limit aşıldı")
Örnek hata çıktısı şu biçimdedir:
SyntaxError: expected ':'
Burada ilk kontrol edilmesi gereken yer, if satırının sonudur. Hata mesajı başka bir satırı işaretleseydi bile eksik iki nokta veya benzer bir kaynak kod sorunu daha önce başlamış olabilir.
Java örneğinde ise kaynak kod geçerli olduğu için program başlar. Ancak sıfıra bölme işlemi çalışma sırasında gerçekleşir:
public class Main {
public static void main(String[] args) {
int sayi = 10;
int bolen = 0;
System.out.println(sayi / bolen);
}
}
Program başladıktan sonra alınabilecek hata mesajı:
Exception in thread "main" java.lang.ArithmeticException: / by zero
Bu durumda sorun sözdiziminde değil, verinin ve işlemin çalışma anındaki durumundadır. bolen değişkeninin sıfır olup olmadığı, işlemden önce kontrol edilmelidir.
Adım adım teşhis yöntemi
Teşhisi her zaman kaynak kod → ara çıktı → çalışma zamanı akışı üzerinden düşünün. Önce kaynak kod okunabilir ve kurallara uygun mu bakın. Ardından kullanılan dil ve araç zinciri bir ara çıktı üretiyor mu kontrol edin. Son olarak program başladıysa, hatanın hangi veride ve hangi işlem sırasında oluştuğunu inceleyin.
Hata mesajının en alt satırına bakmak yerine, çoğu zaman mesajın ilk bölümünü, dosya adını, satır numarasını ve hata türünü birlikte değerlendirmek daha doğrudur. Bir dosyanın bulunamaması, yanlış çalışma klasöründen; bir değişken hatası, beklenmeyen kullanıcı girdisinden; bir tür hatası ise önceki dönüşüm adımının eksikliğinden kaynaklanabilir.
Bu kavramsal akışı örnekler ve uygulamalarla pekiştirmek isteyenler, uygulamalı video yazılım eğitimleri üzerinden kaynak koddan çalışma zamanına uzanan süreci adım adım inceleyebilir.
Neden derleyici ve yorumlayıcı ayrımı kesin bir karşıtlık değildir?
“Derlenmiş dil” ve “yorumlanan dil” ifadeleri başlangıç seviyesinde yararlı birer kısaltmadır; ancak gerçek sistemler çoğu zaman bu iki kutuptan yalnızca birine sığmaz. Bir dilin nasıl çalıştığını anlamak için yalnızca dilin adına değil, araç zincirine ve çalışma ortamına bakmak gerekir.
Kaynak kod önce doğrudan makine koduna çevrilebilir, bir ara biçime dönüştürülebilir veya çalışma sırasında farklı aşamalardan geçirilebilir. Ara biçim, sanal makine ya da başka bir çalışma ortamı tarafından işlenebilir. Bazı sistemler de program çalışırken belirli bölümleri yeniden dönüştürerek daha verimli yürütmeye çalışabilir.
Bu nedenle Python için “sadece yorumlanır”, Java için “sadece derlenir” demek eksik bir açıklamadır. Python kodu çalıştırılmadan önce çeşitli ayrıştırma ve ara temsil adımlarından geçebilir. Java kaynak kodu derlenerek bir ara biçim oluşturur; bu biçim daha sonra uygun çalışma ortamında işlenir. Öğrencinin bilmesi gereken temel nokta, etiketlerden çok zincirin kendisidir.
Her program için şu dört soruyu sormak daha sağlam bir düşünme alışkanlığı kazandırır:
- Hangi kaynak kod yazıldı?
- Bu koddan hangi ara çıktı üretildi?
- Hangi çalışma ortamı bu çıktıyı işledi?
- Hata kaynak kod, ara çıktı veya çalışma zamanı aşamalarından hangisinde oluştu?
Bu sorular cevaplandığında derleyici ve yorumlayıcı farkı ezberlenecek bir karşıtlık olmaktan çıkar; programın gerçekten nasıl ilerlediğini açıklayan pratik bir modele dönüşür.
Sık Sorulan Sorular
Python gerçekten yalnızca yorumlanan bir dil midir?
Hayır. Python hakkında bu ifade başlangıç düzeyinde kullanılabilir; fakat Python kodunun çalıştırılması sırasında ayrıştırma, ara temsil ve çalışma zamanı gibi aşamalar bulunabilir. Bu yüzden “Python yorumlanır” demek yerine, kullanılan Python uygulamasının kaynak kodu hangi adımlarla işlediğini düşünmek daha doğrudur.
Java programı neden hem derlenir hem de JVM üzerinde çalışır?
Java kaynak kodu önce derlenerek doğrudan belirli bir işlemciye bağlı olmayan bir ara biçime dönüştürülür. Daha sonra bu çıktı, Java Sanal Makinesi yani JVM tarafından çalışma ortamında işlenir. Böylece derleme ve çalışma zamanı, aynı zincirin farklı aşamaları olur.
Sözdizimi hatası ile çalışma zamanı hatasını hata mesajından nasıl ayırabilirim?
Sözdizimi hatası genellikle program başlamadan önce görülür ve satır, karakter, eksik işaret veya beklenmeyen yapı hakkında bilgi verir. Çalışma zamanı hatasında ise program çoğunlukla başlar; hata belirli bir işlem, veri, dosya veya kullanıcı girdisi işlenirken ortaya çıkar.
IDE'de Çalıştır düğmesine basınca derleyici veya yorumlayıcının çalışıp çalışmadığını nasıl anlarım?
IDE’nin çıktı panelinde derleme mesajları, ara çıktı oluşturma bilgileri veya doğrudan çalışma zamanı çıktısı görülebilir. Proje derlenmeden çalıştırılamıyorsa derleyici aşaması vardır; program hemen başlıyor ve hata yürütme sırasında oluşuyorsa çalışma zamanı aşamasına bakılmalıdır. IDE’nin düğmesi tek başına tüm süreci göstermez; çıktı paneli ve proje ayarları birlikte incelenmelidir.
Derleyici ve yorumlayıcı farkını anlamanın en güvenilir yolu, her hatayı oluştuğu aşamayla ilişkilendirerek kaynak koddan çalışma zamanına kadar izlemektir.