Ninja programclarn eskiden bu kurnazlklar yaparak kodu tekrardan dzenleyenleri alatrlard. Kod gurular bu kodlar anca test yazarak kontrol edebilirdi. Yeni kod yazmaya balayanlar bazen daha iyi kullanabilirler.
Dikkatlice oku ve hangisisin bul bakalm ninja, aylak, veya kod eletirmeni.
Bu kodlar kt yazma rnektirler.!!!
zlk akln ruhudur!
Kodunuzu olabildiince ksa tutmalsnz. Bu sizin ne kadar zeki olduunuzu gsterir!
rnein aadaki '?' kullanmna bakn:
// mehur bir javascript ktphanesinden.
i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
Harika deil mi? Eer byle yazarsanz, daha sonra gelen programc bu satra bakar ve i nin ne olduunu ve ne yapmaya altnz anlamak iin urar. Sonra size cevap almaya gelir.
Ona ksa yazmann her zaman daha iyi olduunu syleyin. Sizin yolunuza yani Ninja yoluna ekmeye aln!
Tek harf deikenler
Laozi (Tao Te Ching)Dao kelimesizlikte sakldr. Sadece Dao doru balamtr ve doru biter.
Dier bir ekilde daha hzl ( ve daha beter!) kod yazma yntemi de tek-harfli deikenler kullanmaktr. rnein a,b ve c gibi.
Ksa deiken isimleri kodun ierisinde aynen bir ninjann ormanda kaybolduu gibi kaybolurlar. Kimse onlar arayarak bulamaz. Hatta birisi bulsa bile ne olduunu zemez
. Fakat bir istisna var. Gerek ninja hibir zaman for dngsnde saya iin i kullanmaz. Her yerde kullanr ama orada kullanmaz. Biraz kurcalayn daha ok garip harf var. rnein x veya y gibi.
Garip deikenler eer dng gvdesi 1-2 sayfaysa daha harika olurlar. ( olabildiince uzun olsun). Eer birisi daha derinlemesine bakarsa, kolayca x in dng sayac olduunu anlayamasn.
Ksaltmalar kullan
Eer takm tek karakter veya garip kelimeler kullanmanz engelliyorsa sizde ksaltmalar kullann
rnein:
listlst.userAgentua.browserbrsr.- etc
Sadece gerekten iyi sezgilere sahip olanlar ne demek istediinizi anlayacaklar. Her eyi ksaltn. Sadece sizi anlayabilen insanlar sizin kodunuzu gelitirmeye layktrlar.
Ykseklere kn, soyutlan.
Laozi (Tao Te Ching)Mkemmel karenin keleri yoktur
Mkemmel gemi en son ina edilendir,
Harika nota karmak olandr,
Harika grselin belirli bir formu yoktur.
Bir isim seerken en soyut kelimeyi kullanmaya aln. obj, data, value, item, elem gibi.
-
Kusursuz deiken ismi
datanerede isterseniz kullann. Gerekten de tm deikenler data tutmuyorlar zaten, deil mi?Fakat ya
datadaha nce alndysa?valuekullanabilirsiniz. O da genel bir tanm. En nihayetinde tm deikenler bir value alr deil mi? -
Deikeni tipi ile tanmlayn:
str,numBir defa deneyin. Gen ninjann az ak kalsn byle isimler gerekten de kodu kt m yapar? Evet!Bir taraftan deiken isimleri hala bir ey ifade ediyor. Deikenin iinde ne var bunu sylyor: karakter, say veya baka bir ey. Fakat dndan bakas kodu anlamaya altnda, aracak ve aslnda hibir bilgi olmadn anlayacak
Gerekten de deerin tipi hata ayklarken kolayca bulunabilir. Fakat ya anlam? Hangi karakter veya sayy tutuyor? Bu sorunun cevab anca iyi bir meditasyon ile bulunabilir!
-
Peki artk bu deikenlerden kalmadysa? Tabii ki yanlarna say ekleyebilirsiniz:
data1, item2, elem5gibi.
Dikkat testi
Sadece gerekten dikkatli programclar kodu anlayabilmeli. Fakat bunu nasl kontrol edebilirsiniz?
Bunlardan biri benzer deiken isimleri kullann date ve data gibi.
Olabildiince birbiri ile kartrn.
Kartrn ki kodu okuyan kii kolayca okuyamasn. Eer bir yazm hatas falan varsa, uzun bir sre taklmsan, bir ay aras versin.
Zekice e anlaml szler kullanmak
ConfuciusHepsinden zoru karanlk odada kara kediyi bulmak, hele bir de odada kedi yoksa.
Ayn eyler iin birbirine yakn eyler kullanmak hayat daha ilgin klar ve sizin yaratclnz topluma gsterme asndan iyi bir frsattr.
rnein, fonksiyon neklerini kullann. Eer bir fonksiyon ekrana kt veriyorsa display_ n eki ile balayn. rnein displayMessage. Sonrasnda baka bir fonksiyonda ekrana yine bir ey yazdrmak isterseniz bu defa show_ kullann. rnein showName
Bu fonksiyonlar iin hibir farkllk olmasa da sanki farkllk varm hissi yaratn.
Dier ninjalarla birleip: Eer Ahmet ekranda yaz gsteren fonksiyona display.. ile balyorsa, Mehmet render.. ile balasn, Mehtapta paint.. kullansn gibi kararlar verebilirsiniz. Dnn kod ne kadar da ilgin ve eitli olur.
ve imdi hatrick!!!
birbirinden farkl olan iki nemli fonksiyonu ayn nek ile kullann.
rnein, fonksiyon printPage(page) yazcy kullansn. printText(text) ise ekrana yazdrsn. Diyelim ki sizin kodunuza aina olmayan bir okur bu iki fonksiyonun birbirine yakn isimleri olduundan kartrabilir. printMessage Mesaj nereye yazdrmaktadr? Ekrana m yoksa yazcya m? Daha da ii kmaza gtrmek ve ustalnz belli etmek iin printMessage(mesaj) kullanabilirsiniz. Bu da mesaj yeni pencerede gstersin.
simleri tekrar kullann
Laozi (Tao Te Ching)Btn taksim edildiinde, her
birinin isme ihtiyac var.
Yeteri kadar isim var.
Kii ne zaman duracan bilmeli.
Sadece ok gerekli olduunda yeni deiken ekleyin.
Bunun yerine, var olan kullann. Ona yeni deerler atayn
Fonksiyonda sadece paslanan deeri kullanmaya aln.
Bu gerekten o deikenin iinde u anda ne olduunu ve nereden geldiini anlamay zor klar. Az dikkatli birisi hepsinin zerinden satr satr gemeli ve her kod dalndaki deiiklii takip etmelidir.
Daha gelimi bir yaklam ise gizlice(!) bir dng veya fonksiyon iindeki deikenin deerini ayns ile deitirmek
rnein:
function ninjaFonksiyonu(elem) {
// 20 satr elem ile alr
elem = clone(elem);
// sonraki 20 satr elemin klonuyla alr.
}
elem ile almak isteyen yazlmc dostunuz fonksiyonun ikinci blmnde aracaktr. Sadece hata ayklarken bunun farkna varabilir. Sonrasnda bir de bakar ki aslnda klonuyla alyormu
lmcl derecede etkin bir yoldur. Hatta usta ninjalar bile bu olay karsnda aknlk yaayabilirler.
Elence iin alttan izgi kullanmak.
Deiken isimlerinden nce alttan izgi kullann _, __ gibi. rnein _isim veya __deger gibi. Bunun anlamn sadece siz biliyorsanz harika olur. Veya, daha iyisi, bunlar elencesine ekleyin. hibir anlam olmasn. Farkl yerlerde farkl anlamlara gelsin.
Bir tala iki ku vurdunuz. nce kodu daha uzun ve daha az okunabilir yaptnz, ikinci olarak, yazlmc dostunuzu tongaya drerek alttan izginin ne anlama geldiini bulmas iin uzunca bir sre uramasn saladnz.
Zeki bir ninja bir yerde alttan izgi kullanr, baka bir yerde kullanmaz. Bylece ileride kodu hataya hazr hale getirir.
Aknz gsterin
Herkese varlklarnzn (entity) ne kadar mkemmel olduunu gsterin. rnein harikaElement, guzelAlert, cokAkilliNinja gibi isimlendirmeler kodunuzu okuyanlar aydnlatacaktr.
Gerekten de bir yandan super..., harika..., mega... gibi kullanm fakat dier yandan hibir detay vermemi olursunuz. Okuyucunun bunun altnda yatan anlam bulmas iin birka saat meditasyon yapp hayatn sorgulamas gerekmektedir.
Global deikenlerin veya dtaki deikenlerin zerine baka deer yazn
Guan Yin ZiIktayken karanlktaki hibir ey grnmez
Karanlktayken, aydnlktaki her ey grnr.
Fonksiyonun iinde ve dnda ayn deiken isimleri kullann. Basit, fazladan efora hi gerek yok!
let kullanici = kullaniciBilgisi();
function yaz() {
let kullanici = farkliBirFonksiyon();
...
...bir sr satr...
...
... // <-- bir yazlmc kullanici deikeniyle almak istiyor...
...
}
yaz fonksiyonunun iine bakan bir programc muhtemelen, global kullanici deikeninin zerine yazan yerel bir kullanici deikeni olduunu gremeyecektir.
Sonrasnda dta bulunan kullanici deikenine bakacak ve kullaniciBilgisi fonksiyonunda bir yanl olduu kanaatine varacak. Ver elini hata ayklama!
Her yerde yan etki!
Baz fonksiyonlar hibir ey deitirmiyormu gibi grnr. rnein hazirMi(), izinKontrol(), tagbul() gibi. Hesaplamalar yapp veriyi geri dndrd ve bunun dnda bir deiiklik yaplmad tahmin edilsin. Dier bir deyile yan etkisi olmad.
En gzel kurnazlk bunlara kendi grevleri dnda ie yarar bir eylem yaptrn
arkadanzn yzndeki aknl dnebiliyor musunuz? hazirMi,kontrolEt, bul... gibi fonksiyonlar bir eyleri deitiriyor. Gerekten de snrlar zorlayan bir yntem.
Yine bir baka aknlk yaratacak yntem ise standart olmayan bir sonu dndrmek
Gerekten ne dndnz gsterin! izinKontrol mesela true/false dnmesin de daha karmak bir obje dnsn.
Her kim ki if(checkPermission(..)) yazarsa neden almadn anlayamasn. Onlara Dkmantasyonu oku diyebilirsiniz. Sonra bu dosyay ona verin.
Gl fonksiyonlar!
Laozi (Tao Te Ching)Byk Tao her yerden akar,
saa ve sola.
Fonksiyonu ismiyle snrl tutmayn! Daha geni tutun.
rnein, emailDogruluga(email) diye bir fonksiyon sadece bu emailin doruluunu sylemesin, hata versin ve tekrardan email girilmesi gerektiini sylesin.
Ek eylemler fonksiyonun isminde kesinlikle belirtilmesin. Gerek bir ninja programc, kodda da bunlar ak bir ekilde belirtmeyecektir.
Birok eylemi bir fonksiyona yazn ki kodun tekrardan kullanlmasn engelleyin
Dnn ki, dier yazlmc sadece emaili kontrol etmek istiyor ve ekrana kt vermek istemiyor. Sizin fonksiyonunuz emailDogrula(email) ve hem doruluk kontrol yapyor hem de ekrana hata kts veriyor. Bundan dolay size bu yazlmcnn soraca bir ey olamaz. Siz zaten ikisini de yapmsnz.
zet
Yukarda bulunan tavsiyeler gerek kodlardan alnmtr. Bazlar deneyimli gelitiriciler tarafndan yazlmtr. Belki de sizden bile deneyimli programclardan ;)
- Tavsiyelerden bazlarn uygularsanz kodunuz tamamen srprizlerle dolar.
- ounu uygularsanz, kodunuz gerekten de sadece size ait olur. Kimse deitiremez.
- Hepsini uygularsanz aydnlanma araynda olan gen gelitiricilere iyi bir ders vermi olursunuz.
Yorumlar
<code>kullannz, birka satr eklemek iin ise<pre>kullann. Eer 10 satrdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)