Tasarım Kodlama

Programlama Modelleri – Yeni Başlayanlar İçin Programlama Yaklaşımı Örnekleri

Herkese selam! Bu makalede, programlamanızı organize etmenin popüler yollarını veya stillerini tanımlayan süslü bir başlık olan programlama paradigmalarına bir göz atacağız.

Onu parçalara ayırmaya çalışacağım ve her paradigma için basit bir açıklama yapacağım. Bu şekilde, insanların “nesne yönelimli”, “işlevsel” veya “bildirimsel” derken ne hakkında konuştuklarını anlayabilirsiniz. Bu kavramların dışında daha fazlası için Kodlama Dilleri Türleri: En İyi Programlama Rehberi başlığındaki makaleye bakabilirsiniz.

Bu, her şeyden çok yüzeysel ve kısa bir teorik giriş olacak, ancak bazı sözde kod ve kod örnekleri de göreceğiz.

Gelecekte her paradigmayı pratik JavaScript örnekleriyle derinlemesine incelemeyi planlıyorum, bu tür makalelerle ilgileniyorsanız sitemizi takipte kalın.

Hadi başlayalım!

Programlama Paradigma nedir?

Programlama paradigmaları, belirli bir programın veya programlama dilinin düzenlenebileceği farklı yollar veya stillerdir. Her paradigma, ortak programlama sorunlarının nasıl ele alınması gerektiğine dair belirli yapılardan, özelliklerden ve görüşlerden oluşur.

Neden birçok farklı programlama paradigması var sorusu, neden birçok programlama dili var sorusuna benzer. Belirli paradigmalar belirli sorun türleri için daha uygundur, bu nedenle farklı türde projeler için farklı paradigmalar kullanmak mantıklıdır.

Ayrıca her bir paradigmayı oluşturan uygulamalar da zaman içinde gelişmiştir. Gerek yazılım gerekse donanım alanındaki gelişmeler sayesinde daha önce olmayan farklı yaklaşımlar ortaya çıkmıştır.

Ve son olarak, insan yaratıcılığı olduğunu düşünüyorum. Bir tür olarak, bir şeyler yaratmayı, başkalarının geçmişte inşa ettiklerini iyileştirmeyi ve araçları tercihimize veya bize daha verimli görünen şeylere uyarlamayı seviyoruz.

Bütün bunlar, bugün belirli bir programı yazmak ve yapılandırmak istediğimizde aralarından seçim yapabileceğimiz birçok seçeneğimiz olduğu gerçeğiyle sonuçlanıyor.

Programlama Paradigması Ne Değildir?

Programlama paradigmaları diller veya araçlar değildir. Bir paradigma ile hiçbir şeyi “inşa edemezsiniz”. Daha çok, birçok insanın üzerinde anlaştığı, takip ettiği ve genişlettiği bir dizi ideal ve yönerge gibidir.

Programlama dilleri her zaman belirli bir paradigmaya bağlı değildir. Akılda belirli bir paradigma ile oluşturulmuş ve bu tür programlamayı diğerlerinden daha fazla kolaylaştıran özelliklere sahip diller vardır (Haskel ve fonksiyonel programlama buna iyi bir örnektir).

Ancak “çoklu paradigma” dilleri de vardır; bu, kodunuzu belirli bir paradigmaya veya başka bir paradigmaya uyacak şekilde uyarlayabileceğiniz anlamına gelir (JavaScript ve Python iyi örneklerdir).

Aynı zamanda, programlama paradigmaları, farklı paradigmalardaki uygulamaları aynı anda sorunsuz bir şekilde kullanabilmeniz anlamında birbirini dışlamaz.

Neden umursayayım?

Kısa cevap: genel bilgi.

Uzun cevap: Programlamanın yapılabileceği birçok yolu anlamanın ilginç olduğunu düşünüyorum. Bu konuları keşfetmek, zihninizi açmanın ve kutunun dışında ve zaten bildiğiniz araçların dışında düşünmenize yardımcı olmanın iyi bir yoludur.

Üstelik bu terimler kodlama dünyasında çokça kullanılmaktadır, bu nedenle temel bir anlayışa sahip olmak diğer konuları da daha iyi anlamanıza yardımcı olacaktır.

Popüler Programlama Paradigmaları

Şimdi programlama paradigmalarının ne olduğunu ve ne olmadığını tanıttığımıza göre, en popüler olanları inceleyelim, temel özelliklerini açıklayalım ve karşılaştıralım.

Bu listenin kapsamlı olmadığını unutmayın. Burada ele alınmayan başka programlama paradigmaları da var, ancak en popüler ve en yaygın olarak kullanılanları ele alacağım.

Emirli Programlama (Imperative)

Zorunlu programlama, bilgisayara belirli bir sırada yürütmesi için verilen ayrıntılı talimat setlerinden oluşur. Buna “zorunlu” deniyor çünkü programcılar olarak bilgisayarın tam olarak ne yapması gerektiğini çok özel bir şekilde dikte ediyoruz.

Zorunlu programlama, bir programın adım adım nasıl çalıştığını açıklamaya odaklanır.

Pasta yapmak istediğini söyle. Bunu yapmak için zorunlu programınız şöyle görünebilir (Ben harika bir aşçı değilim, bu yüzden beni yargılama 😒):

Gerçek bir kod örneği kullanarak, elemanları yalnızca 5’ten büyük tutmak için bir sayı dizisini filtrelemek istediğimizi varsayalım. Imperative kodumuz şöyle görünebilir:

Programa dizideki her öğeyi yinelemesini, öğe değerini 5 ile karşılaştırmasını ve öğe 5’ten büyükse onu bir diziye göndermesini söylediğimizi görün.

Talimatlarımızda ayrıntılı ve spesifik oluyoruz ve zorunlu programlamanın anlamı budur.

Prosedürel Programlama (Procedural)

Prosedürel programlama, zorunlu programlamanın bir türevidir ve buna fonksiyonların (“prosedürler” veya “alt rutinler” olarak da bilinir) özelliğini ekler.

Prosedürel programlamada, kullanıcının modülerliği ve organizasyonu iyileştirmenin bir yolu olarak program yürütmesini işlevlere ayırması teşvik edilir.

Pasta örneğimizi takiben, prosedürel programlama şöyle görünebilir:

Görüyorsunuz ki, fonksiyonların uygulanması sayesinde, dosyanın sonundaki üç fonksiyon çağrısını okuyabildik ve programımızın ne yaptığı hakkında iyi bir fikir edinebildik.

Bu basitleştirme ve soyutlama, prosedürel programlamanın faydalarından biridir. Ancak işlevler içinde hala aynı eski zorunlu koda sahibiz.

Fonksiyonel Programlama (Functional)

İşlevsel programlama, işlev kavramını biraz daha ileri götürür.

İşlevsel programlamada, işlevler birinci sınıf vatandaşlar olarak kabul edilir, yani değişkenlere atanabilir, argüman olarak iletilebilir ve diğer işlevlerden döndürülebilir.

Diğer bir anahtar kavram ise saf fonksiyonlar fikridir. Saf bir işlev, sonucunu üretmek için yalnızca girdilerine dayanan bir işlevdir. Ve aynı girdi verildiğinde, her zaman aynı sonucu verecektir. Ayrıca, hiçbir yan etki oluşturmaz (fonksiyonun ortamı dışında herhangi bir değişiklik).

Bu kavramları akılda tutarak, işlevsel programlama, çoğunlukla işlevlerle yazılmış programları teşvik eder (sürpriz 😲). Ayrıca, kod modülerliğinin ve yan etkilerin olmamasının, kod tabanındaki sorumlulukları tanımlamayı ve ayırmayı kolaylaştırdığı fikrini de savunur. Bu nedenle, kodun sürdürülebilirliğini artırır.

Dizi filtreleme örneğine geri dönersek, zorunlu paradigma ile işlevin sonucunu depolamak için bir yan etki olarak kabul edilebilecek harici bir değişken kullanabileceğimizi görebiliriz.

Bunu işlevsel programlamaya dönüştürmek için şöyle yapabiliriz:

Neredeyse aynı kod, ancak yinelememizi, sonuç dizisini de depoladığımız bir işlev içine sarıyoruz. Bu şekilde, işlevin kapsamı dışında hiçbir şeyi değiştirmediğinden emin olabiliriz. Yalnızca kendi bilgilerini işlemek için bir değişken oluşturur ve yürütme bittiğinde değişken de gider.

Bildirimsel Programlama (Declarative)

Bildirimsel programlama, karmaşıklığı gizlemek ve programlama dillerini insan diline ve düşüncesine yaklaştırmakla ilgilidir. Programcının bilgisayarın görevi nasıl yürütmesi gerektiği konusunda talimat vermediği, bunun yerine hangi sonucun gerekli olduğu konusunda talimat vermesi anlamında zorunlu programlamanın tam tersidir.

Bu, bir örnekle çok daha açık olacaktır. Aynı dizi filtreleme hikayesini takip ederek, bildirimsel bir yaklaşım şöyle olabilir:

filter işleviyle, bilgisayara dizi üzerinde yinelemesini veya değerleri ayrı bir dizide saklamasını açıkça söylemediğimizi görün. Sadece istediğimizi (“filter“) ve karşılanması gereken koşulu (“sayı > 5”) söyleriz.

Bunun güzel yanı, okuması ve anlaması daha kolay ve yazması genellikle daha kısa. JavaScript’in filtermapreduce and sort  işlevleri bildirimsel koda iyi örneklerdir.

Bir başka iyi örnek, React gibi modern JS çerçeveleri/kütüphaneleridir. Örneğin bu kodu alın:

JSX sözdizimi (React’in kullandığı şey), HTML ve JS’yi aynı şeyde karıştırır, bu da uygulama yazmayı daha kolay ve daha hızlı hale getirir. Ancak tarayıcıların okuduğu ve yürüttüğü şey bu değildir. React kodu daha sonra normal HTML ve JS’ye aktarılır ve tarayıcıların gerçekte çalıştığı şey budur.

JSX, amacı geliştiricilere çalışmak için daha dostça ve daha verimli bir arayüz sağlamak anlamında bildirimseldir.

Bildirime dayalı programlama hakkında dikkat edilmesi gereken önemli bir şey, kaputun altında bilgisayarın bu bilgiyi zaten zorunlu kod olarak işlemesidir.

Dizi örneğini takiben, bilgisayar yine de bir for döngüsündeki gibi dizi üzerinde yinelenir, ancak programcılar olarak bunu doğrudan kodlamamız gerekmez. Bildirimsel programlamanın yaptığı şey, bu karmaşıklığı programcının doğrudan görünümünden gizlemek.

İlginizi Çekebilir: 11 Dilde Yazılmış Kod Örnekleri

Nesne yönelimli programlama

En popüler programlama paradigmalarından biri nesne yönelimli programlamadır (OOP).

OOP’nin temel konsepti, endişeleri nesneler olarak kodlanmış varlıklara ayırmaktır. Her varlık, varlık tarafından gerçekleştirilebilecek belirli bir bilgi (özellikler) ve eylemler (yöntemler) grubunu gruplayacaktır.

OOP, sınıfları yoğun bir şekilde kullanır (bu, programcının belirlediği bir plandan veya ortak plakadan başlayarak yeni nesneler oluşturmanın bir yoludur). Bir sınıftan oluşturulan nesnelere örnekler denir.

Sözde kodlu pişirme örneğimizi izleyerek, şimdi diyelim ki fırınımızda bir ana aşçımız (Frank adında) ve bir yardımcı aşçımız (Anthony adında) var ve her birinin pişirme sürecinde belirli sorumlulukları olacak. OOP kullansaydık programımız şöyle görünebilirdi.

OOP’nin güzel yanı, endişelerin ve sorumlulukların net bir şekilde ayrılmasıyla bir programın anlaşılmasını kolaylaştırmasıdır.

Gelik Yazının Sonuna

Gördüğümüz gibi, programlama paradigmaları, programlama problemleriyle yüzleşmenin ve kodumuzu organize etmenin farklı yollarıdır.

Zorunlu, prosedürel, işlevsel, bildirimsel ve nesne yönelimli paradigmalar günümüzde en popüler ve yaygın olarak kullanılan paradigmalardan bazılarıdır. Ve onlar hakkında temel bilgileri bilmek, genel bilgi için ve ayrıca kodlama dünyasının diğer konularını daha iyi anlamak için iyidir.

1 yorum