F# - Tuples (veri grupları)

by Suat TUNCER 24. Kasım 2006 00:34

     F#. Evet bu güzel dilin getirdiği en şahane özelliklerden biride Tuples’lardır. Tupleslar genel olarak veri çifleri (ikiden fazlada olabilir) olarak düşünülebilir. Şöyle açıklıyayım iki sayı üzerinde işlem yapan bir fonksiyon düşünün bu fonksyiona gönderdiğimiz iki değeri hem toplamak hemde çarpmak ve iki sonucuda ayrı ayrı almak istiyelim. Noldu olmadı değilmi J. Klasik yöntemlerle bu iş oldukça zor olur. Fakat F# için bu iş çoçuk oyuncağı. Sadece fonksiyonumuzun geri döndüğü değeri Tuples olarak belirtmeniz yeterlidir, yani fonksiyonumuzdan hem toplama sonucu, hemde çarpma sonucu için ekstra bişi yapmamıza gerek kalmadan bize dönecektir. Hemen kodla pekiştirelim.

     Önce HesaplaBekir   isminde bir fonskiyon tanımlıyalım, Fonksiyonun yaptığı iş biraz önce okuduğunuz gibi girilen a ve b sayılarını önce toplayan ve sonra çarpan bir fonksiyon. Fonksiyon içinde toplama sonucu toplam, çarpım sonucu carpim değişkenlerinde tutuluyor. Her iki sonuç daha sonra sonuc isimli Tuples’a aktarılıyor let sonuc = (toplam, carpim)

let HesaplaBekir a b =
      let toplam = a + b in
      let carpim = a * b in
      let sonuc = (toplam, carpim) in
      sonuc;;


     Bu satırlarda ise fonksiyonumuzun sonucu, yeni tanımladığımız toplamSonuc ve carpimSonuc değişkenlerine aktarılıp printf metoduyla ekrana yazılıyor. Yeri gelmişken F# library’isini anlatan bir makalede düşünüyorum

let toplamSonuc, carpimSonuc = HesaplaBekir 5 5;
do printf "Toplam : %d " toplamSonuc;
do printf "Carpim : %d " carpimSonuc;


     Biz örneğimizde integer kullandık ama bir Tuples’ içinde birden fazla tip ve değer dönebilir;

let kisi = ("suat","tuncer",26)
let urun1 = ("elmalı turta", 56.5)
let urun2 = ("taze portakal suyu", 2, 2.5)


     kisi ve urun değişkenleri içinde string,int ve decimal değerler var görüldüğü gibi. Yine bir Tuples’ içinde birden fazla Tuples kullanılabilir. Buda çok önemli bir kullanım şekli.

let sepet = (kisi , urun1, urun2)


     ve işte yukarde görüldüğü gibi en güze lyanlardan biride buydu, kisi ve urun Tuples’ları sepet Tuples’ında

     Gördüğünüz gibi tek taptığımız bir değişkene sadece ( ) arasına iki değeri virgül ile ayırarak aktarmak başkada bişi yapmaya gerek yok. Şimdi hal böyleyken, birde bu işi C# ile yaptığımızı bir düşünelim. Öncelikle ilk çakıldığımız nokta fonksiyonumuzdan geriye iki farklı tip almak. Aslında bu iş için ArrayList, Collection belkide HashTable kullanabilirz ama ne olursa olsun kullanacağımız tip object olmak zorunda. C# 2.0 ve generic’ler bir nebze çözüm olabilir ama yinede yetemez  çünkü F# tip bağımsıztır ve tip belirtmemek object demek değildir uygun tipi kendi seçmektedir bu cast işleminde oldukça farklı bir durum, generic’lerdende hatırlanacağı gibi. 3 sınıf içinden istediğimizi seçtikten sonra birde bunlara uygun classlar yazmakta gerekecektir ve aslında şu küçük fonksiyon için çok katı bir kod ile karşı karşıya kalmış olacağız.

     Kişisel fikrim, işte bu an OOP’un kafasını önüne eğdiği andır Undecided

Tags: ,

F#

Hakkımda

Suat TUNCER, Yazılım tutkunu.

Reklam Alanı

Twitter


 

Month List

Widget Poll not found.

The file '/widgets/Poll/widget.ascx' does not exist.X