JAVA mı C# mı Sorusu Yanıta Ulaştı
Yazılım alanında bir çok programcı hangi yazılım dilini öğrenip kullanıcaklarına tam olarak karar veremiyorlar. Microsoft'un tekelindeki C# mı yoksa Oracle elinde bulundurduğu Java mı önce yoksa aralarında hiç bir fark yok mu ? Java ve C# her yönüyle karşılaştırıldı ve bir sonuca varıldı.
Java'nın Doğuşu
C# Oluşumu
	
	AYNI İŞLEVİ GÖREN JAVA VE C # KODLARININ KARŞILAŞTIRILMASI
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 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ı
►Method'lara parameter aktarımı ref, out 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, COM teknolojisiyle doğrudan entegre olmuyor.
	►C#, .NET, bir çok dilden biri. Java ise tek platform ve tek dil.
	
	
	Java’da pointer (işaretçi) ve pointer aritmetiği işlemleri yoktur. Buna karşın C#, unsafe block yapıları ile pointer işlemlerine izin verir, her ne kadar bazı kısıtlamalar olsa da. Partial class yapısı, sınıfların, interfacelerin ve Java’da bulunmayan struct yapısının biden fazla kaynak dosyaya bölünebilmesini sağlar. Partial class özelliği C# da mevcut iken, Java’da bu tür bir özellik bulunmamaktadır.
	 
	C++ da bulunan virtual method özelliği C# ile de karşımıza çıkıyor. Java’da tüm sınıf methodları otomatik olarak virtual olarak tanımlıdır. Bu sayede, herhangi bir sınıfı genişlettiğinizde (extends) super sınıfın methodlarını herhangi bir ekleme gerektirmeden, doğrudan override edebiliyoruz. Ancak C# da bu böyle değil aynen C++ da olduğu gibidir. C# ile, herhangi bir sınıfın methodunu override etmek için super classda bu method virtual olarak deklare edilmelidir. Java’da final methodlar tanımlayarak, methodların override edilmesini önleyebiliyoruz.
	 
	Preprocessor (Önişlemci) direktifleri C# ile kullanılabiliyor. Bu sayede, kodun belirli bölgelerini belirli durumlar için derlenmesini sağlayabiliyoruz. Ancak Java’da preprocessor özelliği bulunmuyor.
	 
	Generic tipler Java ve C# dillerinde mevcut. Ancak Java’da, generic tipler primitive tiplerle kullanılamazken, C# ile kullanılabiliyor. C# da goto komutu varken, Java’da yoktur. C# bazı kısıtlamalar dahilinde operator overloading işlemine izin verirken Java, izin vermez.
	 
	C# da method override işlemini yapabilmek için, override anahtar sözcüğünü kullanmak gerekiyor. Override anahtar sözcüğü kullanılmadan yapılan işlemler C# da, yeni bir method olarak ele alınır. Ancak Java ile herhangi bir anahtar sözcük gerektirmeden doğrudan super class methodlarını override edebiliyoruz.
	
	
	Java daki her primitive data type ın C# da bir karşılığı vardır. Ancak C#, Java’ya oranla çok daha fazla primitive data type sunar. Java’daki tüm primitive typeların aynı isimle karşılığı C# da da bulunmaktadır. Ancak Java’daki byte ın karşılığı C# da sbyte dır. C# byte veri tipi unsigned dır. Bunun haricinde C# Java’da olmayan işaretsiz tamsayı değerleri de sunar. ulong, ushort, uint ve decimal tipler Java’da yoktur.
	 
	C#, Java’da olmayan method pointerlar sunar. Delegate adı verilen bu yapı ile C# da, methodlar parametre olarak başka methodlara geçirilebiliyor. Delegateler, C# da event handling (olay yönetimi) ve callbackler için kullanılıyor.
	 
	Olay yönetimi Java’da Observer tasarım şablonu ile gerçekleştirilirken, C# da olay yönetimi, dil seviyesinde delegate ler yardımı ile yapılmaktadır. C# da Java’da bulunan checked exception sistemi yoktur. C# sadece, çalışma zamanında yönetilen unchecked exception sistemini destekler. C#, Java’da setter ve getter methodlar ile yapılabilen instance field işlemlerini Properties adı verilen bir mekanizma ile yapılmasını sağlar. Bu sayede ekstra getter setter methodlar yazılmasına gerek kalmıyor. C#, Java’da bulunmayan ve indexer adı verilen bir yapı ile [] operatörünü overload ederek, sınıf örnekleri üzerinde array tarzı işlemler yapılabilmesini sağlar.
	 
C# da, C/C++ da bulunan struct yapısı mevcut ve veri tipi olarak kullanılırken Java’da bu yapı bulunmuyor. C# Exception tanımlamak ve yakalamak gibi bir zorunluluk yok. Java, ortaya çıkış felsefesi gereği (robust application) buna izin vermez.
Java’da C# da bulunan static class yapısı yoktur. Static sınıflar, instance field, instance constructor gibi yapılara izin vermez. Başka bir sınıf tarafından genişletilemez. C# da iterasyon işlemini kolaylaştırmak için, Java’da bulunmayan yield adında bir anahtar sözcük bulunmaktadır. Ancak tam olarak ne işe yaradığını bilmiyorum. C# da ref ve out gibi anahtar sözcükler ile methodlara parametre geçirilebiliyor. Java’da böyle bir yapı yok.
Sonuç Olarak
Birini bilen bir diğerinide kısa zamanda öğrenebilir.
- 
                    
                             Dünyanın En Görkemli 10 Güneş Tarlası Dünyanın En Görkemli 10 Güneş Tarlası
- 
                    
                             Dünyanın En Büyük 10 Makinesi Dünyanın En Büyük 10 Makinesi
- 
                    
                             2020’nin En İyi 10 Kişisel Robotu 2020’nin En İyi 10 Kişisel Robotu
- 
                    
                             Programlamaya Erken Yaşta Başlayan 7 Ünlü Bilgisayar Programcısı Programlamaya Erken Yaşta Başlayan 7 Ünlü Bilgisayar Programcısı
- 
                    
                             Üretimin Geleceğinde Etkili Olacak 10 Beceri Üretimin Geleceğinde Etkili Olacak 10 Beceri
- 
                    
                             Olağan Üstü Tasarıma Sahip 5 Köprü Olağan Üstü Tasarıma Sahip 5 Köprü
- 
                    
                             Dünyanın En İyi Bilim ve Teknoloji Müzeleri Dünyanın En İyi Bilim ve Teknoloji Müzeleri
- 
                    
                             En İyi 5 Tıbbi Robot En İyi 5 Tıbbi Robot
- 
                    
                             Dünyanın En Zengin 10 Mühendisi Dünyanın En Zengin 10 Mühendisi
- 
                    
                             Üretim için 6 Fabrikasyon İşlemi Üretim için 6 Fabrikasyon İşlemi
- 
                    
                         ABB Sürücü Ailesi & Yeni ACS480 Sürücüler | Webinar ABB Sürücü Ailesi & Yeni ACS480 Sürücüler | Webinar
- 
                    
                         Geleceğin Güç Altyapısı Galaxy VXL ile Tanışın | Schneider Electric Geleceğin Güç Altyapısı Galaxy VXL ile Tanışın | Schneider Electric
- 
                    
                         Senplus Pano Sistem Tanıtımı I Webinar Senplus Pano Sistem Tanıtımı I Webinar
- 
                    
                         Nasıl Dönüşür | Rüzgar Enerjisi Nasıl Dönüşür | Rüzgar Enerjisi
- 
                    
                         Nasıl Dönüşür | Hava Kalitesi İndeksi Nasıl Dönüşür | Hava Kalitesi İndeksi
- 
                    
                         Nasıl Dönüşür | Sorumlu Üretim ve Tüketim Nasıl Dönüşür | Sorumlu Üretim ve Tüketim
- 
                    
                         Webinar I Sigma Elektrik'ten Yeni ve Yenilikçi Ürün Portföyü Tanıtım Webinarı Webinar I Sigma Elektrik'ten Yeni ve Yenilikçi Ürün Portföyü Tanıtım Webinarı
- 
                    
                         Nasıl Dönüşür | Eko Etiket Nasıl Dönüşür | Eko Etiket
- 
                    
                         Nasıl Dönüşür | Uzaktan Erişim Nasıl Dönüşür | Uzaktan Erişim
- 
                    
                         Nasıl Dönüşür | Paris Anlaşması Nasıl Dönüşür | Paris Anlaşması
 
         
 
                     
                 
                 
                 
                 
                 
                                             
                                             
                         Osman Kemal Dağ
                        Osman Kemal Dağ
                             EN 50136 Standardı: Alarm İletim Sistemlerinde Güv...
                    EN 50136 Standardı: Alarm İletim Sistemlerinde Güv...
                 Yüksek Gerilimde Güvenin Anahtarı | Advanced 5 kV,...
                    Yüksek Gerilimde Güvenin Anahtarı | Advanced 5 kV,...
                 Akustik Görüntüleme Nedir? Akustik Kameralar Nasıl...
                    Akustik Görüntüleme Nedir? Akustik Kameralar Nasıl...
                 Otomatik Transfer Şalteri (ATS) Nedir?
                    Otomatik Transfer Şalteri (ATS) Nedir?
                 ENTES EMM Serisi Multimetreler ile Güvenilir Ölçüm
                    ENTES EMM Serisi Multimetreler ile Güvenilir Ölçüm
                
 
                             Güneş Enerjisi Elektrik Üretim Sisteminin Tasarlan...
                    Güneş Enerjisi Elektrik Üretim Sisteminin Tasarlan...
                 Alternatif Akımın Temel Tanımları
                    Alternatif Akımın Temel Tanımları
                 Mühendisler Ne İş Yapar ve Ne Kadar Kazanırlar?
                    Mühendisler Ne İş Yapar ve Ne Kadar Kazanırlar?
                 IT Nedir? | IT Uzmanı Nedir?
                    IT Nedir? | IT Uzmanı Nedir?
                 BIOS Nedir? BIOS Ayarları Nasıl Yapılır?
                    BIOS Nedir? BIOS Ayarları Nasıl Yapılır?
                 2014 Yılının En Çok Kullanılan Programlama Dilleri
                    2014 Yılının En Çok Kullanılan Programlama Dilleri
                