Firmamız için Java Eğitimlerine bakarken Godoro‘da böyle bir yazı gördüm. Çok tartışılan bir konu olduğu için ilgimi çekti bende üşenmeden okudum. Neyse sadede gelirse biraz dalgaya vurarak güzel bir anlatm yapılmış sizlerle paylaşmak istedim.
Bana görede 😀 😀   c# javaya  göre çok kolay herşey çok kolay yapılıyor ama ince ayarlara izin vermemesi kötü. Javada bu yüzden dahada zor en baside indirgenmesi bu sanırım 😀

En Çok Tartışılan Dil : Java

C#‘ın Microsoft tarafından ortaya atılışından beri C#’ın Java‘ya benzeyip benzemediği, C#’ın Java’dan üstün olmadığı gibi başlıklar yazılım dünyasında en çok tartışılan konular arasında yer alıyor.Internet, iki dilin taraftarları arasındaki polemik düzeyine varan tartışmalar, iki dilin teknik özelliklerini karşılaştıran bilimsel makaleler, her iki dili de benimseyenlerin yaptığı yorumlar ve her iki dili de sevmeyenlerin verdiği beyanatlarla dolu.

C#’ın öncesinde Java’nın özellikleri en çok tartışılan konuların başında geliyordu. Java’nın Sun tarafından ortaya atıldığı günden beri, her yerde ne kadar kötü bir dil olduğu, ne kadar yavaş çalıştığı gibi konularda yoğun bir anti-Java kampanyası vardı. Elbette bunda Java teknolojisinin kendi ellerindeki teknolojileri geride bırakacağından korkan bazı firmalar var. (Yoksa ‘firmalar’ yerine sadece ‘firma’ mı demek lazım?) Ancak herşeye cheap jerseys rağmen Java giderek yaygınlaştı, C++ gibi ‘güçlü’ diller, Visual Basic gibi ‘kolay’ diller arasında var olmayı bildi. Hatta giderek bir çok geliştirici eski dillerinden vazgeçip Java’ya geçer oldular. Java üniversitlerde okutulan, hemen her konuda yazılım geliştirmekte kullanılan bir dil oldu. Servlet ve JSP teknolojisiyle sunucu tarafında, J2ME‘la el cihazlarında, Swing ve AWT gibi arayüzlerle masaüstünde bir çok dile ve platforma rakip oldu. Bazılarında başarısız oldu, bazılarında sildi süpürdü. Java ‘rakipsiz’di. Ama artık bir rakibi var : C#.

C#’ın Java’dan daha iyi ve kötü olduğunu söyleyenler aslında genellikle ‘taraflı’ insanlar. Bu dillerden birini benimseyenlerin doğal taraflılığı değil bu üstelik. Şirketler açıkça kendi pazar paylarını düşünerek biri lehine diğerinin aleyhine propaganda yapıyor. Bunlar iki dili de bilen insanları hedeflemediklerinden, çok saçma, yanlış ve çarpıtıcı yorumlar da yapılabiliyor. İki dili de bilmeyen, ama öğrenmek isteyenleri sorduğu ortak bir soru var : “Hangisi doğru?”

C# Java’nın Nesi Oluyor?

C#’ın Java’yı model alınarak yaratıldığı bir çok yorumcunun ortak görüşü. Ancak bazıları onu model alıp daha iyisini gerçekleştirdiğini, bazıları da onu model almaya çalıştığını ama onun kadar iyi olamadığını söylüyorlar. C#’ın Java’yı model aldığını ve ona eşdeğer güçte bir dil olduğunu söyleyenler de var. İki dilin arasında farkların önemsiz olduğunu, önemli olanın onları destekleyen şirketler ve kurumların sayısı ve gücü olduğunu söyleyenler da oldukça fazla.

C#’ın Java’yı model aldığı özellikle gizlenmiş ve Microsoft tarafından sürekli C#’ın C++‘ı model aldığı iddia ediliyor. Tıpkı Java’nın C++’ı model almasına benzetiliyor. Bu kesinlikle yanlış. Bir kere Java’nın C++’ı Read model aldığı da yanlış. Java tamamen yeni bir programlama mantığıdır. C++’a sintax benzerliği C++’ın piyasada yaygınlığı ve bilinen bir dil olması nedeniyledir. C++’tan yola çıkılmış ama başka noktalara ulaşılmıştır. Pekala Pascal veya herhangi bir başka dil de model alınabilirdi. Java, C++’ın bir anlamda anti-tezidir. C++’ın tıkandığı noktalarda Java bir çözüm getirmiştir. C++ internetin dili olamazdı, olamadı da. Ama Java bunu başarabilmiştir. Buna karşın C/C++ makineye yakın dildir. Java asla bu noktada olamaz. Aslında Java’yla C++’ı karşılaştırmak bile anlamsızdır. Java’nın kendisi içerisinde C/C++ koduyla çalışıyor. Yani Java aslında 3.0 bir C uygulaması.

C#’ın C++’a benzemesi, onu model alması mümkün değil. Ancak sintax benzerliği olabilir. .NET platformunda Visual Basic.NET de var. O da Visual Basic‘i model almamış. VB.NET’le VB arasında sadece sintax benzerliği var. Aslında VB.NET, VB’nin sintax’ını Java’ya uygulayınca ortaya çıkan şeydir. Aynı şekilde C# da C++’nin sintax’ını Java’ya nerdeyse birebir uygulanmasıdır. C# özellikle herhangi bir Vs sintaks element’ine isim verirken C++’tan Merhaba almayı tercih etmiştir. Yani C#’ın Java görünüş olarak benzememesi için elden gelen gayret sarfedilmiştir. .NET platformu o kadar Java’yı model almıştır ki, .NET’te Java diliyle yazılmış kodlar çalışmakta ama Visual Basic’le yazılmış kodları çalışmamaktadır. Hoe Çünkü NET’in altaypısı VB’ninkinden o kadar farklı ki, Microsoft VB’yi desteklemeyi düşünmemiş. Ama Java’yı desteklemeye devam etmektedir. VB.NET de C#.NET gibi Java’ya rakip bir dil olmuştur ve onlara denk bir dildir. Tabii VB wholesale nba jerseys adı altındaki geçmişine elveda diyip Java’ya benzeyerek sağlamıştır bunu.

Peki C#’ın Java’da hiç mi farkı yok? Bunu söylemek imkansız. C#’ın Java’dan bir çok farklı yönü var. Ama bu farkların hiç biri C#’ı yeni bir dil, yeni bir porgramlama tekniği, yeni bir platform, büyük bir devrim olma özelliği getirmez. C#’ta olan Java’da olmayan özelliklerin çoğu ya sadece C#’ın C++, VB gibi dillerden aldığı, Java’nın kasten almadığı özellikler ya da bazı küçük sintaktik kolaylıklardır. Dil olarak C#, platform olarak .NET, Java’da olmayan hiç bir üstün özellik içermemektedir. Üstünlük diye bahsedilen hiç biri gerçek bir yenilik getirmemektedir. Hatta ‘üstünlük’ diye sayılanların çoğu, programcıların istediği ama istememeleri gereken kötü özelliklerdir. Örneğin çok dil desteği, birbiriyle uyumsuz bir çok parametre aktarma tekniği, hafızaya erişebilme hakkı.

C#’ın Java’yla Ortak Özellikleri

C#’ın Java’yla ortak özellikleri saymakla bitmez. Burada sadece bir kaç anahtar özellik verilecektir. Özellikle C#’ın Java’yla benzer olup C++’la hiç de benzer olmayan özeliklerini dikkat edilmesi gerekir.

  • İkisi de bir Intermediate Language‘e (Ara Dil’e) derlenip öyle çalıştırılıyor
  • İki dil de temelden Multi-Threaded, nesneler senkronize edilebiliyor.
  • İkisinde de global fonksiyon veya sabit yok.
  • İkisinde de Single Inheritance (Tekli Kalıtım) var.
  • Dizi ve string’lere erişimde sınır kontrolü var
  • İkisinde de Garbage Collection (Çöp Toplama) var.
  • 43 Operatörden 41’i aynı.
  • 50 Java keywordü’nden 38’i aynen C#’ta var, 8 tanesi de aynı anlama gelen farklı sözcükle belirtilmiş.

 

C#’la Java’nın Küçük Farkları

C#’la Java arasında sadece bazı kolaylıklar sağlayan, temel mantıkta değişiklik getirmeyen bir çok özellik cheap nfl jerseys var. Bir kaç örnek vermek gerekirse :

  • C#’ta primitive tipler nesne olarak kullanılabiliyor. (Bu Java’ya 1.5’de ekleniyor.) Cast etmekten ve her tip için method yazmaktan kurtarıyor.
  • Daha kolay iterasyon için foreach yapısı (Buna benzer bir yapı Java’ya 1.5’te geliyor.)
  • Try-catch bloğunda catch’in boş olması veya hiç olmaması.
  • C#’ta exception yakalamak veya deklare etmek zorunlu değil.
  • C#’ta Property şeklinde bir yapı var. Nesnenin property’lerine get/set yazmadan erişilebiliyor.
  • C#’ta operator overloding var. Java’ya kafa karıştırıcı olduğu gekekçesiyle konmamış bu özellik.
  • C#’ta funksiyon pointer’ı yerine kullanılan delegate var. Bir funksiyona başka bir fonksiyon parametre olarak aktarılabiliyor.
  • Event’leri desteklemek için ‘event‘ diye bir keyword var.
  • C#’ta C++’taki enum‘lar var. (1.5’de Java’ya tip güvenliği olan enum’lar gelecek.)
  • C#’ta bir çok kişinin lanetlediği ‘goto’ var. Ama daha sınırlı bir kullanıma sahip. Java’da ‘continue : label’ şeklindeki yapının biraz daha seçenek tanıyan hali.
  • C#’ta hem Java’daki ‘jagged‘ (değiken boyutlu dizilerle oluşmuş diziler) var hem de C++’daki rectangular array‘lar var.

 

C#’la Java’nın Önemli Farkları

  • C++’taki struct‘lar C#’ta var. Referans yerine değer tipi olarak tanımlanıyor.
  • Method’lara parameter aktarımı refout gibi özelliklerle belirtilebiliyor.
  • C#’ta attribute‘ler, yani derleyiciler için direktifler var. Java’da sadece @depracated attributesi derleme sonrasında kullanılıyor. Diğer attributeler sadece yorum olarak işe yarıyor.
  • C#’ta pointer var. Eğer ‘unsafe‘ diye bir anahtar sözcük kullanılırsa hafıza erişilebilir hale geliyor.

.NET’le Java Platformu Arasındaki Farklar

C#’la Java arasındaki farklardan başka, .NET’le Java Platform’u arasında önemli bazı farklar var.

  • Java’nın aradili yorumlanıyor. JIT sistemiyle birlikte sadce bazı kodlar performanstan kazanmak için yerli koda çevriliyor. C#’ın (.NET’in) ara dili önce derlenip öyle çalıştırılıyor. Bu yüzden daha hızlı çalıştığı söyleniyor.
  • C# Microsofotun COM teknolojisiyle tam entegre çalışıyor. Java, sadece windows işletim sisteminde çalıştığı için COM teknolojisiyle doğrudan entegre olmuyor.
  • C#, .NET, bir çok dilden biri. Java ise tek platform ve tek dil.

 

Sonuç

C#’ın Java’dan daha iyi olduğunu söylemek yanlış olur. Ancak Java kadar iyi olduğunu söylemek de yanlış olmaz. Augmented C#’ın Java’nın yerini alma olasılığı sıfır. Java o kadar yaygınlaştı ve tutuldu ki sahibi Sun batsa veya Java’yı bıraksa IBM, Netscape, Oracle ve daha bir çok firma sahiplenir. C#, Java’dan daha iyi bir dil bile olsa sahibine karşı yazılım dünyasında duyulan genel antipati Java’nın tercih edilmesini sağlayacaktır.

Ancak C#’ın Java karşısında tutunamayıp giderek kaybolacağını düşünmek de saçma. C#, üç aşağı beş yukarı Java kadar iyi bir dil, .NET de Java kadar iyi bir platformdur. Microsoft kendi teknolojileri bir yana bırakıp, her fırsatta eleştirdiği Java’yı ‘model’ alması yanlış değil doğru bir karardır. Microsoft’un Java’nın gücüne yakın bir güçte teknoloji çıkarmasaydı muhtemelen topu atacaktı.

Her ne olursa olsun, nesneye yönelik programlama mantığını kavramış, kötü diller ve teknolojilerle çalışmaktan nefret eden geliştiriciler için C#’ın çıkması büyük müjde. Patronun yada bir yöneticinin “Biz Microsoft’un teknolojilerine geçiyoruz!” demesi durumunda attan inip eşşeğe binmeyecekler. Bir attan inip başka bir ata binecekler. Hangisinin daha hızlı hangisinin daha güvenilir olduğu o kadar da önemli değil. İkisi de insanı istediği noktaya götürür. Önemli olan da bu.

Gelelim C# mı döver Java’mı döver sorusunun cevabına. Teke tek kalsalar Java C#’ı zar zor da olsa döver. Ama C#’ın babası (Microsoft), Java’nın babasını (Sun‘ı) döver. Ancak Java’nın akrabaları çok kalabalık. Amcası Netscape var, dayısı IBM var, eniştesi Oracle var, daha bir sürü akrabası var. Kimin kimin döveceği, çingene kavgasına dönen bu dövüşte kimin galip geleceği hiç belli olmaz. En iyisi iki tarafa da yakın durup, zamana ve mekana göre bir tutum takınmak. Visual C++’çıların Java’ya değil C#’a (ve VB’cilerin VB.NET’e, ASP’cilerin ASP.NET’e) yönelmeleri akıllıcadır. Ama Java geliştiricilerinin, Microsoft’a göbekten bağlı bir politika izlemiyorlarsa C#’a geçmeleri çok anlamsız olur. Java’nın uzun bir dönem daha, kendisine ‘gerçek’ bir rakip çıkana kadar gündemde olacağı kesin.