[ Web Proxy ]
URL:
Viewing: https://tr.javascript.info/ninja-code [Back]  [Original]

Ninja Kodlar
TR

Bu ak-kaynakl projenin tm dnyada kullanlabilir olmasn istiyoruz.

Kendi dilinizde eviriye yardm edebilirsiniz!

    Javascript.info'da ara:
    Eitimde ara:
    Light themeDark theme
    DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek

    Ninja Kodlar

    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.

    roni tespit edildi!

    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

    Dao kelimesizlikte sakldr. Sadece Dao doru balamtr ve doru biter.

    Laozi (Tao Te Ching)

    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:

    • list lst.
    • userAgent ua.
    • browser brsr.
    • 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.

    Mkemmel karenin keleri yoktur
    Mkemmel gemi en son ina edilendir,
    Harika nota karmak olandr,
    Harika grselin belirli bir formu yoktur.

    Laozi (Tao Te Ching)

    Bir isim seerken en soyut kelimeyi kullanmaya aln. obj, data, value, item, elem gibi.

    • Kusursuz deiken ismi data nerede isterseniz kullann. Gerekten de tm deikenler data tutmuyorlar zaten, deil mi?

      Fakat ya data daha nce alndysa? value kullanabilirsiniz. O da genel bir tanm. En nihayetinde tm deikenler bir value alr deil mi?

    • Deikeni tipi ile tanmlayn: str, num Bir 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, elem5 gibi.

    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

    Hepsinden zoru karanlk odada kara kediyi bulmak, hele bir de odada kedi yoksa.

    Confucius

    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

    Btn taksim edildiinde, her
    birinin isme ihtiyac var.
    Yeteri kadar isim var.
    Kii ne zaman duracan bilmeli.

    Laozi (Tao Te Ching)

    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

    Iktayken karanlktaki hibir ey grnmez
    Karanlktayken, aydnlktaki her ey grnr.

    Guan Yin Zi

    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!

    Byk Tao her yerden akar,
    saa ve sola.

    Laozi (Tao Te Ching)

    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.
    Eitim haritas

    Yorumlar

    yorum yapmadan nce ltfen okuyun...
    • Eer gelitirme ile alakal bir neriniz var ise yorum yerine github konusu gnderiniz.
    • Eer makalede bir yeri anlamadysanz ltfen belirtiniz.
    • Koda birka satr eklemek iin <code> kullannz, birka satr eklemek iin ise <pre> kullann. Eer 10 satrdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)

    Web Proxy Viewer  |  New URL  |  Original Page