C# dilinde 3.0 versiyonundan beri var keyword olarak var. Java'dan farklı olarak sadece syntactic sugar değil, gerekli de. 3.0 ile ortaya çıkan anonymous object/type özelliğini desteklemek için eklenmiş bir keyword.
var anonymousType = new {
Id = 2,
Name = "Test"
};
şeklinde anonymous object yaratabiliyoruz. Java'daki Map, .NET dünyasındaki Dictionary'den farklı olarak derleyicinin statik tip kontrol desteğini (Türkçe yazınca garip geldi gerçekten; static type checking) kullanmaya devam edebiliyoruz.
Syntactic sugar olarak da mantıklı bir özellik bence;
Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
yerine
var dict = new Dictionary<string, List<string>>();
şeklinde tipin explicit olarak belli olduğu yerlerde yazımı ve okumayı kolaylaştırıyor.
Ancak her özellik gibi abuse edilebiliyor. Bu durumda da kod okunmaz hale geliyor. Kod, genelde bir kere yazılıp 50 defa okunduğu için readability'nin çok önemli olduğunu düşünüyorum.
Uzun süredir Java ile ilgilenmemiştim. Bir proje için tekrar Java ile uğraştım bir süre. Maile konu olan var/val kavramlarını yani immutable/mutable değişken desteğini build sürecinde sağlayan
Lombok isimli bir library var. DTO için getter/setter, hashCode, toString vs gibi boilerplate kod yazılmasına da gerek bırakmayan
@Data gibi anatasyon desteği de var.
Java dilinde maalesef hala olmayan extension metotları, operator overloading, vs gibi özellikler için de
Manifold projesi dikkatimi çekti.
Java, library/ekosistem olarak çok büyük fakat dil olarak çok yavaş ilerliyor. Çok basit, ancak işlevsel bir özellik olan string interpolation daha yeni geldi mesela...