Java Günlüğüm
Yazılım, Java, BT, azıcık felsefe, biraz mizah...
  • Udemy Eğitimleri
  • Temiz Kod
  • Tasarım Kalıpları
  • Hakkımda
  • Arşiv
RSS
25 Mart 2014

JavaTürk Java Kod İsimlendirme ve Şekil (Format) Standardı

Akin Java, Java Dersleri

Giriş

Bu dokümanda, Java kodunda kullanılacak isimlendirme ve şekil (format) standartları sıralanmıştır. Bu dokümanın PDF haline buradan ulaşabilirsiniz.

Not: Bu yazıda ifade edilen isimlendirme ve şekil kuralları devamlı olarak yenilenmekte dolayısıyla da yeni sürümleri oluşmaktadır. Yeni sürümlere buralardan ulaşabilirsiniz: 0.2.

1. Temel şekil kuralları

1. Daima paragraf kullan. Kod yazarken parmakların sıklıkla şekil (format) tuşlarında olsun. İstediğin şekil yapısı için kullandığın IDE’nin ayarlarını en baştan düzenle.

2. Her satırda sadece bir cümle (statement) yaz.

3. Uzun satırları bir kaç satıra yay ki yatay kaydırmaya (scroll) ihtiyaç kalmasın. Satır uzunluğu herkes kendi ekranına göre ayarlamalıdır.

4. Mekanı rahat kullan: Mümkün olan her yerde boşluk, “ “, ve boş satır kullanarak okunurluğu arttır.

5. Blokları mümkünse “{ }” ile değilse boş bir satır ile ayır.

6. Zeka yarışına girme, “=” dahil en az 3 operatörlü ifadeleri anlamak operatörlerin öncelik ve ilişkilendirme bilgisine bağlı olmasın, parantez kullan.

Böyle yapma:

 ...
 rs = a + ++b * c/a * b;
 ...
 a += b += c;
 ...

Böyle yap:

 ...
 rs = a + (++b)* ((c / a)* b);
 ...
 b += c;
 a += b;
 ...

7. Zincirleme üye erişimi ile birleşik ifade yazma, her ifadede bir üyeye eriş.

Böyle yapma:

 ...
 customer.getCompany().getAddress().getStreet();
 ...

Böyle yap:

 ...
 Company company = customer.getCompany();
 Address address = company.getAddress();
 Street street = address.getStreet();
 ...

2. Genel isimlendirme kuralları

8. Daima İngilizce isimler kullan ve kesinlikle yanlış yazma, emin değilsen sözlüğe bak.

9. Daima anlamlı isimler kullan; uzun olsun, anlamsız olmasın.

 ...
 addedValueTaxRate, getDefaultAccountInterestRate()
 ...

10. Okumayı zorlaştıran (özellikle sesli harfleri atarak elde edilen) kısaltmalardan kaçın.

11. Tanıdık isimler kullan. Aynı şeyler için her yerde aynı ismi kullan.

12. Kısaltmaları büyük harflerle yazma.

Böyle yapma:

 ...
 hTTPSession, TCPIPConnection, getXMLNode(), getHTTPMethod()
 ...

Böyle yap:

 ...
 httpSession, TcpIpConnection, getXmlNode(), getHttpMethod()
 ...

13. Tutarlı ol. Aynı ismi sadece küçük-büyük harf ayrımıyla ya da hem kısa hem uzun şekliyle defalarca kullanma.

...
sqlQuery, sqlQry ya da session, ssn
...

14. İsimlendirmede daima “Camel Case” yaklaşımını kullan, alt çizgiden “_”, uzak dur. Camel Case’in iki türü vardır, her ismin baş harfinin büyük olduğu Upper Came Case (UCC) ile sadece ilk kelimenin ilk harfinin küçük, sonrasının UCC olarak devam ettiği Lower Camel Case (LCC).

 ...
 StudentInformation is UCC
 getAllStudents() is LCC
 studentAddress is LCC
 ...

3. Paket isimlendirme kuralları

15. Paket isimlerine internet alan adınızı tersinden yazarak başla.

 ...
 org.javaturk, tr.com.selsoft
 ...

16. Paketlerini küçük harfle yaz ve tek ve tekil isimler ver.

 ...
 tr.com.selsoft.atm.domain
 org.javaturk.designpattern.customer
 ...

4. Tip kuralları

17. Sınıf, arayüz, enumeration gibi tiplerin adlandırırken isim kullan ve UCC yaz.

 ...
Account, CheckingAccountService, StudentInformation
 ...

18. Arayüzleri adlandırırken daima isim ya da sıfat kullan ve UCC yaz.

...
Payable, ActionListener
...

19. Bir konuyla ilgili özellikleri, sabiteleri ya da metotları bir araya getiren tiplere çoğul isim ver.

...
AtmProperties, StringUtils
...

20. Enum tiplere tekil isimler ver.

Day, Month, Size

5. Değişken kuralları

21. Değişken adlandırmalarında isim kullan ve daima LCC yaz.

...
count, firstName, taxRate, orderNumber
...

22. Torbalar için çoğul isimler kullan.

 ...
 Collection<Student> students
 Map<Integer, Player> players
 ...

23. Boolean değişkenler için uygunsa edilgen fiil (ya da sıfat-fiil) kullan öyle ki başına “is” getirildiğinde anlamlı bir soru olsun. Boolean değişken isimlerinde “is” ya da “are” kullanma.

...
married, tankFilled, seatBooked, tasksFinished
...

24. Özellikler (properties) için daima JavaBean (bean) gösterimini kullan. Bean gösteriminde tüm değişkenler “private” (kalıtım durumunda “protected”) tanımlanır ve bunlara LCC olarak yazılmış set/get metotları ile ulaşılır:

 ...
 private String name;
 public String getName() {
    return name;
 }
 public void setName(String name) {
    this.name = name;
 }

Boolean değişkenler için getter olarak “is” ön ekli metot kullanılır:

 ...
 private boolean deceased = false;
 public boolean isDeceased() {
    return deceased;
 }
 public void setDeceased(boolean deceased) {
    this.deceased = deceased;
 }

25. Sık kullanılan yerel değişkenler için aynı kısaltmaları kullan.

String s ya da String str stream için in ve out, exception için e ya da ex

26. Kurucu ya da set metotlarına nesne değişkeni ile aynı isimde parametre geç, nesne değişkenine “this” ile ulaş. Bkz. #24

27. CamelCase yaklaşımının tek istisnası olarak sabitelerde (public, static ve final) araları alt çizgi “_” ile ayrılmış büyük harfli kelimeler kullan. Başka hiç bir isimde “_” kullanma.

 ...
 public static final double ADDED_VALUE_TAX = 0.18;
 ...

6. Metot kuralları

28. Get/set metotlarını JavaBean gösterimiyle yaz. Bkz. #24

29. Metot isimlerinde daima emir kipi kullan ve LCC yaz.

...
calculateTax(), findOwnerOfAccount(), fetchTransactions()
...

Kaynaklar

• Java Code Conventions September 12, 1997 (Oracle Java Code Conventions http://www.oracle.com/technetwork/java/codeconv-138413.html)

• http://www.ambysoft.com/downloads/javaCodingStandards.pdf

• http://www.ambysoft.com/downloads/javaCodingStandardsSummary.pdf

• Google Style of Java http://google-styleguide.googlecode.com/svn/trunk/javaguide.html

• Al Vermeulen et al., The Elements of Java Style, CU Press, 2007

Toplam görüntülenme sayısı: 6531

28 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
25 Mart 2014

Java’nın İsimlendirme ve Şekil (Format) Geleneği

Akin Java, Java Dersleri

Kimseyi rahatsız etmek değil amacım ama Java dünyası kadar kod standartlarına uyan bir başka programlama dili toplumu var mıdır bilmiyorum. Bu durum Java’yı bize kazandıranların ve Sun’ın zamanında kod geleneği ya da standardı kavramını bol miktarda vurgulamasıyla başladı ve yazarından tutun da IDElere kadar herkes bu geleneğe uydu ve katkıda bulundu. Standartlar yayınlandı ve Javacılar bunları daima uyguladılar. Amaç basit: Yazılım geliştirmek ve bunun bir parçası olarak kod yazmak doğası gereği zor. Bir de yan zorluklar çıkarmayalım. Yanal faktörlerin maliyetini olabildiğince sıfırlayalım ki esas probleme odaklanalım. Esas problem ise örneğin iş alanını iyi anlamak, nerelerinin değişebileceğini farketmek ve yapıyı buna göre geliştirmek ve kodlamak.

Ben bu dünyaya C ve C++ ile başladım. Oradaki gelenekten haberdar bir şekilde Java’ya geçtim. Uzun yıllar sonra çalıştığım bir pozisyonda C ve C++ kullanan arkadaşlarla bayağı bir mesai harcadım. O zaman farkettim ki Java kod geleneği ile C/C++ kod geleneği, hiç azımsanmayacak şekilde farklı. Java her ne kadar söz dizimi ve gramer açısından C++’a çok benziyor olsa da belli ki Java’yı geliştirenler, nasıl C++’ın sıkıntılı taraflarını dile almamışlarsa, taa o zamandan var olan C++ kod geleneğini Java’ya taşımaktan kaçınıp, çok daha tabiii ve okunur bir standart belirlenmesine öncülük etmişler. (Bu sebeple pek çok Java standardı dokümanı oluşturuldu ve hemen hepsi de çok yüksek bir oranda hem fikirdiler.) Hatırlıyorum C/C++’a okur olarak geri döndüğüm günleri de, hakikatten çok zorlanmıştım C++ kodunu okumakta. Hele alt çizgiler “_” bir fecaattı 🙂

Sonuç, Javacılar, ister Hindistan’da yaşasın ister ABD’de isterse de bu ülkede, herkes hemen hemen aynı formatta kod yazıyor. (Gerçi ben bu ülkede bu standartlara uymayan, haberi olmayan ama Java kitabı yazan ya da video ile eğitim yapan kişilere de rastlıyorum malesef.) Belki daha yeni Javacılar şekil (format) açısından değil de isimlendirmede problem yaşıyorlar, anlamlı isimler bulma konusunda zorluk çekip örneğin “executeThis()” isminde metotlar yazabiliyorlar. Aslında ayrı görünse bile anlam da şeklin bir parçası. Ve hem anlamlı isimlendirme hem de gözü rahat ettirecek, aşina olduğumuz şekilde yazmak çok önemli. Her kurumun bu tür standartları benimseyip, herkesin kullanmasını zorunlu tutması gerekli. Hatta böyle standartlara uyum kod reviewların ve performans değerlendirmenin bir parçası olmalı.

Ben de isimlendirme ve şekil konusunda var olan dokümanlardan ve kendi tecrübelerimden faydalanarak Türkçe bir standart dokümanı oluşturdum. Ve bir sonraki yazıda sizinle paylaşıyorum.

Toplam görüntülenme sayısı: 1856

11 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
22 Mart 2014

Yeni Javacının Sefaleti ya da Poverty of a Newbie Java Programmer

Akin Java

Yazı dizisi olan yayınlamaya başladığım Java Kodunuzun Nesne-Merkezli Olmadığının 10 İşareti başlıklı yazıların ilkinde aşırı statik metot kullanımını ele almıştım. Bu yazıda bir yerde şöyle dedim:

“… (statik metotların aşırı kullanımı) Programlamada yeni olan ya da tamamen prosedürel dünyaya alışkın programcıların Java kodu yazmaya başladıklarında sıklıkla karşılaştıkları bir durumdur. Problemli olan şey, statik kullanımının bulaşıcı ve yayılma eğiliminde olduğu gerçeğidir. Bir sınıf oluşturup üzerine statik metotlar ve alanlar koymaya başladığınızda kısa sürede kendinizi sadece statik metot yazarken bulacaksınız.”

Evet doğru, bir kere statik kullanmaya başladınız mı, her şeyin artık statik olarak devam etmesini engelleyemezsiniz. Statik kullanmada, bahsettiğim yazıda açıkladığım gibi bir problem yok, doğru yerde kullandığınız müddetçe.

Statik kullanımının nasıl bulaşıcı olduğunu göstermek için genelde Java’ya giriş eğitimlerinde kendi kendime konuşarak bir oyun oynarım, bir monolog yani. Bu oyundaki kişi yeni yetişmekte olan bir Javacıdır. Bu Javacı okulda almış olduğu örneğin “Java ile nesne-merkezli programlamaya giriş” isimli dersin hocasının verdiği program örneğinin benzerini eve gelip, kendisi yapmaya çalışmaktadır. Tek derdi bir değişkene bir değer atayıp sonra da onu ekrana basmaktır. Yani şöyle bir sınıf yazar:

public class MyFirstOOProgram {

	private int i = 5;

	public static void main(String[] args) {
		System.out.println(i);
	}
}

Yukarıda da görüldüğü gibi yeni bir Javacı ya da nesne-merkezli programlamaya yeni başlamış olan arkadaşımızın yapmak istediği şey, bir nesne değişkeni tanımlayıp sonra da main metodunda onu print etmektir. Son derece masum bir istek 🙂 Evet “i”yi nesne değişkeni olarak tanımlıyor ama aslında derdi “nesne değişkeni” tanımlamak değil, çünkü daha nesnenin ne olduğunu bilmiyor, henüz kafasına oturmuş durumda değil. Derdi sadece bir değişken tanımlayıp onu print etmek. Aslında bu değişkeni main metotta tanımladığında problem olmuyor ama main metodunun dışında tanımladığında problem olduğunu görüyor. Derleyici “System.out.println(i);” satırında problem veriyor ve “Can not make a static reference to non-static variable i” gibi bir mesaj veriyor. Tabi sonuçta yeni Javacı için bu mesaj hiç bir anlam ifade etmiyor.

Yeni Javacımız bu problemin üstesinden gelmeye kararlı. Ve programcılığın gereği olarak başlıyor hatayı giderebilmek için programın orasıyla burasıyla oynamaya. Amaç bu “i” 5 olarak basılacak 🙂 Lafı uzatmayalım, pek çok denemeden sonra “i” değiskenini tanımladığı satıra “static” anahtar kelimesini koyduğunda yani satırı “private static int i = 5;” şekline getirdiğinde programı çalışıyor. Yani yeni Javacı olan arkadaşın ilk nesne-merkezli programı basit bir “static” eklemesiyle şu hale geldi ve çalıştı;

public class MyFirstOOProgram {

	private static int i = 5;

	public static void main(String[] args) {
		System.out.println(i);
	}

}

Nesne-merkezli programlamayı bilmeyen, muhtemelen kendisine “Google programcısı” sıfatı daha uygun düşen arkadaşımız, “i” değişkenini instance için tanımlamak yerine class için tanımlar hale gelince problemini çözdü ama o böyle düşünmüyor. Eksik olan şeyin “static” olduğunu düşünüyor. Olması gereken, artık nesne-merkezli programlama yaptığının farkında olup, “i”nin bir nesne içın tanımladığı gerçeğininden hareketle print edilecek ‘i”nin basit bir değişken olmayıp, bir nesnenin parçası olduğunu ifade etmesiydi. Yani “i”yi statik yapmak yerine önce bir nesne tanımlayıp sonra sonra o nesnenin “i” değişkenini print etmeliydi:

public class MyFirstOOProgram {

	private int i = 5;

	public static void main(String[] args) {
         MyFirstOOProgram object = new MyFirstOOProgram();
		System.out.println(object.i);
	}

}

Nesne yaratıp o nesnenin üzerinden “i”ye erişmek yerine “i”yi statik yapınca probleminin çözüldüğünü düşündü ve bütün bu maskaralık da burada başladı zaten. Bakın devamında ne oluyor.

Arkadaşımız bir de metot yaratıp, onun içinde “i”yi print etmek ister. Ve bu amaçla programa bir “f()” metodu ekler:

public class MyFirstOOProgram {

	private static int i = 5;

	public static void main(String[] args) {
		System.out.println(i);

		f();
	}

	public void f() {
		System.out.println(i);
	}

}

Tabi derleyici bu sefer de main metodundaki “f();” satırında problem verir. Ve, arkadaşımız ne düşünür? “İster misin problem f() metodunun statik olmaması olsun?”. Ve “f()” metodunu da statik yapar:

public class MyFirstOOProgram {

	private static int i = 5;

	public static void main(String[] args) {
		System.out.println(i);

		f();
	}

	public static void f() {
		System.out.println(i);
	}

}

Bu kod da

5
5

basar ve görev tamamlanır. Kısa bir denemeden çıkan ana fikir şudur: Java’da her şeyi statik yaparsan her şey yolunda gider. Bir problem varsa bir yerleri statik yaparak çözebilirsin.” 🙂

Yukarıdaki koda artık ne eklerseniz statik olmak zorundadır. Herhangi bir yeni değişken class değişkeni, herhangi bir metot da sınıf metodu olmalıdır. İşte bu yüzden “static” anahtar kelimesi bulaşıcıdır.

Aslolan statik değil nesnedir. O yüzden “nesne-merkezli” programlama diyoruz.

Toplam görüntülenme sayısı: 1573

16 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
20 Mart 2014

Java SE 8 Çıktı

Akin Java

Ne mutlu biz Javacılara ki Java SE 8 çıktı. Bu durum merakımızı tetikliyor ve heyecanlandırıyor bizi. Belki işimizi yaparken Java SE 8 kullanmaya daha çok zaman olsa bile iş dışı zamanlarımızda nelerin yeni olarak dile eklendiğini merak ediyoruz. Gerçi çıkış öncesinden takip ediyorduk, beta sürümlerini indirmiştik vs. ama son halinin heyecanı başka tabi.

Java’nın Oracle’in eline geçmesinden itibaren büyük bir ivme kazandığı ve bu sayede hem  SE’de hem de EE’de yeni sürümlerin arka arkaya geldiği bir gerçek. Açıkçası her yeni sürüm yep yeni özellikler de getirdiğinden, her ne kadar ilk bakışta çok heyecan verici görünse de bu durum nihayetinde Java-severlere ne kazandıracak bunu zaman gösterecek. Fakat şu gerçek ki Java gittikçe daha büyüyor, daha karmaşıklaşıyor ve tabi olarak da daha güçleniyor. Aslında Java “minimalist” bir dil olarak çıkmıştı. Bir şeyi yapmanın olabildiğince bir ve basit olan yolunu içinde barındırmayı seçmişti. Gosling’in 90lı yıllardaki konuşmalarını hatırlıyorum da, örneğin dilin ilk başlarda enumeration yapısına sahip olmaması, tamamen bu amaca yönelikti: Basit ve küçük bir dil. Ama artık Java’nın ne kadar basit olduğu tartışılır. Ne kadar büyük olduğu ise pek tartışılacak gibi değil, bayağı büyük. Bu anlamda Java SE 8, Java tarihindeki en büyük değişiklikleri içeriyor. Belki sayıca az ama etki alanı olarak geniş değişiklikler söz konusu. Java’ya fonksiyonel programlama yetkinliklerinin kazandırılması sanırım. Hadi hayırlısı…

Bir Javacı olarak ilk yapılacak 4-5 adım bence şu:

  1. JDK 8‘i indirmek.
  2. Java SE 8’in API’sini indirmek (JDK ile aynı sayfadan.)
  3. JDK 8 Demos and Samples’ı indirmek. (JDK ile aynı sayfadan.)
  4. Java SE 8 Tutorial‘ı indirmek.
  5. Java SE 8 Specification‘unu indirmek.

Ayrıca isterseniz Netbeans 8‘i ya da Eclispe Kepler‘i indirebilrisiniz.

Öte yandan Java SE 8 ile nelerin geldiğini merak ederseniz buraya bakabilirsiniz. Arkadaşlarımızdan Yaşar Safkan da blogunda sağolsun Java SE 8’e hızlı bir giriş yapmış.

Profesyonel ortamlarda Java Se 8’e geçmek açıkçası hemen oalcak bir şey değil. Kullanılan Java SE’nin sürümünü güncellemek öyle ha deyince olacak bir şey değil. Hele pek çok yerde hala Java SE 5 ve 6 kullanılıyor ve henüz Java SE 7’ye bile geçilmemişken.

Neyse, ben de yakında Java SE 8 ile ilgili yeni özellikler üzerine yazacağım burada.
Bol Java SE 8’li günler dilerim.

Toplam görüntülenme sayısı: 2660

9 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
«< 44 45 46 47 48 >»

Günlüğüme Hoşgeldiniz

Bu günlükte, Yazılım Mühendisliği, Bilgi Teknolojileri, Java, kişisel gelişim ve zaman zaman da diğer konulardaki düşüncelerimi sizlerle paylaşacağım. Umarım beğenir ve hoşça vakit geçirirsiniz.

Her türlü düşüncenizi, yorum olsun, beğeni ya da eleştiri olsun, bana iletmenizi rica ediyorum sizden. Ayrıca bana akin@javaturk.org adresinden ya da Twitter'dan ulaşabilirsiniz. Videolarıma da buradan ulaşabilirsiniz.

Teşekkür ederim.

Akın Kaldıroğlu

Rahat Okumak İçin

A Decrease font size. A Reset font size. A Increase font size.

Sosyal Medya

  • Twitter
  • Facebook
  • LinkedIn
  • Youtube

Son Twitlerim

→ Takip Etmek İçin

Abone Olun

Emalinizi girerek yazılardan haberdar olun.
Loading

Son Yazılarım

  • Udemy Eğitimlerim Üzerine
  • (başlıksız)
  • Clean Code / Temiz Kod Eğitimi Udemy’de
  • Java ile Nesne-Merkezli Programlamaya Giriş Eğitimi Udemy’de
  • Selsoft Video Eğitimleri
  • Spring ile Kurumsal Yazılım Geliştirme
  • Corona Günlerinde Design Patterns
  • Corona Günlerinde Java
  • JDK 10 ve “var” Özelliği
  • Onur Özcan
  • Analist ve İş Bilgisi
  • Farklı Dillerin Bakış Açısıyla Nesne-Merkezli Programlama
  • Java Nedir?
  • Bilgi Teknolojilerinde Yetenek Yönetimi – II: Tanımlar ve Eleştiriler – I
  • Alelade Hikayeler – II: Bir Başka Performans Problemi

Yazı Kategorileri

Yazı Takvimi

Mart 2026
P S Ç P C C P
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
« May    

Yazı Arşivi

Blogroll

  • Binnur Kurt'un Günlüğü
  • Ender'in Java Blogu
  • Erdem Seherler
  • Kızımın Günlüğü
  • Kurumsal Java
  • Levent Karagöl
  • Levent'in Java Blogu
  • Mert Can Akkan’s java tips,options, news…
  • Yaşar Safkan
  • Yasin Saygılı
  • Yazı Dünyası

Yazı Etiketleri

analiz Bilmek C Desen design pattern EJB Eğitim Fortran Hibernate Java Java'ya nasil baslarim Java dersleri Java EE Java Persistence API Java SE Java Sertifika Java Öğren Java öğreniyorum Java öğrenmek JPA Kalıp Kurumsal Java nesne nesne-merkezli No Silver Bullet object object-oriented Oracle Java Certifications pattern performans programlama programlama dilleri programlama nedir sertifika singleton tasarım tasarım deseni tasarım desenleri tasarım şablonu yazılım yazılım geliştirme Yazılım Mühendisliği yazılımın doğası yazılımın zorlukları Şablon

↑

© Java Günlüğüm 2026
Powered by WordPress • Themify WordPress Themes
 

Yorumlar Yükleniyor...