Onur Dayıbaşı

CV
none

Imperative ile Declerative Programlama Arasındaki Farklar?

Imperative Türkçede emir, buyruk, zorunluluk anlamına geliyor. Declerative ise bildiren, açıklayan anlamındadır. Yabancılar ise imperative işlemi nasıl yapacağını anlattığın, declerative ise ne yapacağını anlattığın programlama şekli olarak tanımlıyorlar.

Nasıl ile Ne bu kadar farklı programlama paradigmaları nasıl ortaya çıkarabilir diye düşünebilirsiniz. Ama işleri oldukça değiştiriyor. Örneğin bir çizim programı tasarlayalım.

Imperative Yöntem

1// Diktörgen Çizme
2kalemiSuPozisyonaGötür()
3kalemiBastır()
4kalemiSuPozisyonaSürükle()
5kalemiSuPosizyondaDurdur()
6kalemiSuPozisyonaSürükle()
7kalemiSuPosizyondaDurdur()
8kalemiSuPozisyonaSürükle()
9kalemiSuPozisyonaDurdur()
10kalemiSuPozisyonaSürükle()
11kalemiSuPozisyonaDurdur()
12kalemiKaldır()

İmperative yöntemde açıklayıcı emirlerle işlemi detaylı bir şekilde gerçekleştiririz.

Declarative Yöntem

1diktorgen(ciz)

Declarative yöntemde sadece yapacağınız şeyi anlatırsınız. Tabi bu soyutlama arka planda diktörgen fonksiyonu mantığını bu fonksiyonda çiz fonksiyon mantığını buda arka planda kalemi işletilme mantığını sizden soyutlar. Ama mathematikteki f(g(x)) fonksiyonlar ile kodu geliştirmenizi sağlar.

Bu iki yöntem farklı programlama paradigmalarının oluşmasına neden olmuştur.

  • implementation/gerçekleştirim detaylarının anlaşılmasının çok zor olduğu bir DSL(Domain Spesific Language) ile gerçekleştirimi yönetme/soyutlama ihtiyacı olan programlamalarda Declarative Yaklaşımı tercih etmelisiniz.

Database Processing: (SQL) sizi veritabanının bir çok gerçekleştirim detayından kurtarır. bu üst seviye Query Dili sayesinde istediğiniz gibi veritabanını kontrol edebilirsiniz. Sizin için alttaki detaylardan kurtan bir standarttır. Bu gerçekleştirimi Oracle, MySQL, MSSQL, PostgreSQL, Aurora vs.. kimin yapacağı ve nasıl yaptığı sizi ilgilendirmez.

1select * from students where score>80

HTML: Web sayfası oluşturmanız için size bir markup dili verir. Bunu tarayıcıların nasıl render edeceği sizi ilgilendirmez. Bu markup dili sizin tanımlarınızdan DOM, CSS, JS birleştirerek Web sayfasını renderler ve kullanıcı etkileşimlerini handle edecek kodları ve styling kodlarını yükler. Bunun için alttaki detaylar ile uğraşmanız gerekmez. Üst seviye declerative tanımları bilmeniz yeterli

1<html>
2 <head></head>
3 <body>
4 <h1>Declerative Programlama</h1>
5 <p>Lorem ....</p>
6 <body>
7</html>

Regex: Str içerisinde bir takım pattern/örüntüler ile arama yapacaksınız. Bunu kod ile yapmaya çalışsanız bir çok fonksiyon yazmanız lazım ve çok performanslı gerçekleştiremeyebilirsiniz. Regex declerative dili sayesinde bu işi çok basit bir şekilde yapabilirsiniz ama ne yapacağını söylersiniz arka planı regex motoru halleder.

1function escapeRegExp(str) {
2 var regex = /$!(.*?)!$/g;
3 return str.replace(regex, “”);
4}

Aynı örnekleri React JSX yapısı, Fonksiyonel Programlama içinde söyleyebiliriz. Hepsinde de compleks altyapı gerçekleştirimi sizden saklayan daha üst bir Domain Dili ve bunun altında bu dilin belirttiklerini çalıştıran bir Engine/Motor vb.. olduğunu görürsünüz. Bu dilleri öğrenmesi zordur ama öğrendikten sonra daha az hataya sebep olurlar çünkü kullanıcıyı olabildiğince belli bir küme içerisinde kısıtlarlar.

  • Business application veya karmaşık iş akışlı uygulamalar geliştiriyorsanız, bunu da Imperative Yaklaşımla geliştirmeniz daha mantıklı olacaktır. Çünkü bu tip iş kurgularını belli matematiksel fonksiyonlarda toplamanız pek mümkün olmaz.

Basic, Pascal, Delphi, C, C++, Java, C# gibi diller ile bu tip çok karmaşık yapılı akışlı uygulamalar çok daha basit şekilde geliştirilebilir ve daha sonradan daha iyi bakım yapılabilir ve daha okunabilir olurlar.

Not: Bence bir benzerlikte İstatiksel Modellemelerdeki(Makine Öğrenmesinden) vermek istiyorum. Fonksiyonel programlama daha matematiksel programlama , bazen veriniz öyle bir şekildedir ki arka plandaki istatiksel modeliniz bir formül çıkarır. Logistic Regresyon , Linear Regresyon vb.. bunlar bana Fonksiyonel yaklaşımı, bazen de öyle bir veri yapınız olur ki buda ancak Decision Tree ile bu modeli tanımlayabilirsiniz bu da bana Imperative Programlamayı anımsatıyor. Modelin beyninde tutulan modellerin de Fonksiyonel/Procedural olanları var bence :)

Imperative ve Declarative Örnek Kullanımları

  • Imperative: Procedural Programlama Dilleri (Basic, Pascal, C, C++, Java)
  • Declarative: Fonksiyonel Programlama Dilleri ve Markup, DSL diller (SQL, Regular Expression, HTML)
  • Hybrid : Javascript, Python

Referanslar