fonksiyonel programlama (functional programming)
yazan : Şadi Evren ŞEKER
Programlama yaklaşımlarından birisi olan fonksiyonel programlama günümüz dillerinin neredeyse tamamında kullanılmaktadır. Bu yaklaşımda matematik fonksiyonlarında olduğuna benzer bir şekilde alt programlar tanımlanmakta ve bu alt programların değişik argümanlar ile çalışması sağlanmaktadır. Bu yaklaşım basitçe:
Bir dilin fonksiyonel olması dilde fonksiyon veya prosedüre benzeri özellikler bulundurması ile sağlanır. Bu özellikleri tanımlamak gerekirse:
Yukarıdaki bu maddeleri bir kara kutu (blackbox) yaklaşımı olarak da düşünebiliriz. Yani alt programların, dış dünya ile (programın geri kalanı ile) olan tek bağlantıları almış oldukları ve geri döndürmüş oldukları argümanlardır (paramatrelerdir).
Aşağıda bir fonksiyon örneği verilmiştir: (JAVA, C , C++, C# dillerinde kabul edilir koddur):
int topla ( int a, int b){
return a + b;
}
Yukarıdaki kod incelendiğinde, a ve b, fonksiyona verilen argümanlardır (parametrelerdir). Dönüş değeri olarak tam sayı (integer) tipi kullanılmış ve bu durum return komudu ile belirtilmiştir. a+b eylemi ise bir alt programdır. Yani bu fonksiyon çağrıldığında icra edilen program parçasıdır.
Fonksiyonel programlama, yapısal programlamanın gerektirdiği bir yaklaşımdır. Buna göre fonksiyonel programlama kullanılan bütün diller yapısal programlama yaklaşımına uygundur denilebilir. Ancak tersi doğru değildir. Her ne kadar yapısal programlamanın tanımında bir alt programın varlığı zarurî olsa da bu alt program basit bir if bloğu olarak da düşünülebilir. Yani okuyucu kod blokları ile fonksiyonları karıştırmamalıdır.
Nesne yönelimli programlama yaklaşımınlarında fonksiyonel programlama kullanılmaktadır. Dolayısıyla her nesne yönelimli programlama yaklaşımı, fonksiyonel programlamayı barındırmaktadır. Nesne yönelimli programlama terminolojisinde, fonksiyonlara metod ismi verilmektedir.
« yapısal programlama (structured programming) | üst programlama yaklaşımı (metaprogramming) »
Yorumlar
Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'fonksiyonel programlama (functional programming)' isimli yazı 18 Dec 2007 tarihinde, saat: 07:56 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 727 defa okunmuştur.
Benzer yazıları Automata (otomatlar, özdevinirler), Bilgisayar Kavramları, C/C++, Derleyiciler, JAVA, Nesne Yönelimli Programlama, Programlama Dilleri, Temel Bilimler, bilgisayar felsefesi kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.
Yazarın Kitabı
Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
- Visual Basic ile Gösterici (Pointer) Kullanımı
- Hasse Çizgeleri (Hasse Diagrams)
- Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )
- Integral Kriptoanalizi ( Toplam Tecessüsü , Integral Cryptoanalysis)
- Diferansiyel Kriptoanalizi ( Fark Tecessüsü , Differential Cryptoanalysis)
- Sierpinski Üçgeni (Sierpinski Triangle)
- C ile programlamaya giriş final sınavı çözümleri
- Çok Seviyeli Sıralar (Multi Level Queues)
- Çift Özetleme (Double Hashing)
- İkinci Dereceden Sondalama (Quadratic Probing)
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Null, NULL, nil veya null olarak...
- Fatih Kabakci: hocam merhabalar,...
- kara: Çok güzel anlatılmış gerçekten teşekkürler...
- Şadi Evren ŞEKER: Bahsettiğiniz şekil dönüşümü...
- Caner: Kullanıcıdan açı girdisi almıyorsanız...
- Furkan Yediyildiz: Algoritmanin mantigi cok güzel...
- havva: çok sağolun çok güzel açıklamalar var tşk...
- Şadi Evren ŞEKER: typedef komutu, bir yapıdan yeni bir...
- fatih kabakci: hocam ben structures ile ilgili bir sorum...
- Şadi Evren ŞEKER: evet, yukarıda açıklanan, herhangi...
- Abdurrahman ulusoy: fi açısından teta kadar döndürme...
- Şadi Evren ŞEKER: Hayır yok, bir noktanın, herhangi...
- Abdurrahman ulusoy: Bu durumda yukarıdaki formüllerin...
- Abdurrahman ulusoy: Merhaba hocam Üstteki mesajımda...
- mustafa ekmekcioğlu: merhaba şadi bey ben hacettepe...
- Şadi Evren ŞEKER: Talebiniz üzerine...
- Evren Kocaturk: ve bunu matlab üzerinde, gerekli...
- Evren Kocaturk: teşekkürler, işime yarayacak gibi,...
- tuncay çavuşoğlu: Şadi bey teşekkürler.Kısa ve...
- attila: hocam bunun bir örneginide Visual Basic diliyle...
Yakın Yazılar
fonksiyonel programlama (functional programming)
Kuyruk Özyinelemesi (Tail Recursion, Birikimsel Tarz, Accumulation Style)
Tembel Programlama (Lazy Programming)
otomat yönelimli programlama (automata based programming)
Devamsal Geçiş Tarzı (Continuation-passing style, CPS)
Emirli Programlama (Imperative Programming)
Üçüncü normal şekil (Third Normal Form, 3NF)
Sonsuz Döngü (Fasit Daire, Kısır Döngü, Infinite Loop)
İstisna Yakalama (kabz-ı istisna, Exception Handling)
Nesne Yönelimli Programlama (Object Oriented Programming)
Bağlantılar
[...] Fonksiyonel programlamada kullanılan bir fonksiyon tipidir. Buna göre bir özyinelemeli (recursive) fonksiyon kendisini her çağırmada mevcut işlenmiş değeri geçirir. Bu sayede derleyici (compiler) özyineleme yığınını (recursion stack) hafızada tutmak yerine basit bir parametre değiştirme işlemi ile sonucu hesaplayabilir. [...]
[...] Fonksiyonel programlamada kullanılan fonksiyon tarzlarından birisidir. Buna göre bu tarzda yazılmış olan bir fonksiyon doğrudan değer döndürmek yerine, ilave bir parametre ile fonksiyondaki hesaplamaları taşır. [...]
Merhabalar, çok bilmişlik etmek istemem, ama bildiğim kadarıyla procedural programming ile functional programming birbirinden farklı kavramlar. Hatta procedural programming imperative programming’in bir alt dalı iken, functional programming ise bunun tam zıttı olan declarative programming’in bir alt dalıdır.
Örnek verecek olursak C dilinde procedural programming yaklaşımı görülürken, Scheme dilinde functional programming yaklaşımı ele alınır. Her iki dilede aşina olanlar aradaki farkları anlayabilirler.
Kesinlikle haklısınız. Karışıklığa sebep olan Pascal gibi dillerde dönüş değeri olmayan fonksiyonlara prosedür ismi verilmesi olmuş. Aslında bu durum literatürde bir kavram karmaşasına sebep oluyor. Yani prosedürel programlama kavramını modüler programlama (ve dolayısıyla fonksiyonel programlama) anlamında kullanan kaynaklar da bulunuyor. Benzer bir kavramı arayan kişiler bu yorumu okuyarak bu problemi farkedeceklerdir. Başlıktan procedural programming ibaresini kaldırdım. Ayrıca bu konuyu içeren emirli programlama (imperative programming) başlıklı yeni bir yazı ekledim.
ilginiz için teşekkürler