Yazılım Kodlama ve İ simlendirme Standartları v1.0 İçerik Yazılım Kodlama ve İsimlendirme Standartları... 2 1. Amaç... Hata! Yer işareti tanımlanmamış. 2. Kapsam... Hata! Yer işareti tanımlanmamış. 3. Genel Altın Kurallar... 2 4. Java Altın Kuralları... 5 5. Format... 5 Pascal İsimlendirme Standardı... 5 Camel İsimlendirme Standardı... 6 Genel İsimlendirme Formatı... 6 1
Yazılım Kodlama ve İsimlendirme Standartları 1. Genel Altın Kurallar YKS101: Nesne yönelimli programlama yaklaşımına uygun bir şekilde kodlama yapılmalıdır. (Class, Objects, Polymorphism, Inheritance, Encapsulation, Interface) YKS102: Kesinlikle GoTo kullanılmamalıdır. GoTo kullanılması gereken yerlerde, yerine göre if, break, continue, exit, return vs. kullanılmalıdır. YKS103: Yazılan kodlarda herhangi bir hataya sebep olmaması için warning kesinlikle bırakılmamalıdır. YKS104: Değişkenlerin (local veya sınıf) tanımlandığı yerlerde ilk değerleri mutlaka atılmalıdır. private int fmusteritoplambakiye= 0; boolean isdistactive = false; YKS105: String birleştirme (concatenation) += işlemlerinde 2-3 den fazla string birleştiriliyorsa StringBuilder kullanarak, Append(), AppendFormat() ve ToString() metodlarıyla bu işlemler gerçekleştirilebilir. StringBuilder sb = new StringBuilder(); sb.append("deneme"); String belgewarningmsg = sb.tostring(); YKS106: İf kontrolünde boolean br değişken kontrol edilecek ise fazladan mantıksal kontrole sokulmamalıdır. Yanlış kullanım if((issuccess == True) && (isopen == False)) Doğru Kullanım if((issuccess) && (!isopen)) YKS107: İf kontrollerinde else if blokları çok tekrarlanacak ise, bunun yerine switch-case kullanılmalıdır. YKS108: If, switch-case kontrollerinde sayıları ve string değerleri direk kullanılmalıdır. Gerekiyorsa enum veya constant- public static readonly property ile tanımlanarak ya da konfigurasyon dosyalarından okunarak kullanılmalıdır. YKS109: Sınıf içerisinde mutlaka regionlar kullanılmalıdır. Regionlar sırasıyla PRIVATE, PROTECTED, PUBLIC şeklinde olmalıdır. Gerekiyorsa bu regionlar içerisinde alt region açılabilir, yalnız regionlar maksimum 2 seviye olmalıdır. Region başlamadan önce ve başladıktan sonra, region bitmeden önce ve bittikten sonra birer satır boşluk bırakılmalıdır. 2
#region Private #region Fields (Seviye 2) #region Protected #region Public YKS110: Metodların, sınıf değişkenlerinin ve propertylerin erişim belirteçleri (access modifiers-public/protected/private) kullanım amacına göre doğru seçilmelidir. Private olması gereken bir şey public veya protected yapılmamalıdır. Ve bu kod parçaları doğru regionlar içerisine konulmalıdır. YKS111: Bir sınıfın, sınıf içerisinden instance değişken, metod veya property erişimlerinde mutlaka this/me anahtar kelimesi kullanarak erişim sağlanmalıdır. public LoginUser(Nullable<int> kod) : base() this.kod = kod; } YKS112: Tamamlanmamış, açığı olan, bug oluşturabilecek veya refactoring gerektirebilecek kod bloklarına mutlaka TODO yazılmalıdır. private void AddOrUpdateCounterCache(int threadid, int counterval)... cip.slidingexpiration = new TimeSpan(0, 30, 0); // TODO - 30 mins. by default. May be parameterized from app.config. } YKS113: Her fonksiyona başlamadan önce ve fonksiyonu bitirdikten sonra aralarında birer satır boşluk bırakılmalıdır. 3
YKS114: Bir metod 30-35 satırı geçmeyecek şekilde yazılmalıdır. Geçeceği durumlarda ayrı metodlara bölünmelidir. YKS115: Bir metod sadece kalıtım ile özelleştirilmiş sınıfta implemente edilmesi gerekiyorsa, bu base sınıfta if ile tip kontrolü yapılarak yazılmamalı, özelleştirilmiş sınıfta override metodlar ile yazılmalıdır. Yanlış Kullanım: YKS116: Bir sınıf içerisindeki fonksiyonda o sınıfın instance metod, değişken veya propertylerine erişmeden işlem yapılıyorsa o fonksiyonu static olarak tanımlanmalıdır. YKS117: Web projesinde static bir değişken tanımlanmamalıdır. Çünkü bu değişken uygulama seviyesinde aynı anda n process tarafından ulaşılabilen bir değişken olacaktır. Böyle bir ihtiyaç olduğunda yazılan kod mutlaka thread-safe olmalıdır. YKS118: Metodlar kendilerini açıklayıcı değil ise.net in summary özelliği kullanılarak, metot ve parametre açıklamaları yazılmalıdır. Summary yazılan metodlar kullanıldığı yerde açıklamaları ile birlikte hint olarak gözükürler. Ör: C# için http://msdn.microsoft.com/en-us/library/tkxs89c5(v=vs.71).aspx /// <summary> /// belgelerin ihtiyaç duyduğu ürün bilgilerini döndürür /// </summary> /// <param name="code">ürün takip kodu</param> /// <param name="isdepocikis">depocikis mı yapılıyor</param> /// <returns>urunbirimbilgi contractı döndürür</returns> public UrunBirimBilgi GetUrunBilgi(int code, bool isdepocikis) ------------- YKS119: Try-catch kullanımı gereken fonksiyonlar, catch ya da finally de bir işlem yapılacak olan metodlardır. Bunun dışında bir işlem yapılmayacaksa gereksiz trycatch kullanılmamalıdır. Eğer catch scope unda işlemlerden sonra geriye aynı exception fırlatılacak ise throw ex şeklinde değil throw şeklinde fırlatılmalıdır. Ör: Yanlış kullanım (1. Örnek) catch (Exception ex) 4
ErrorLog.Write(ex); throw ex; } Doğru kullanım(2. Örnek) catch (Exception ex) ErrorLog.Write(ex); throw; } Yukardaki 1. örnekte throw ex satırında program, yeni bir stack trace oluşturur ve yeni stack trace i döner. 2. Örnekte throw ise aynı stack trace i korur ve aynı exceptionı bir üst katmana fırlatır. YKS120: Döngü kullanımlarında while, foreach yapıları tercih edilmelidir. YKS121: Public field tanımlamak yerine, private veya protected field tanımlanarak propertyler ile erişim sağlanmalıdır. 2. Java Altın Kuralları Genel altın kurallara artı olarak aşağıdaki Java Android'e özgü kurallar geçerlidir. YKS301: User interface olarak yaratılan XML layout dosyaları anı klasör altında olma zorunluluğundan dolayı, ekran ismi+ uzantısı olarak tanımlanması gerekmektedir. Bu şekilde erişimleri kolay olacaktır. YKS302: Tüm dosyalar check-in yapılmadan önce ctrl+shif+f kombinasyonu ile formatlanmalı ve o şekilde check-in yapılmalıdır. YKS303: Business fonksiyonlar mümkün olduğunca C++ dosyalarında bulunmalıdır. 3. Format Bu bölümde temel olarak iki isimlendirme standardı olan Pascal ve Camel isimlendirme standartlarını kullanacağız. Pascal İsimlendirme Standardı Kelimelerin ilk harflerinin büyük diğer harflerin küçük yazılmasıdır. Örnek: MusteriEkSahaKodu.. 5
Camel İsimlendirme Standardı İlk kelimenin bütün harflerinin, diğer kelimelerin ilk harflerinin büyük diğer harflerin küçük yazılmasıdır. Örnek: musterieksahakodu Genel İsimlendirme Formatı Identifier Type İsimlendirme Stili Example(s) Kısaltmalar Büyük Harf ID, REF Namespaces Pascal AppDomain, System.IO Classes & Structs Pascal AppView Constants & Enums Pascal TextStyles Interfaces(*) I+Pascal IEditableObject Enum values Pascal TextStyles.BoldText Property Pascal BackColor Variables, and Attributes Methods Pascal (public) f+pascal (private, protected) (**) Pascal (public, private, protected) Camel (parameters) WindowSize fwindowwidth, fwindowheight Local Variables Camel recordcount ToString() SetFilter(string filtervalue) 6