Her Java yazılımcısının okuması gereken kitapların başında Joshua Bloch’un yazdığı Effective Java kitabı gelmektedir. Java dilini detaylarıyla inceleyen ve 2017 sonlarında Java 9’a göre güncellenen bu kitap geçerliliğini Java var olduğu sürece sürdürecektir ancak Türkçe çevirisi tahmin edeceğiniz üzere yok.
Ben de hem Java öğrenmek isteyenlere hem de ileri seviyede Türkçe kaynak bulmakta zorlanan arkadaşlara yardımcı olmak amacıyla kitabı madde madde çevirmeye başladım. Aşağıda çevirdiğim kısımlar kitabın birebir tercümesi değildir, yer yer eklemeler/çıkartmalar yaparak ve cümleleri farklı şekilde ifade ederek anlaşılmasını kolaylaştırmaya çalıştım. Kitabı orijinal dilinde okuyan arkadaşlar bir hata görürlerse lütfen bildirsinler.
Önemli gördüğüm maddeleri kitabın başından başlayarak çevirmeye çalışacağım. Daha erken çevirmemi istediğiniz kısımlar varsa da lütfen bildirin, maddeler genellikle birbirinden bağımsız olduğu için sırasına göre takip etmek şart değil.
Nesne Yaratmak ve Yok Etmek
Effective Java Madde 1: Yapıcı Metot (Constructor) Yerine Statik Fabrika Metotlarını Kullanın
Effective Java Madde 2: Çok Sayıda Parametreyle Karşılaştığınızda Builder Kullanın
Effective Java Madde 3: Singleton Sınıfları Private Yapıcı Metot veya Enum Türüyle Güçlendirin
Effective Java Madde 4: Nesne Yaratılmasını İstemediğiniz Sınıfları Private Yapıcı Metot İle Güçlendirin
Effective Java Madde 5: Bağımlılıkları Kendiniz Yaratmak Yerine Dependency Injection Kullanın
Effective Java Madde 6: Gereksiz Nesne Yaratmaktan Kaçının
Effective Java Madde 7: Erişilmeyen Nesnelerin Referanslarından Kurtulun
Effective Java Madde 8: Finalizer (Sonlandırıcı) ve Cleaner (Temizleyici) Kullanmaktan Kaçının
Effective Java Madde 9: try-finally Yerine try-with-resources Tercih Edin
Bütün Nesnelerin Ortak Metotları
Effective Java Madde 10: equals() Metodunu Geçersiz Kılarken Sözleşmeye Uyun
Effective Java Madde 11: equals() ile Birlikte Mutlaka hashCode() Metodunu da Geçersiz Kılın
Effective Java Madde 12: toString() Metodunu Her Zaman Geçersiz Kılın
Effective Java Madde 14: Comparable Arayüzünü Gerektiğinde Uygulayın
Sınıflar ve Arayüzler
Effective Java Madde 15: Sınıfların ve Üyelerinin Erişilebilirliğini Kısıtlayın
Effective Java Madde 16: public sınıflarda erişim metotları kullanın, public alanlar değil
Effective Java Madde 17: Değişebilirliği (Mutability) Kısıtlayın
Effective Java Madde 18: Kalıtım Yerine Komposizyonu Tercih Edin
Effective Java Madde 19: Kalıtımı ya Tasarım ve Dokümantasyon ile Destekleyin ya da Yasaklayın
Effective Java Madde 20: Arayüzleri Soyut Sınıflara Tercih Edin
Effective Java Madde 21: Arayüzleri İleriyi Düşünerek Tasarlayın
Effective Java Madde 22: Arayüzleri Sadece Tür Tanımlamak İçin Kullanın
Effective Java Madde 23: Sınıf Hiyerarşilerini İşaretli Sınıflara Tercih Edin
Effective Java Madde 24: Statik Üye Sınıfları Statik Olmayanlara Tercih Edin
Effective Java Madde 25: Bir Kaynak Dosyada Gömülü Sınıflar Hariç Tek Bir Sınıf Tanımlayın
Üreyseller (Generics)
Effective Java Madde 26: Ham (raw) Türleri Kullanmayın
Effective Java Madde 27: Kontrolsüz Uyarılardan (unchecked warning) Kurtulun
Effective Java Madde 28: Listeleri Dizilere Tercih Edin
Effective Java Madde 29: Üreysel Türleri Tercih Edin
Effective Java Madde 30: Üreysel Metotları Tercih Edin
Effective Java Madde 31: API Esnekliğini Artırmak İçin Sınırlandırılmış Joker (bounded wildcard) Kullanın
Effective Java Madde 32: Üreysellerle varargs Metotları Birlikte Kullanırken Dikkatli Olun
Effective Java Madde 33: Tür Güvenlikli Heterojen Taşıyıcıları Göz Önünde Bulundurun
Enumlar ve Notasyonlar (Annotations)
Effective Java Madde 34: int Değişmezleri Yerine Enum Kullanın
Effective Java Madde 35: Ordinal Yerine Nesne Alanları Kullanın
Effective Java Madde 36: Bit Alanları Yerine EnumSet Kullanın
Effective Java Madde 37: Ordinal İndisler Yerine EnumMap Kullanın
Effective Java Madde 38: Enumlarda Kalıtımı Arayüz Kullanarak Taklit Edin
Effective Java Madde 39: Notasyonları İsimlendirme Modellerine Tercih Edin
Effective Java Madde 40: Override Notasyonunu Sürekli Olarak Kullanın
Effective Java Madde 41: İşaretçi Arayüzleri Tür Tanımlamak için Kullanın
Lambda Fonksiyonları ve Streamler
Effective Java Madde 42: Lambda Fonksiyonlarını İsimsiz Sınıflara Tercih Edin
Effective Java Madde 43: Metot Referanslarını Lambdalara Tercih Edin
Effective Java Madde 44: Standart Fonksiyonel Arayüzlerin Kullanımına Öncelik Verin
Effective Java Madde 45: Streamleri Akıllıca Kullanın
Effective Java Madde 46: Stream Kullanırken Yan Etkisi Olmayan Fonksiyonları Tercih Edin
Effective Java Madde 47: Dönüş Türü Olarak Stream Yerine Collection Tercih Edin
Effective Java Madde 48: Streamleri Paralel Yaparken Dikkatli Olun
Metotlar
Effective Java Madde 49: Parametrelerin Geçerliliğini Kontrol Edin
Effective Java Madde 50: Gerektiğinde Koruyucu Kopyalar Yaratın
Effective Java Madde 51: Metot İmzalarını Dikkatli Tasarlayın
Effective Java Madde 52: Aşırı Yüklemeyi (Overlading) Dikkatli Kullanın
Effective Java Madde 53: Değişken Sayılı Argümanları (varargs) Dikkatli Kullanın
Effective Java Madde 54: Null Yerine Boş Koleksiyon veya Dizi Döndürün
Effective Java Madde 55: Optional Döndürürken Dikkatli Olun
Genel Programlama
Effective Java Madde 57: Yerel Değişkenlerin Etki Alanını Kısıtlayın
Effective Java Madde 58: Klasik for Döngüleri Yerine for-each Tercih Edin
Effective Java Madde 59: Kütüphaneleri Öğrenin ve Kullanın
Effective Java Madde 60: Net Sonuçlar Almak İstiyorsanız double ve float Kullanmaktan Kaçının
Effective Java Madde 61: Kutulanmış (boxed) Yerine Temel Türleri Tercih Edin
Effective Java Madde 62: Diğer Türlerin Daha Elverişli Olduğu Durumlarda String Kullanmaktan Kaçının
Effective Java Madde 63: String Birleştirme Yaparken Performans Kayıplarına Dikkat Edin
Effective Java Madde 64: Nesneleri Arayüz Türleri Üzerinden Kullanın
Yaptığın çevirileri okuma fırsatım olmadı fakat, en yakın zamanda blogunu incelemeye başlayacağım. Yaptığın şey harbiden çok güzel, devam etmeni dilerim 🙂
Merhaba Seçkin bey,
“Effective Java” çevirisi fikri çok güzel. Bu çeviriyi hem en kısa zamanda bitirmek lazım hem de duyurmak gerekli ki insanlar faydalansınlar. İş-güç arasında bloga vakit ayırmak kolay değil, biliyorum. Ama bu çalışma yarım kalmamalı diyorum 🙂
Kolay gelsin.
Akın
Akın Bey merhaba,
Yorumunuz icin cok tesekkur ederim. Bu sekilde geri bildirimler almak insani daha cok yazmaya tesvik ediyor. Dediginiz gibi is guc arasinda vakit ayirmak zor ama ilk firsatta kitabin diger kisimlariyla devam etmeyi dusunuyorum.
Iyi calismalar
Merhaba,
Bloğuna gerçekten ciddi emek harcamışsın. Eline sağlık çok beğendim.
Merhaba Seçkin Bey,
Emeğiniz için teşekkürler. Diğer bölümler için takipteyiz. Umarım en kısa zamanda bizleri bilgilendirirsiniz. İyi çalışmalar
Merhaba,
Çok güzel ve anlamlı bir yazı dizisi olmuş, tamamlanmasını temenni ediyorum. Çalışmalarınızda başarılar.
Merhaba,
Çok güzel anlatmışsınız elinize sağlık.
Merhaba,
Güzel ve anlayabilecek sekilde anlatmissiniz. Elinize saglik.
Merhaba hocam.Çok teşekkürler.Başarılarınızın devamını dilerim.Saygılar,sevgiler.
Sen var ya meleksin. Teşekkürler emeğine sağlık. Şu dönemde ilaç gibi geldin.
Selam bu çeviriler hangi baskının çevirileri?
Yazının içeriğinde “Java dilini detaylarıyla inceleyen ve 2017 sonlarında Java 9’a göre güncellenen bu kitap….” şeklinde bir ibare var ama bu post 2015 yılında oluşturulmuş.
İlk başladığımda 2. baskı vardı onu kullandım, sonra 3. baskı çıkınca çevirileri gözden geçirip guncelledim yenisine göre.
Öncelikle Baküden selamlar. Elinize saglik. Tam ihtiyacim olan sheyi bu blogda buldum . Iyi ki yapmishsiniz . Bunun icin size çok çok minnetdarim. Basharilar ❤️
Merhaba, paylaşımın için çok teşekkürler, ellerinize sağlık. Effective Java kitabını okurken paralelde senin paylaşımlarını da okumak oldukça verimli oluyor.
Merhaba,
Emeklerin için gerçekten çok teşekkür ederim. Çok sağol.
Emeğinize sağlık indirdim bütün maddeleri yarın üniversite kırtasiyesine gidip kitap haline getiricem teşekkürlerr
emeğinize yüreğinize sağlık. çok büyük bir iş yapmışsınız tebrikler.
harika bir iş çıkartmışsınız Allah razı olsun
Furkan Sönmez Effective Java video eğitimi ile paralel okumaya çalışıyorum ve güzel bir pekiştirme sağlıyor. Emeğiniz için teşekkür ederim
Seçkin Bey siz nasıl bir kralsınız acaba 🙂 Bir konu araştirmak için googlelar iken bir yazınıza denk geldim ve 10 farklı blog da okuyup anlamadığım ya da bulamadığım detayları buldum yazılarınızda. Emeğinize sağlık. Gerçekten özenle hazırlandığı çok belli yazılarınızın çok teşekkürler.
Merhaba.Emeğiniz için teşekkür ederim.İngilizcesine baktım 3 ana konuyu eklememişsiniz.Exceptions,Concurrency,Serialization.Bu konularıda eklerseniz sevinirim.
Teşekkür ederim bu çeviri için, bazen direkt çevirip o çeviriden anlamak zor olabiliyor siz anlaşılır bi şekilde önemli yerleri yazmışsınız, faydanız için teşekkürler.
Seçkin Bey Merhaba,
Böyle değerli bir çalışmayı dilimize kazandırdığınız için çok teşekkürler
Harika olmuş elinize sağlık
Merhaba Hocam. Hocam emeginize sağlık, çok güzel iş yapmışsınız. Bunu bir de pdf yapıb buralarda bir yere koyarsanız çok iyi olur vallahi.
Çeviri için Teşekkür ederim yalnız pdf gibide yayimlasaydi çox daha güzel olurdu
Bu seri harika. Ingilisce bilmeyenler icin muhsetem bi resource. Elinize emeyinize saglik.