F# Nedir?

Bu makalemizde kolay, basit, tipleri fonksiyonel olarak programlayabilen ve yepyeni bir dil olan F#(Fsharp) ‘ı incelemeye çalışacağız.

Yeni çıkmış olan bir dili anlatan makaleler genellikle programlama dilini ve dilin oluÅŸmasını saÄŸlayan etmenlere deÄŸinerek giriÅŸ yapar. Bizde bu makalemizde bu yolu izleyerek baÅŸlayacağız. Temel etmenlere de deÄŸinmeden önce daha önemli olan “F# nedir” ‘i ve “Fonksiyonel Programlama nedir” ‘i incelemek daha mantıklı olacaktır.

Fonksiyonel Programlama Nedir?

Fonksiyonel programlama (FP) çok eski zamanlardan, ileri düzey programlama dillerinden beri kullanılan bir yapıydı. FP ‘yi 1955 yılında IPL bulmuÅŸtur. Ä°lk olarak ise FORTRAN dili tarafından kullanılmıştır. Ä°kinci olarak kullanan dil COBOL olmuÅŸtur. FORTRAN ve COBOL prosedürsel bir mantıkla programlarını oluÅŸturabilme olanağı tanıdığı için bilimden mühendisliÄŸe kadar birçok alanda kullanılmışlardır. Bu mantık 1970 ’li yıllara kadar devam ettikten nesne tabanlı programlama çıkarılmıştır. Nesne tabanlı programlama mantığını kullanabilen programlama dilleri günümüzün en popüler dileri arasında yer almaktadırlar. Kullanmayanlar ise büyük oranda arka plana itilmiÅŸlerdir.

Mimari mantıklar bu oranda geliÅŸtirilirken fonksiyonel programlama dilleri de kararlı ve güçlü bir biçimde geliÅŸtirilmeye devam etmiÅŸlerdir. En güçlü fonksiyonel programlama dilleri: SML, OCaml, Haskell, Clean ve diÄŸerleridir. En çok sevilen fonksiyonel programlama dilleri ise: APL ve List ‘dir. Tabii bu bahsettiÄŸimiz dillerin yaÅŸadığı zamanlar 1950 lerdir. Fakat akademik çevreler fonksiyonel programlama kavramını birinci öncelik olarak tutarak geliÅŸtirmeye devam etmiÅŸlerdir. Bu geliÅŸimlerden de en çok söz getirenleri Ä°ngiltere Cambridge üniversitesinde gerçekleÅŸtiÄŸi akademik yayınlar ile bütün dünyaya duyurulmaktaydı. Çok öncelerden tamamlanmış olan bu dil global dünyanın gerçekleri ile karşılaÅŸtığında ise on yıllar önce ömrünü tamamlamış olarak görülüyordu. Fakat yurtdışındaki üniversitelerde karmaşık ve oldukça zor problemler fonksiyonel programlama ile çözülmeye devam edilmiÅŸtir. Zaten bu geliÅŸimlerin bir yansısı olarak ta günümüzde birçok üniversitede mühendislik bilimleri fakültelerinde ders olarak okutulmakta olan MATLAB programının oluÅŸmasına saÄŸlamıştır. Matlab programının özelliÄŸi matematiksel, fiziksel ve mühendisteki birçok iÅŸlemi oldukça kolay fonksiyonlarla yapabilmemize olanak tanıyordu. Ayrıca kolay fonksiyonlar ile yapılabilmesinin dışında oldukçada performanslıydı. Fakat matematiksel iÅŸlemleri günümüz programlama dilleri ile yapmaya çalıştığımızda performans olarak ne Matlab ‘te ne fonksiyonel programlama da ne de bu yapıda olan programlama dilleri ile alabildiÄŸimiz sonuçları alamıyorduk. Bugün ise, fonksiyonel programlama kavramını net olarak anlayabilmemiz durumunda en karmaşık problemleri bile çok basit yöntemlerle çözebileceÄŸimiz belirtiliyor.

Fonksiyonel programlama, bütün programlama dillerinin derlemlerini (collection) başka fonksiyonlardan etkilenmemiş biçimde alarak bağımsız değişkenlerini geri dönüş değerleri olarak kabul eder. Nesne tabanlı programlama gerek görülmeyen problemlerin döngülerinin sonucunda oluşan yan ektilere izin vermektedir. Veri yapıları olarak kullandığımız tiplerin büyük bir çoğunluğunu, bellek yönetim kodlarımızı ve diğer birçok alıştığımız mantıkları fonksiyonel programlama ile kullanabilmemiz mümkündür.

Basit matematiksel modellerden yararlanılarak çözülebilen uygulamalar az ve öz kod yazılarak, uygulamalarımızı geliÅŸtirecek olduÄŸumuz uygulamalarda yalnızca gerekli olan bileÅŸenlerin referansa edilmesi ve görev çubuÄŸunda minimum düzeyde bellek sarfiyatı yapması gibi özellikler fonksiyonel programlamanın temel yapı taÅŸlarını oluÅŸturmaktadır. Günümüzde fonksiyonel programlamayı kullanabileceÄŸimiz dil F# ‘dır. F# ‘da fonksiyonel programlar yardımı ile karmaşık uygulamaları rahatlıkla geliÅŸtirebilmemiz mümkündür.

Niçin Fonksiyonel Programlama Önemlidir?

Fonksiyonel programlamayı düşünen insanlar genellikle kusurlu, hatalı, yaklaşılmaması gereken dil olarak görürlerdi. Fakat bunu düşünen insanları fonksiyonel programlananın kendilerine katacağı avantajları düşünmeden bu tür yargıları düşünüyorlar. Tartışılan bir diğer nokta ise günümüz programlama dilleri ile yaptığımız işleri fonksiyonel programlama dili yapamayacağımız yönünde şekillenmiştir. Günümüz dünyasında fonksiyonel programlamanın avantajlarını her durumda reddeden insanlara karşı tartışmalar esnasında verilmiş en iyi cevabı Chalmer teknik üniversitesinden John Hughes vermiştir. ( http://www.math.chalmers.se/~rjmh/Papers/whyfp.html )

John Hughes derki, “Fonksiyonel programcıların(FP) konuÅŸtukları orta çaÄŸ rahiplerinin konuÅŸtuklarına benzetilmemelidir. Çünkü FP ‘cılar bu dili sevdikleri için geliÅŸtirmektedirler. Rahipler ise maddi çıkar için iÅŸlerini yapmaktadırlar.”

Bir örnek ile fonksiyonel programlamayı anlatmak gerekirse, kendimizin düşünerek oluşturduğumuz fonksiyonların değerlini başka fonksiyonlara aktarabilmemize olanak tanınmaktadır. Bu özellik sizlere ilk görüşte önemsiz gelebilir, fakat değerlerin kullanılmasını olağanüstü oranda arttırmaktadır. Ayrıca veri ve fonksiyonlar arasındaki anlam farklarını da birbirinden rahatlıkla ayırabilmekteyizdir. Fonksiyonel programlama da kullanılan kısa ve basit yapıya nesne tabalı programlamalarda uymak zorundadır ve uymaktadırlar.

Ayrıca, fonksiyonları geri dönüş değerleri çokluda olabilmekte ve çağırılan fonksiyonların boşa kullanılması önlenmektedir. Bu mantığa uygun örnekleri gelecek makalelerimizde vereceğiz.

F# Nedir?

Fonksiyonel programlama çözülmesi zor olan bilgisayar problemlerini basit yöntemler ile çözmemize yarıyor fakat genel programlama teknikleri ile yapılan çözümler için yeterince iyi deÄŸildi. Bu nedenle fonksiyonel programlama nesne tabanlı programlama mimarisinin mantıki yapısını da bünyesine katarak iÅŸlemlerin daha rahat yapılabilmesine olanak tanır. Nesne tabanlı mimari yapısını bünyesine katarken de fonksiyonel programlama prensiplerinden vazgeçilmeden bu hafif geçiÅŸ yapılmıştır. BirleÅŸimlerin sonucunda da karşımıza diÄŸerlerinin özelliklerini taşıyan fakat kendine özgü olan bir dil ortaya çıkmıştır. Bu dilin adı ise F# ‘dır. F#, fonksiyonel programlama dilinin daha da iyileÅŸtirilmiÅŸ halidir.

DiÄŸer popüler fonksiyonel programlama dillerinden OCaml, Haskell, Lisp ve Scheme dillerinin içerikleri, geleneksel kullanım yapıları ve gereklilikleri F# dilinin içerisine çalışma prensibine zarar vermeyecek ÅŸekilde eklenmiÅŸtir. Ayrıca F# .NET dilinin gücünü de diÄŸer dillerle birlikte bünyesine katmıştır. F#, yaratıcıları tarafından araÅŸtırmalar sonrasında kriterlere uygun ve düzgün görülen üç dilin birleÅŸtirilmesi sonucunda oluÅŸmuÅŸtur. F# ile problemlerin üzerinden çalışılması ve çözüm yollarını ararken uÄŸraÅŸtığımız metotların azalması avantajları arasında yer almıştır. F#, karmaşık fonksiyonların çözüm yöntemlerine getirdiÄŸi yaklaşımların çabukluÄŸu açısından fonksiyonel programlamaya benzemesi ile birlikte günümüzün en iyi mimarisi olarak kabul edilen nesne tabanlı programlama tekniÄŸini de problem çözümlerinde kullanabilmesi iyi kabul edilebilecek yaklaşımlarıdır. Üç farklı dilin birleÅŸiminden oluÅŸtuÄŸundan bahsetmiÅŸtik. F# oluÅŸurken yararlandığı ilk yapı .net olmuÅŸtur. .NET ‘in temel sınıf kütüphanelerini kullanılmıştır. Kullanılan .net kütüphaneleri Base Class Libary(BCL) ‘dir. .NET bünyesinde bulunup da temel olarak kullanılan dillerde C# ve VB ’dir.

F# ‘ın nesnesel modelleri oluÅŸturulurken ise OCaml ’i nesnesel programlama mimarisine aykırı olmayacak biçimde kullanılmaya çalışılmıştır. Tekniksel felsefisi ise .NET ‘ten alınmıştır. Derleme iÅŸlemleri için kullanılan mimaride Common Language Infrastructure (CLI) ‘dır. .NET ‘in genel yapı tipleri de F# ‘ın bünyesinde kullanılmaya devam edilmiÅŸtir.

F# ‘ı geliÅŸtiren kiÅŸi, England Cambridge üniversitesinden Dr. Don Syme ‘dir. Ayrıca Dr. Syme Microsoft Research Lab(MSL) ‘da da akademik programlama dilleri üzerine çalışma yapmaktadır. Fonksiyonel programlama dilinin .Net mimarisi ve Visual Studio IDE ‘si ile de uyumlu çalışması için oldukça fazla çalışması olmuÅŸtur.

F# ‘ı kimler kullanmalıdır sorusuna gelirsek, MSL çalışanlarının C# ile F# arasında yaptıkları testlerin sonuçlarına göre eÄŸer finansal veriler, matematiksel iÅŸlemler ve matematik fonksiyonları ile yapacağımız iÅŸlemler var ise F# ‘ın performansının C# ‘a göre daha iyi olduÄŸunu söylemektedirler. Ayrıca oldukça büyük verilerle veya Matlab de olduÄŸu gibi matrisler ile matematiksel iÅŸlemleri yapmak istiyorsak yine C# yerine F# ile çalışmamız öneriliyor. Çünkü fonksiyonel programlama dilinin mimari yapısından ötürü F# ile yapacağımız karmaşık iÅŸlemlerin çözüm süresi oldukça kısalacaktır. Ayrıca .NET 4.0 geliÅŸimlerinde matematik fonksiyonlarının daha ayrıntılı bir biçimde çözümlenebilmesi içinde Linear Algebra sınıflarının geliÅŸtirildiÄŸi bilinmektedir. Bu geliÅŸimler esnasında yararlanılan yöntem yine fonksiyonel programlama teknikleridir.

Yorum Gönder

11 Yorumlar

Unknown dedi ki…
çok teşekkür ederim

f#'a olan korkulu merakım artık heyecana dönüştü:)
Turhal Temizer dedi ki…
Yardımcı olabildiysem ne mutlu bana:)
Adsız dedi ki…
Thank you...
Turhal Temizer dedi ki…
nope problem...
Adsız dedi ki…
Merhaba,v.c# .net 2.0 kullanıyorum.Açıkçası c# 4.0'ı merak ediyorum kabuğumu kırma açısından fakat bir yandan da sun microsystems'ın Java'ya mı geçiş yapsam diyorum.İş hayatı açısından,hangi dile kaymam konusunda bana bir çözümde bulunabilir misiniz?Elo-hab. Müh.4.sınıf
Adsız dedi ki…
serhat dostum bana soracak olursan c# a devam et nede olsa arkasında batması kolay olmayanbi şirket var sun geleceği belli değil bu arada türk şirketlerde yavaş yavaş javanın bol sorunlu adına vardılar javayı kötülemek değil niyetim ama sun microsoft'un biraz gerisinde bence sırtını sağlama daya derim ama javada öğren zamanın ve merakın varsa fazla dil göz cıkarmaz..:)
Adsız dedi ki…
java nın ardındaki sermaye microsoftun toplam değerinden fazladır(Oracle,IBM,Apple,HP,Google...)Java uluslar arası piyasada C# göre kat kat fazla kullanılır.örneğin finans sektöründe java neredeyse tekeldir.bunu oracle ve ibm sayesinde başarmıştır.Sun java yı özgür lisans altında sunması ve Oracle sun microsystems alması java daha güçlendirdiği fikrindeyim...
Adsız dedi ki…
Javada ki open source mantıgı ticari anlamda hic birsey kazandırmıyor yada pratikte bu işe yaramıyor, gecen sene bir otomasyon programı şirketim için almayı düşünüyordum, kendim de yazabilirdim ancak zamanım yoktu bende hazır olanı satın alayım dedim, ayni programin c# java ve delphide yazilmis olarak yazilim sirketleriyle gorustum, fiyat olarak soyleydi:
delphi 20000 dolar
c# 30000 dolar
java 25000 dolar
civarindaydi, ben bu programi daha sonra kendimde gelistirmek isteyebilecegimi dusunerek java ile yazilmis olan sirketle gorustum ve kendilerine 60000 dolara open source almak istedigimi soyledim bana verdikleri cevap su oldu! Hayir, ondan sonra anladim ki java mava opensource felan lafta cok guzel ama icraat ta hikaye! daha sonra bu duruma icerlendim, delphiyle yazilan programin demosunu sirketten deneme amacli aldim, programi kirdim ve full surum haline getirdim, ama daha sonra baktim ki program isime yaramiyacak, bilgisayarimdan sildim. (buda isin ayrintisi)
Adsız dedi ki…
Who knows where to download XRumer 5.0 Palladium?
Help, please. All recommend this program to effectively advertise on the Internet, this is the best program!
Adsız dedi ki…
c# yazılımcısıyım, f# için çok erken bence. yeni, eksiği çoktur. c# artık tam kıvamında;) ama f# yayıldığında c# çöpe atılacak diye korkuyorum doğrusu.
Metin SARI dedi ki…
Bu F# nedir nette dolanıp duruyor. Bir tanede programlamaya başlayanı görmedim. Türkçe kitapta mevcut değil. Pandoranın kutusu gibi bir şey oldu dışını biliyoruz içini anlatan yok. Bu konuda bilgisi olan açıklama yapabilir mi?

Ad Code

Responsive Advertisement