C#’ta Tuple
Ocak 3, 2010 by mucit · 2 Comments
“Tuple” matematikten bilgisayar bilimine hoplayan, karışık tipteki elemanlar bulunduran dizileri temsil eden bir terim. Fonksiyonel diller bunu önceden beri destekliyor. Ama C# kıyılarına, dördüncü .NET‘te geliyor.
var data = new Tuple("bulutlararası", 2010);
Koda kulak verelim: farklı türde iki verinin peşpeşe bir constructor‘a verildiğini anlıyoruz. Oluşan tip, anonim tiplere benziyor. Bir farkla ki bunu az sonra anlatacağız.
Constructor yerine static metodumuz da var.
var data = Tuple.Create<string, int>("bulutlararası", 2010);
Tip çıkarımı, işe yaramaz mı:
var data = Tuple.Create("bulutlararası", 2010);
Şimdilik en kısa oluşturma şekli bu. Gelelim anonim tipler ile farka. Anonim tipler, metodun dönüş değeri olamıyor. Yazıldığı metodda mahpus; metodun kapsamına mahkum. O nedenle çok dar bir kullanım sahası var. Linq sorgusundan gelenleri almada problem yok ama sonrasında anonim tipler yanınızdan uzaklaşıveriyor.
Elemanlara ulaşalım:
var item1 = data.Item1; // "bulutlararası"
var item2 = data.Item2; // 2010
Tuple, bundan ibaret. Bir dördüncü .NET yeniliği. Mono de Icaza, hemen desteklemiş. Kereveti bize kalmış.
Programlama Dillerini Anlamak
Yıllarca forumlarda, usenet ve bilimum mecralarda programlama dillerinin, geliştirme ortamlarının fanatikliğini yapıp, tartışıp durduk. Ruby ve Python taraftarları, C# ve Java müdavimleri ve diğer dil sevdalıları birbirlerini yediler, yüzlerce blog yazıları yazıldı. Bir zaman böyle geçti gitti. Daha sonra sahneye Ruby on Rails açık kaynak web geliştirme framework’u çıkıverdi birden, Martin Fowler dayının “P of EAA“ kitabında bahsettiği pattern’ler bu framework ile birlikte ağızdan ağıza dolaşmaya başladı. İnsanlar 1995 yılından beri sahnede olan Ruby‘nin adını ilk defa duydular. Daha önce tartışmalarda hiç denk gelmemişlerdi halbuki. Rails ile birlikte Java dünyasını kasıp kavuran Struts, Spring gibi framework’ler eleştirilmeye başlandı, “Convention over configuration“ kavramı insanların gönlünü fethetti. Rails’in farklı platformları hedef alan benzerleri çıktı. Güneş batıdan doğmuşdu bu defa, insanlar yepyeni bir akım ile karşı karşıyaydılar.
Bu yeni akım programlama dillerinin bir amaç olmadığını, sadece bir araç olduğunu ifade ediyordu. Nitekim Rails ile, Ruby gibi bir dilin web uygulamaları geliştirilmesine nasıl da yatkın olduğunu ve Ruby ile hızlı bir şekilde nasıl prototip geliştirilebileceğini gördük. C# ve Java kıskacından biraz olsun kurtulduk bu yeni akımla. Sonra blog sayfalarını Google’ın Python kullandığına ilişkin haberler doldurmaya başladı. Evet dünyada arama motoru pazarı birincisi, insanların günlük hayatının vazgeçilmez bir parçası olan Google’dı bu. Nasıl olur da Google Python gibi bir dili kullanabilirdi? Halbuki Python sade ve basit bir dildi, içerisinde öyle kocaman özellikler barındırmıyordu. Yeni yetme programcıların kafası karışmıştı. Fakat sonra anladık ki Python kullanmasını bildiğinde çok kullanışlı, okunabilirliği yüksek ve hızlı öğrenme eğrisine sahip esnek bir dildi. Google, testlerini, test harness’ını yazmak ve sistemsel görevleri yönetmek için bol bol Python kullanıyordu. Aslında eski toprak system administrator arkadaşlar için Python veya Perl çok yabancı diller değildi. Fakat yeni nesil, Python dilini hafızasına kazımış oldu böylece. Django, Pylons ve TurboGears ile Python daha çok pekişti kafalarımızda. Bu gelişmelerle insanlar farklı amaçlar için farklı araçların olduğunu ve uzun zamandır da kullanıldığını net bir şekilde görmüş oldular.
Web servislerinin günlük hayatımıza girmesiyle beraber Flickr, Wikipedia veya Facebook gibi sitelerle tanıştık. Flickr gibi muhteşem bir servisin PHP ile kodlandığını biliyor muydunuz? veya Wikipedia’nın? Evet ikinci sınıf bir dil gibi görülen PHP (şahsen öyle olmadığını düşünüyorum) böyle muhteşem servislerin kodlanmasında kullanıldı ve kullanılmaya devam ediyor. At binenin kılıç kuşananındır prensibiyle asıl dilden daha çok, bu servisleri yazan sağlam geliştiricilere bakmak gerekiyor. Biliyoruz ki bu servislerin arkasında muazzam framework’ler var, bu framework’lerin belirli yerlerinde belirli diller kullanılıyor. Örnek vermek gerekirse Facebook, PHP dilini arayüz kodlamada kullanırken, Erlang‘ı chat altyapısında kullanıyor, Twitter arayüz geliştirmede Ruby (Rails) kullanırken, servis tarafında Scala kullanıyor. Farklı amaçlar için farklı araçlar kullanılıyor yani. Çünkü tek bir dil, framework veya teknoloji her hedefe uymayabiliyor.
Tek bir teknoloji bilmek ve onu iyi bir şekilde kullanmak elbette çok güzel bir meziyet fakat gerçekçi olmak gerekirse tek bir teknoloji, dil veya framework içerisinde sıkışıp kalmak, bize yeterli ufku ne yazık ki sağlayamaz. Hiç görmediğimiz farklı güzellikler bir yerlerde keşfetmemiz için bizi bekliyor olabilir. Bu yüzden sadece önümüze bakmak yerine arada bir etrafımıza bakıp yeni diller yeni ortamlar tanımalıyız. Farklı problemlerle karşılaştığımızda, İsviçre çakısında olduğu gibi uygun aracı (dil, framework vb.) bulup, o problemin çözümünde kullanmalıyız. Böylece hayat bizim için daha kolay olacaktır.
* Sevgili mucit’in yazmış olduğu “Web Programlamanın Şaşkın Paradigmaları” yazısı nedense bende böyle bir yazı yazma isteği uyandırdı
Hem tarihin tozlu sayfalarını karıştırmış olmak hem de programlama dilleri üzerine bu seriyi devam ettirmeyi istedim.
C#’ta her şey object’ten mi türer?
Ağustos 18, 2009 by mrok · 4 Comments
Kısaca cevabımız hayır. Bazılarınızın olur mu öyle şey yaaa dediğini duyar gibiyim. Evet gerçekten C#’ta her şey System.Object’ten türemiyor. Fakat C#’ta her şeyin object sınıfından türediğine dair bir myth var ortalarda. Türemeyen tipler neler derseniz, sizlere pointer tipleri var diyebilirim (unsafe kod zaten bambaşka bir dünya) veya interface tipleri var derim. Interface tipleri object’ten türemiyorlar fakat herkesin bildiği gibi object’e çevirilebiliyorlar. Bu konuya nereden geldiğimi sorarsanız Eric Lippert amcamın günlüğünde okuduktan sonra sözetmekte fayda var diye düşündüm. Orjinal makaleyi okumak isteyenler buraya tıklayabilirler.
