Sayfalar

PHP Kodlama Standartları - 1


Standardizasyon Onemlidir.

Bu standardin herkesi belli bir sekilde sinir etmesi beklenen bir etkidir. Son halini bu sayfada gormus oldugunuz dokuman bir cok proje, bir cok sirket ve konu uzerinde tartisarak gecirilen cok sayida saat sonucunda bu halini almistir. Herhangi bir kisi veya kurumun sahsi tarzi degildir ve lokal olarak yapilabilecek degisikliklere aciktir.

Iyi Yonler:

Bir proje ortak bir standarda uydugunda bazi guzel seyler olur:
* Programcilar koda bakip neler olup bittigini kolaylikla anlayabilir.
* Yeni baslayanlarin konuya hakimiyet kazanmasi hizlanir ve kolaylasir.
* PHP'ye yeni baslayan insanlar kendi tarzlarini gelistirmek ve onu olumune savunmak zorunlulugundan kurtulur.
* PHP'ye yeni baslayan kisilerin ayni hatalari defalarca tekrarlamasi engellenmis olur.
* Tutarli ortamlarda hata yapma ihtimali azalir.
* Programcilarin ortak bir dusmani olur. :-)

Kotu Yonler:

Bir de kotu yonlere goz atalim:
* Standard genellikle aptalcadir cunku PHP 'den anlamayan birisi tarafindan yapilmistir.
* Standard genellikle aptalcadir cunku benim yaptigimin aksini soylemektedir.
* Standardlar yaraticiligi azaltir.
* Insanlar tutarli olduklari surece standardlar gereksizdir.
* Standardlard cok fazla yapilanmaya sebep olur.
* Insanlar zaten standardlari kaale almazlar.

Tartisma:

Bir cok proje yoneticisinin tecrubeleri, standarlarin projelerin daha sorunsuz ilerlemesini sagladigi sonucuna ulasmaktadir. Peki basari icin standardlar gerekli midir? Tabii ki hayir. Fakat standardlarin olmasi bize projelerimizde yardimci olacaktir, ve bulabilecegimiz butun yardima ihtiyacimiz vardir. Durust olun, herhangi bir standarda karsi olan fikirlerinizin cogu sizin egonuzdan kaynaklanmaktadir. Standardlarda karsilastigimiz kararlarin pek azi teknik acidan yetersiz denebilecek seviyededir. Bu farkli kararlar olsa olsa sahsi bir tercihin sonucudur. Bu yuzden esnek olun ve butun projelerin temelinde takim oyunu oldugunu ve projelerin butun takimin cabasiyla basariya ulasacagini unutmayin.

Standardlarin Uygulamasi:

Oncelikle, bir standard konusundaki supheler ve sorunlar grup icerisinde tartisilip bir sonuca baglanmalidir. Kimbilir belki de elinizdeki standard icinde bulundugunuz duruma uygun olmayabilir. Bu standard bazi onemli unsurlari goz ardi ediyor olabilir. Hatta belki de yonetimde buyuk nufuzu olan kisiler standarddaki bazi unsurlara karsi olabilir.

Ilk tartisma asamasindan sonra varilan sonucun kabul edilebilir oldugunu, diger bircok programci tarafindan kabul edilebilir bulundugunu ve bu yuzden takip edip uygulamaya deger oldugunu ve gerekirse bu konuda sahsi tavizler verilebilecegini benimsemek gerekir.

Eger proje grubu bu standarda gonullu olarak katilmiyorsa yonetim bu standardi kodun kalite kontrolunden gecmesi icin uyulmasi gereken zorunlu sartlar olarak da niteleyebilir.

Bir Fikri Kabul Etmek:

1. Mumkun degil.
2. Mumkun olabilir, ama zayif ve hic ilginc degil.
3. Dogru ve ben dogru oldugunu zaten soylemistim.
4. Oyle oldugunu ilk ben dusundum.
5. Kim daha farkli oldugunu dusunebilir ki?

Yeni bir fikri kabul etme yolunda eger negatif bir onyargi ile ilerliyorsaniz, lutfen acik fikirli ve yeniliklere acik olmaya calisin. Boyle yaptiginiz halde bile hala sonucla ayni fikirde olmayacaginiz durumlar soz konusu olabilir, fakat yine de farkli bir yolu/yontemi kabul edebilmek icin takip etmeniz gereken bir yol vardir. O yolda ilerlemekten kendinizi mahrum etmeyin.


ISIMLER:

Konuya Uyan Isimler Secin

Isimler programciligin kalbidir. Eskiden bir insanin gercek adini bilmenin o kisi uzerinde sihirli guclere sahip olmayi sagladigina inanilirdi. Eger birsey icin dogru ismin ne olmasi gerektigini biliyorsaniz, kendinize ve sizden sonra gelecek programcilara kod uzerinde kullanibilecekleri buyuk bir guc veriyorsunuz demektir.

Bir isim, icinde bulundugu cevre hakkinda uzun ve derin bir dusunme surecinin urunudur. Sadece bir sistemin butun olarak calisma prensibini tam olarak anlayan bir programci sisteme tam anlamiyla uyan isimler bulabilir. Eger isim uygunsa geri kalan hersey dogal bir sekilde uyacaktir. Bu sayede iliskiler acik, anlamlar ulasilabilir, ve insancil beklentilerden yola cikarak ulasilan sonuclar anlamli olacaktir.

Eger kodunuza baktiginizda isimleri 'sey', 'birsey', 'bunu_yap','suraya_git', 'onu_calistir' gibi isimlerle degistirdiginizde birsey farketmeyecek gibi geliyorsa, o kodun dizaynina bir daha goz atsaniz iyi olur.


Sinif Isimleri

* Sinifin ismini, sinifin ne olduguna bakarak verin. Eger ismi bulmak konusunda cok ugrasiyorsaniz bu sisteminizin dizaynina yeteri kadar zaman harcamadiginizin bir belirtisidir.
* Uc kelimeden fazla birlesik isimler sistem dizayninizin bazi seyleri bir birine karistiriyor olabileceginin bir habercisidir. Dizayninizi tekrar gozden gecirin. Bir CRC karti oturumuyla objelerinizin gereginden fazla sorumluluklarla yuklenmis olup olmadigini kontrol edin.
* Bir siniftan kalitim/miras yoluyla (inheritance) baska bir sinif olusturdugunuzda ana sinifin ismini alt sinifin ismi icinde kullanmaktan kacinin. Eger bir sinifiniz varsa o sinif kendi ayaklari uzerinde durabilmelidir. Hangi baska siniftan olusturulmus oldugu onemli olmamalidir.
* Eger siniflariniz bir ortak baslik altinda toplanabilir nitelikte ise, yani benzer bir amaca hizmet ediyorlarsa bu siniflari belli bir baslik altinda toplamak da mumkundur. Ornegin birkac 'motor' sinifiniz oldugunu dusunursek, SorguMotoru, AramaMotoru gibi sinif isimleri kullanilabilir.


Metod ve Fonksiyon Isimleri:

* Genellikle butun metod ve fonksiyonlar bir aktivite gerceklestirirler, bu yuzden isimleri de gerceklestirdikleri aktiviteyi belirtir nitelikte olmalidir. Ornegin, HataKontrol() yerine HataKontroluYap(), VeriDosyasi() yerine VeriDosyasinaCiktiYap() kullanilmalidir. Bu kullanim sekli degisken objelerinin ve fonksiyonlarin birbirine karismasini da engelleyecektir.
* Bazen sona eklenen kisaltmalardan yararlanilabilir.
- MAX : Bir degiskenin alabilecegi Maximum degerden bahsederken.
- Cnt : Bir sayac degiskeninin o anki degeriniden bahsederken ( Sayac = Counter )
- Key : Bir anahtar deger ( Anahtar = Key )

Ornegin: TekrarMax - Maksimum tekrar sayisi, TekrarCnt - Su anki tekrar sayisi gibi kullanilabilir.

* Bazen basa eklenen kisaltmalardan da yararlanilabilir.
(Bu bolumun aciklamasi yukari bolumle ayni. Ornek yanlizca ingilizce oldugunda basa eklenen bir ornek oluyor. Basa ek eklemek Turkce'ye uygun olmadigi icin burayi yok farzediyoruz)


Tamami Buyuk Harf Olan Kisaltmalar Kullanmayin:

* Normalde tamami buyuk harften olusan kisaltmalari bir isimde kullanmaniz gerektiginde bu kisaltmanin sadece ilk harfini buyuk yapip gerisini kucuk harfler devam edin.
Ornegin: 'YeniHTMLSayfasi' yerine 'YeniHtmlSayfasi' kullanin.

Aciklama:
* Tamami buyuk harflerden olusan kisaltmalari isim olarak kullanirken herkes farkli bir tarz izlemektedir. Isimlerin ne anlama geldigini tahmin edebilmek acisindan sadece bir tarzi kullanmak gereklidir.

Ornegin NetworkABCKey isminde ABC'den gelen C ile Key'den gelen K karismis durumdadir. Bazi programcilari rahatsiz etmeyen bu durum digerlerini sinir edebilmektedir. Bu yuzden degisik kisiler tarafindan yazilmis kod orneklerinde bu konuya degisik yaklasimlar goreceksiniz.


Ornekler:
class FluidOz // FluidOZ degil
class GetHtmlStatistics // GetHTMLStatistics degil