# OOP vs Fonksiyonel Programlama

Adres: https://softwaredictionary.org/tr/karsilastirma/oop-vs-functional-programming
Son güncelleme: 2026-09-30

Kısaca: Nesne yönelimli programlama veriyi ve onu değiştiren metotları nesnelerde toplar; fonksiyonel programlama ise değişmez veriyi saf fonksiyonlarla dönüştürür.

## OOP ile fonksiyonel programlama arasındaki fark nedir?

Nesne yönelimli programlama (OOP), bir programı `User` ya da `Order` gibi nesneler olarak modeller; her nesne kendi durumunu tutar ve üzerinde işlem yapan metotlar sunar. Fonksiyonel programlama (FP) ise programı, girdi alıp çıktı döndüren ve ideal olarak kendi dışındaki hiçbir şeyi değiştirmeyen fonksiyonlardan oluşan bir boru hattı olarak modeller.

Temel fark, ikisinin durumu nasıl ele aldığıdır. OOP durumu nesnelerin içinde tutar ve metotlarla değiştirir; ona kimin dokunabileceğini denetlemek için kapsüllemeyi kullanır. FP paylaşılan değişebilir durumdan kaçınır: veriyi değiştirmek yerine fonksiyonlar yeni değerler döndürür; bu da kodu test etmeyi kolaylaştırır ve paralel çalıştırmayı daha güvenli kılar.

Çoğu modern dil ikisini de destekler ve iyi kod çoğu zaman ikisini karıştırır. Bir alanın ana kavramlarını modellemek için sınıfları kullanıp bunların mantığını küçük saf fonksiyonlarla, `map`, `filter` ve değişmez veriyle yazabilirsiniz. JavaScript, Python, Kotlin, Scala ve C# bu birleşimi doğal kılar.

Sık yapılan bir yanlış, FP'nin nesne olmaması ya da OOP'nin her şeyin sınıf olması gerektiği anlamına geldiği düşüncesidir. Bunlar katı kurallar değil, tarzlardır: asıl soru durumun nerede durduğu ve nasıl değiştiğidir; her tarz farklı problemlere uygun araçlar sunar.

| Özellik | OOP | Fonksiyonel programlama |
| --- | --- | --- |
| Temel birim | Veriyi ve davranışı birleştiren nesneler | Girdileri çıktılara dönüştüren fonksiyonlar |
| Durum | Nesnelerin içinde tutulan değişebilir durum | Değişmez veri; değişiklik yerine yeni değerler |
| Yan etkiler | Metotların içinde yaygın ve beklenen | Önlenir ya da programın kenarlarına itilir |
| Kod yeniden kullanımı | Kalıtım, arayüzler ve nesne bileşimi | Yüksek dereceli fonksiyonlar ve fonksiyon bileşimi |
| Eşzamanlılık | Paylaşılan değişebilir durum kilit ya da dikkatli tasarım gerektirir | Değişmez veri, iş parçacıkları arasında doğal olarak güvenle paylaşılır |
| Test | Çoğu zaman nesne kurulumu ve mock gerekir | Saf fonksiyonlar girdiler ve beklenen çıktılarla test edilir |
| Tipik diller | Java, C#, C++, Python ve Ruby | Haskell, Elixir, Clojure, F# ve FP tarzı JavaScript |

## OOP şu durumlarda doğru seçim

- Alanınızda kendi durumu ve davranışı olan net varlıklar var.
- Arayüz bileşenleri, oyun nesneleri ya da hesaplar gibi uzun ömürlü şeyleri modelliyorsunuz.
- Ekibiniz ve framework'ünüz sınıflar etrafında kurulu.

## Fonksiyonel programlama şu durumlarda doğru seçim

- Veriyi bir dizi adımdan geçirerek dönüştürüyorsunuz.
- Kod eşzamanlı çalışıyor ve paylaşılan durum bir risk.
- Test etmesi kolay, küçük ve öngörülebilir fonksiyonlar istiyorsunuz.

## Sık sorulan sorular

**Fonksiyonel programlama, OOP'den daha mı iyi?**

Genel olarak hiçbiri diğerinden iyi değildir. FP veri dönüşümlerinde ve eşzamanlı kodda öne çıkar; OOP ise durumu ve davranışı olan varlıkları modellerken iyi uyar. Birçok kod tabanı ikisini de kullanır.

**OOP ile fonksiyonel programlama birlikte kullanılabilir mi?**

Evet. Yaygın dillerin çoğu iki tarzı da destekler; sık kullanılan bir yaklaşım, yapı için nesneleri, mantık için saf fonksiyonları kullanmaktır.

**JavaScript nesne yönelimli mi, fonksiyonel mi?**

İkisi de. JavaScript'te OOP için sınıflar ve prototipler; fonksiyonel tarz için birinci sınıf fonksiyonlar, closure'lar ve `map` ile `filter` gibi dizi metotları vardır.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
