#Sharp.Net - Suat Tuncer

24/11/2006 - F# - Tuples (veri grupları)

Kategori: FSharp

          
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

Yorum (yok) :: Yorum yaz! :: Bağlantı

23/11/2006 - F# - Açıklama Satırları ve XMLDoc

Kategori: FSharp

            F#, en eski dillerden bu yana hiç eksik olmayan açıklama satırlarınada haliyle sahip. Kod içerisinde bir açıklama yazmak isterseniz bunu, şöyle yapabilirisiniz.
tek satır için : // bu bir açıklama satırıdır
çok satır için : (* burda bir sürü açıklama satırı var *)

            Bunun dışında yazdığımız fonksiyonlar içinde açıklama satırları kullanabiliriz, bu aynı zamanda XMLDoc anlamına gelmekte  ve yadım dosyaları oluşturuken büyük bir kolaylık sağlamakta. Yazdığımız fonksiyonları bizim dışımızdaki programcılar kullanacaksa veya kendi projemizde kullandığımız zaman kısa bilgilere ihtıyacamız oluyorsa, intelisense baloncukların çıkması için /// şeklinde üç adet slash işareti koyup açıklama satırımızı yazmamız yeterli olacaktır.



.Net Frameworkteki kitaplıkları kullanınca bize yardımcı olan baloncuklar gibi.  

Yorum (yok) :: Yorum yaz! :: Bağlantı

23/11/2006 - F# - Let Terimi

Kategori: FSharp

            Let ifadesi F# ‘daki en önemli terimlerden biridir hatta en önemlisidir diye biliriz. Çünkü bir fonksiyon veya değişken tanımlarken veya değer hesaplarken Let terimi kullanılır. Bir önceki yazılar incelendiğinde yazdığım ufak fonksiyonların hepsinin Let ile başladığı ve tanımlanan değişkenlerin ve bunlara yapılan atamların Let ile yapıldığı görülecektir.

Let teriminin, sağındaki ilk ifade değişken veya fonksiyon adını ifade eder. Eğer bu ilk ifadeden sonra bir kaç ifade geliyorsa, ozaman bu bir fonksiyondur ve bunlarda fonksiyona ait parametrelerdir. Let deyiminden sonra tek bir kelime varsa buda bir değişkendir. Aşşağıda, HarfSayisi isimli fonksiyonun açıklamasını yaptığım şema, konuyu daha anlaşılır yapacaktır.




Şekildede görüldüğü gibi, Let ile fonksiyon tanımlanmış ve hemen alt satırda ise yine Let ile bir değişken tanımlanıp değer atanmış. Fonksiynun en son satırında ise nUzunluk değişkeni dönen değer olarak kullanılmıştır.

Yorum (yok) :: Yorum yaz! :: Bağlantı

16/11/2006 - F# - Mola

Kategori: FSharp
Uzuncadır F# ile ilgili yazmıyorum, işin aslı şuki PC'min anakartı arızalandı ve kullanamıyorum, haliyle Visual Studio 2005 ve F# Interactive orda kurulu olduğu için ara vermek zorunda kaldım. Arızayı giderir gidermez devam edeceğim.

Yorum (yok) :: Yorum yaz! :: Bağlantı

21/10/2006 - F# - Light Syntax

Kategori: FSharp

Bir önceki yazıda bahsettiğim F# güzelliklerinden biri, dediğim gibi noktalama işaretleri konusunda bizi zorlamamasıydı. Aslında normal sözdiziminde (syntax'de) F# bizden bazı durumlarda ; (noktalı virgül), ;; (çift noktalı virgül), (), in gibi ifadeler ister fakat biz daha hızlı kod yazmak ve kodu anlama esnekliğini compilere bırakmak istediğimiz zaman F# kodumuzun en başınca #light ifadesini ekleriz ki bunun sayesinde, kodlarımızda sivri sinekler gibi uçuşan, blink! blink! diye kod yazarken, insanı sıkıntıya sokan noktalama hatalarıyla karşılamadan kod yazabilelim diye. Şöyleki ;

İki değeri bir birine ekleyen ve sonucu dönen bir fonksyion yazalım;

let hesapla a b =
    let a = a * a in
    let b = b + a in
    b;;
let sonuc = hesapla 5 6

do printf "sonuç : %d" sonuc

Bu kodları aynen yazıp derlediğimizde hiç hatasız çalışacaktır.

Şimdi ise aynı kodların başına sadece #light  ifadesini ekliyoruz ve F# interactive bize aşağıdaki hataları anında gösteriyor.

 


 

Hataları ayıkladıkdan sonra kodumuz şu şekilde olacaktır; 

 

#light
let hesapla a b =
    let a = a * a
    let b = b + a
    b
let sonuc = hesapla 5 6
do printf "sonuç : %d" sonuc

 

            #light ile yazılmış kodlarda girintiler 4’er boşlukla oluşturuluyor, normal yazımda ise tab veya 4’er boşluklada oluşturulabilir, dikkatten kaçmasın. Şimdilik bu kadar, herkese iyi geceler

Yorum (yok) :: Yorum yaz! :: Bağlantı

7/10/2006 - F# Kurulumu ve IDE

Kategori: FSharp

        Bir önceki yazımda ağzımın suyunu akıta akıta bahsettiğim F#'ı, anlıyacağınız üzere çoktan indirip kurmuş ve kurcalamıştım. Şimdi kurulumundan ve Visual Studio 2003 ve 2005 ile kullanılabilen IDE eklentisinden bahsedeceğim,
       
        Kurulum oldukça basit Download F# 1.1.12.5 adresinden güncel sürümü indirebilirsiniz, download tamalandıktan sonra .Zip'li dosyayı açıp InstallFSharp.msi dosyasını çalıştırıp kurulum işlemini başladığımız gibi bitirelim. Kurulumdan sonra VS.Net IDE'mizi açalım ve Other Projectin altında F# Projects ile ilk F# projemizi açıp kurcalayalım artık.

        Kurulum sonrasında modullerler ilgili bir problemle karşılaşabilirsiniz ben ilk kurulumda karşılaşmıştım ve şöyle çözdüm*;

        F#'ın kurulu olduğu dizinde bulunan şu dosyaları

FsLangService.dll
FsPrj.dll
babelpackage.dll

        komut satırında regsvr32 ile install edince çözüldü

       Alışkın olduğumuz etkileşimli Visual Studio.Net geliştirme ortamı, diğer dillerden tek eksiği outlining'nin (kodları blok halinde gösteren çizgiler  ve + 'ların) olmayışı, bunun dışında renkli, cıvıl cıvıl bir ortam  . XML desteği sayesinde, intelisensler bizi herzaman olduğu gibi yine yalnız bırakmıyor ve akıl vermekten geri kalmıyor.



        Bir kelimeyi yazdıktan sonra .Net'in meşhur noktasına (dot, . ) bastığınızda method ve özellikler listesi zınk diye açlıyor, yine ufak bir fark var, dilimiz case sensitive (büyük-küçük harf duyarlı) bir dil, tıpkı C# gibi ama C#'ta liste açıkken küçük harfede bassan, büyük harfede bassan uygun elemanı buluyor. Burda neyse onu basıcan illaki.



       Kurulum ve IDE'de anlatıcak çokta bişi yok artık bir an önce kodlama örneklerine başlamak gerek öyle değilmi.

Yorum (yok) :: Yorum yaz! :: Bağlantı

6/10/2006 - F# - Yeni bir dil

Kategori: FSharp
        Bir kaç ay evvel, web-i deryada ordan orya dolaşırken, yazılımuzmanın'dan gaz alıp ekşisözlük'te dem vurup kah msdn kah sourceforge dolaşıp, arada birde wikiye uğradığım bir esnada birden karşıma farklı bir dil çıktı F#. Microsoft Research'den Don Syme'nin bir süredir üzerinde çalıştığı yeni bir dil, hemen # ifadesi aklımıza C#'ı getirmekte fakat C#'dan oldukça farklı bir dil yapısına sahip

        Bu zamana kadar fonksiyonel dillerle pek ilgilenmemiştim F# hakkındaki ilk yazılanları okuyunca birden kod hücrelerimi bir heycan sardı hızla okumaya devam ettim.  F# isveç çakısı gibi bir dil, öncelikle fonksiyonel bir dil fakat aynı zamanda OOP yapısınıda destekliyor ve fonksiyonel bir dilin sağladığı tüm nimetler fazlasıyla mevcut,

        Nedir bu nimetler diyecek olursak,
  • tip/değişken belirtme ihtiyacının olmaması (isteyen belirte bilir),
  • herşeyin fonksiyonlardan oluşması ve her bir fonksiyonun bir birinden bağımsız çalışabilmesi ( multi threading)
  • Fonsiyonların kendini çağırabilmesi, uzar gider...
        Bunların dışında birde F# ile gelen güzellikler varki buda onu diğer ML dillerden ayırıyor;
  • Kendi kütüphanesiyle gelmesi,
  • Derlenen kodun bir çıktısının olması, yani .exe bildiğin .exe (bir çok fonksiyonel dilde kodlar bir interperter yardımıyla çalıştırılıyor)
  • Temel OCAML kütüphanesini desteklemesi,Yeri gelmişken belirteyim F# kısmen OCAML üzerine inşaedilmiştir.
  • Birde işin en tatlı kısmı F# ın diğer dillerle, örneğin C# ile direk iç içe kullanılabilmesi buda .Net Framework kütüphanesinide direk kullanabilmesini sağlıyor, çokda güzel oluyor. Özellikle DB'den veriyi çekip karmaşık hesaplamlar yaparken tadına varabilirsiniz bunun
  • Insanı () ve ; manyağı yapmayan bir sytanx'inin olmasıda ayrı güzel tabi :-)
        ve bana herşeyin bir nesne olmadığını öğretti sağolsun OOP bakış açıma varklı bir vizyon kattı, F#'la tanışmam ile alışma serüvenimi fırsat buldukça not alamaya devam edeceğim.

Yorum (1) :: Yorum yaz! :: Bağlantı

<- Son Sayfa :: Sonraki Sayfa ->

Hakkımda

.Net teknolojileri, # Sharp Dilleri ve olan biten ne varsa

Kategoriler

Arkadaşlarım

hepgittik