Başlangıç > .NET, MESLEKTEN, NEDİR? > C# 3.0 SEMİNER NOTLARIM (LINQ , DLINQ , XLINQ)

C# 3.0 SEMİNER NOTLARIM (LINQ , DLINQ , XLINQ)

linqsemineri.gifBu haftasonu Csharpnedir?com tarafından Microsoft Türkiye’de düzenlenen C# 3.0 seminerindeydim. Semineri uzun zamandan beri takip ettiğim Burak Selim Şenyurt verdi. Kendisini aslında ben Csharpnedir ‘deki editörlüğünden önce JAVA 24 serisiyle tanıştım. www.bsenyurt.com adresinden bu konuyla ilgili yazılarını okuyabilirsiniz.

Seminer güzel bir havada başladı. Burak Bey güler yüzü ve süeterine taktığı MVP rozetiyle karşımızdaydı. Önce biraz kendini tanıttı ve seminerde hediye edeceği 2 kitaptan bahsetti. Sonrada geçti bilgisayrın başına ve bizlere C sharp 3.0 nedir ne değildir anlatmaya koyuldu. Notlarıma baktığımda seminerden geriye kalanlar şu şekilde:

Öncelikle .NET framework pek çok alışkanlığınızı değiştirmek zorunda bırakcak gibi. Yani bazı şeyler tamamen kaldırıp yepyeni yapılar getirilmiş ve bu da biraz hoşnutsuzluk yaratabiliyor. Özellikle distributed yapıda uygulamalar geliştirenler kendilerini şimdiden değişikliğe hazırlasalar iyi olcak.

Gelelim C# 3.0’a . İlk gözüme çarpan değişiklik VAR anahtar sözcüğü kullanarak tanımladığınız değişkenin tipini belirtme derdinden kurtulmanız. Örneğin:

int yas= 32 yerine var yas = 32 gibi bir tanımlama yapabiliyorsunuz. Uygulamayı build edip oluşan EXE ‘yi ILDASM (INTERMADIATE LANGUAGE DISASSEMBLER) ile açınca görüyorsunuz ki build sırasında sizin var ile tanımladığınız yas adlı değişken arka planda int  (integer) tipe çevirilmiş.

Bunu görünce acaba bu işe yarar mı gibi bir soru geldi aklıma ? Sanırım ; “Acaba bu değişkene en çok hangi tip iyi gider?” diye düşünenlere ilaç olacaktır 🙂 Ama KODUN OKUNABİLİRLİĞİ FAZLASIYLA BOZULUYOR. Tekrar belirteyim build işlemi sırasında uygun bir tipe dönüştürüldüğünden run-time aşamasında herhangi bir performans kaybı yaşanmıyor.Burada tip dönüşümünün yapılabilmesi için mutlaka İLK DEĞERİ vermeniz gerekiyor ve NULL bir değer atayamazsınız.

Diğer bir özellik ise Objects, Collection Initializers konusunda. Mesele Ibrahim diye bir sınıfımız olsun ve bunun yapılandırıcısını kullanarak nesnesini yaratırken bazı değerlerini de atayalım.

Ibrahim ibo = new Ibrahım (22,”yıldız teknik”); // normalde biz bu işi bu şekilde yaparız. Yani Ibrahim sınıfı için bir int ve bir string alan bir yapılandırıcı tanımlarız ve bunu kullanırız. Fakat C# 3.0 ile bu yapılandırıcıyı tanımlamaya gerek kalmıyor. Doğrudan aşağıdaki gibi nesneyi yaratabilirsiniz:

Ibrahim ibo = new Ibrahım {yas=22, okulu=”yildiz teknik”}; // Burada yas ve okulu değişkenleri Ibrahim sınıfında tanımlı PUBLIC SINIF DEĞİŞKENLERİ. Şimdi sorarım burada ben ; hani sınıf değişkenlerini public yapmaycaktık, hani güvenlik için mutlaka private olmalıydı ve ancak kendi metodlarımızla erişilebilir olmaydı?

Şimdi de gelelim ANONYMOUS TYPES konusuna. Nasılki biz klasik olarak bir değişken tanımlayacaksak mutlaka onun önceden tanımlı olmasını bekleriz. Mesela önceden yazmamış olduğunuz bir Ibrahim sınıfının ibo adlı nesnesini yaratamazsınız. Fakat C# 3.0 ile bunu anında yapmanız mümkün. Mesela şu örneğe bir bakın:

var ibo = new { yas=22, okul=”yıldız teknik” , website=”https://ibrahimdemir.wordpress.com” }

Bu özellik sayesinde uygulamaları daha hızlı geliştirmek mümkün olcaktır fakat bu yeni tipi başka yerlerde kullanmak biraz zor gibi geldi bana. Hem yine okunabilirlik berbat.

C# 3.0 ile ilgili olarak notalarımdaki son özellik de Extension Methods denilen özellik. Bu özellik bize ne sağlıyor diyorsanız C# içerisinde hazır olarak tanımlanmış metodların arasına kendi metodunuzu ekleyebiliyorsunuz. Mesela bir string tanımladınız ve sonra da o stringin adını yazıp noktaya bastınız. Size Visual Studio bazı metot isimleri getirir işte bunların arasına kendi metodunuzu da ekleyebilirsiniz. Burada dikkat edilcek 2 önemli nokta var:

1- Tanımlayacağınız bu metot mutlaka static bir sınıf içinde olmalıdır. (Bu sayede Microsoft amca bizlere static sınıf denilen şeyi kullandırtmış oldu)

2- Tanımladığınız metot mesela stringler için kullanılacaksa parametre olarak string verirken başına this ifadesini de eklemelisiniz . (ÖR: public static stringTersCevir (this string inputstring) {….}   ) 

Burada yazılan metodun sisteme eklenebilir olaması bazılar için heyecan verici olabilir ama bazılarınız da yani kendi metodumu yazıp onu erişilebilir kılsam da sonra da istediğim yerde onu çağırsam olmaz mı diye soracaktır. Olur elbette. İllaki noktaya basınca gelmesi gerekmiyor dimi? Önemli olan işlevi.

C# 3.0 ile ilgili söyleyebileceklerim bu kadar. Gelelim kafaları allak bullak eden LINQ (LANGUAGE INTEGRATED QUERY) ve kardeşleri olan DLINQ , XLINQ olayına. LINQ aslında sadece C# için değil tüm .net platformu için düşünülmüş bir çözüm.

Sonuçta uygulama geliştirirken hepimiz farklı kaynaklardan veri alma ihtiyacı duyarız. Bu bir XML dosyası olabilir ,bir text dosyası yada bir veritabanı olabilir. Sanırım artık uygulamaların çoğu veritabanına yönelik bir hal aldı. Özellikle de .NET platformunda web uygulaması geliştirenlerin büyük bir çoğunluğu veritabanına yönelik uygulamalar geliştiriyorlar. Burada yaşanan en büyük sıkıntı ise veritabanındaki entitylerin uygulamada sınıflara,nesnelere dönüştürülebilmesi. Burada bir tutarsızlık söz konusu. Uygulamanız Object Orineted yapıda fakat verilerinizi Relational olarak saklıyorsunuz. İşte LINQ da bundan dolayı ortaya çıkmış. Yani siz eğer kaynaklarınızdaki verileri uygulamaya taşıyorsanız neden uygulama içerisinde onları sorgulayamayasınız. Nasıl ki bir veritabanı içerisinden SQL ile veri çekiyorsak , buradaki tabloları sınıflara dönüştürdüğümüzde de uygulama içerisinde DLINQ(DATABASE LINQ) kullanarak sorgulama yapabiliriz. Aynı şekilde XML içerisinde de nasılki XPATH vb. teknolojilerle dolaşabiliyorsanız ,oradaki verileri uygulamaya taşıyınca XLONQ (XML LINQ) ile üzerlerinde işlem yapabilirsiniz. Burada dikkat ettiyseniz hala kaynaktaki veririnin nasıl object orineted yapıda uygulamaya aktarılacağından bahsetmedim. Bu iş içinde SQLMETAL aracı LINQ ile geliyor.

Özellikle de XLINQ ile Microsoft yeni bir XML  API’si tanımlamış durumda yani önceden kullanılan XPATH , XQUERY gibi teknikleri bir kenara bırakın da XLINQ kullanmaya başlayın diyor.

Seminerde Burak Bey’in bir sözü dikkatimi çekmişti: “EĞER C# ÖĞRENMEYE YENİ BAŞLIYORSANIZ 3.0 İLE BAŞLAYIN” demişti. Sanırım .NET framework hızlı değişimini sürdürüyor ve insanlar birgün bu değişimleri kovalamaktan bıkacaklar. Hatta bir grup varki kovalamacayı çoktan bırakmış. Yaptığım araştırmalar sonucunda gördümki hala piyasada framework 1,0 ile çalışmayı sürdürenler var.Bazı durumlarda koşuşturmacayı bırakıp izleyici kalmak tercih edilebiliyor.

Bu kadar şeyi anlattıp da bunları nasıl deneyeceğinizi anlatmamak olmaz.

  • Öcelikle bu adresten LINQ PREVIEW eklentisini indirip kurun.
  • Ardından aşağıda yer alan sunum kodlarını indirip açın ve oradaki SOLUTION’ı Visual Studio ile açıp çalıştırın
  • Hepsi bu kadar. Fakat LINQ için şimdilik Visual Studio’da intellisense desteklenmiyor bunu da belirteyim.

KAYNAKLAR:

computers-dotnet.jpgSEMİNERE AİT SUNUM ve KODLAR: http://rapidshare.com/files/16141000/LINQSeminer.rar.html

The LINQ Project: http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx

LINQ on CHANNEL 9: http://channel9.msdn.com/showpost.aspx?postid=202138

Reklamlar
Kategoriler:.NET, MESLEKTEN, NEDİR?
  1. Mart 27, 2007, 2:05 pm

    C# 3.0 ile ilgili yazıları yakından takip ediyorum.
    Bilgilerinizi paylaştığınız için teşekkürler.

  2. Mart 27, 2007, 3:10 pm

    Vakit buldukça yeni yazılar eklemey çalışacağım.
    İlginiz için ben teşekkür ederim.

  3. Kasım 27, 2007, 3:37 pm

    Selam ibrahim ;

    yeni seminerlerle ilgili bir konusalim , mail adresini bulamadım , bana bir mail atarmısın ?

  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: