Kodlama kuralları, programlama için stil yönergeleridir. Genellikle şunları kapsar:
Bu makalede en önemli JavaScript kod kurallarını ele alacağım. Bu yazıda belirtilen kurallara sadık kalırsanız, insanlar işinizi farklı algılayacaktır. Ekibiniz ve patronunuz temiz kod yazdığınız için sizi takdir edecek, ve en önemlisi kendinize minnettar olacaksınız. Herkes temiz kodu takdir eder.
Kodlama kuralları kaliteyi güvence altına alır, kod okunabilirliğini iyileştirir ve kod bakımını kolaylaştırır. Ekiplerin uyması gereken kurallar olabilir veya sadece kişisel uygulamanız olabilir.
Temiz kod, iyi yazılmış bir düz yazı gibi okunur. Temiz kod asla programcının niyetini gizlemez, aksine net soyutlamalar ve basit kontrol çizgileriyle doludur.
Haydi başlayalım!
İçindekiler
Önce neyin temiz kod olmadığını sorarak başlayalım. Örneklerimiz JavaScript'i temel alarak hazırlanacaktır.
Peki, sizin ve ekibinizin işini kolaylaştırmak için yapmaya başlayabileceğiniz bazı şeyler nelerdir? Basit adlandırma kurallarıyla başlayalım.
Tüm JavaScript projeleriniz için her zaman aynı kodlama kurallarını kullanın.
Açık bir anlamı olmayan bir sayı atamak. Bu koda ilk kez bakarsanız, 86400 sayısının neyi temsil etmesi gerektiği konusunda hiçbir fikriniz olmaz.
for(let i = 0; i < 86400; i += 1) { // ... }
Bunu adlandırılmış bir sabitle değiştirmek daha iyidir:
const SECOND_IN_A_DAY = 86400; for(let i = 0; i < SECOND_IN_A_DAY; i += 1) { // ... }
Makalenin ilerleyen kısımlarında bu örnek için neden upper case snake case kullandığımızı da öğreneceksiniz.
Kodunuz çok sayıda iç içe geçmiş döngü veya koşullu ifade içeriyorsa, bu muhtemelen ayrı bir fonksiyona çıkarılmalıdır.
const exampleArray = [ [ [ 'value' ] ] ]; exampleArray.forEach((arr1) => { arr1.forEach((arr2) => { arr2.forEach((el) => { console.log(el) }) }) }) // output: 'value'
Bu özel örnek için, tüm dizilerde döngü oluşturacak ve son bir değer döndürecek bir fonksiyon oluşturabiliriz:
const exampleArray = [ [ [ 'value' ] ] ]; const retrieveFinalValue = (element) => { if(Array.isArray(element)) { return fetchValue(element[0]); } return element; } // output: 'value'
Öznel olmasına rağmen, kodunuzda yorumların kullanılması yardımcı olabilir. Ancak bu, kodunuzun kendi kendini açıklayıcı olmadığının bir işareti de olabilir.
Yorumlar doğası gereği iyi ya da kötü olmasa da, sıklıkla koltuk değneği olarak kullanılırlar. Kodunuzu her zaman yorumlar yokmuş gibi yazmalısınız. Bu, kodunuzu en basit, en yalın, en kendi kendini belgeleyen şekilde yazmaya zorlar.
Boyut olarak büyük bir fonksiyon veya hatta bir sınıf, olması gerekenden fazlasını yaptığını gösterir. Bu örnek basit görünebilir ancak bir noktayı kanıtlıyor. Bu fonksiyon olması gerekenden çok daha fazlasını yapar.
const addMultiplySubtract = (a, b, c) => { const addition = a + b + c; const multiplication = a * b * c; const subtraction = a - b - c; return `${addition} ${multiplication} ${subtraction}`; }
Mantığı ayırmak için farklı fonksiyonlar oluşturmak daha iyidir:
const add = (a, b, c) => a + b + c; const multiply = (a, b, c) => a * b * c; const subtract = (a, b, c) => a - b - c;
Bir kod bloğunu kopyalayıp yapıştırmanız gerekiyorsa bu, tekrarlanan bloğun kendi fonksiyonuna çıkarılması gerekebileceğinin bir işaretidir.
Bunun en güzel örneği deep nesting örneğidir:
const exampleArray = [ [ [ 'value' ] ] ]; exampleArray.forEach((arr1) => { arr1.forEach((arr2) => { arr2.forEach((el) => { console.log(el) }) }) })
Burada çok sayıda tekrarlanan kodumuz var. Onu farklı bir fonksiyona ayırmak ve mantığı daha az tekrarla farklı şekilde ele almak çok daha iyidir:
const exampleArray = [ [ [ 'value' ] ] ]; const retrieveFinalValue = (element) => { if(Array.isArray(element)) { return fetchValue(element[0]); } return element; }
Kod tekrarının bir başka örneği de parametrelerden veri almaktır:
const getUserCredentials = (user) => { const name = user.name; const surname = user.surname; const password = user.password; }
ES6 nesne ayrıştırmayı kullanarak aşağıdakileri basitçe yapabiliriz:
const getUserCredentials = (user) => { const { name, surname, password } = user; }
JavaScript'teki hemen her şey için camel case kullanılır. Camel case tanımlayıcı isimleri (değişkenler ve fonksiyonlar) için kullandığımız bir adlandırma standardıdır.
Bir adın küçük harfle başlaması gerektiğini ve ardından bir sonraki kelimenin her ilk harfinin büyük harf olduğunu belirtir. İşte bazı örnekler:
thisIsARandomCamelCaseName, camelCase, exampleFunctionName
getUserData ve getUserInfo belirsizdir. Hangi verileri veya bilgileri alıyorsunuz?
İşlevlerimizin, yöntemlerimizin ve değişken adlarımızın tam anlamlarını ifade etmesi önemlidir.
getUserPost çok daha iyi; tam olarak ne elde ettiğimizi anlayabiliriz.
Mümkün olduğunca kısa ve öz olun, ancak isminiz için iki veya üç kelimelik bir açıklama bulmakta güçlük çekiyorsanız, açıklayıcı olma tarafında kalmak daha iyidir.
findUserByNameOrEmail ve setUserLoggedInTrue findUser ‘dan daha iyidir.
getUserFromDatabase çok açıklayıcı olsa da, aynı anlama gelen daha kısa bir versiyonu var. Kendinize sormanız gereken en önemli soru "fromDatabase programınıza herhangi bir anlam katıyor mu?"
Cevap, büyük olasılıkla olmamasıdır. Kullanıcıyı veri tabanından getirdiğimizi varsayabiliriz.
Fonksiyonlar genellikle bir şeyler oluşturur, okur, günceller veya siler. Hatta biraz daha açıklayıcı olabilir ve bunları yazabilirsiniz: get, set, add, remove, reset, delete.
Bir fonksiyon, bir fiil veya fiil cümlesi olmalı ve amacını iletmelidir.
Fiillerimizle tutarlı olmalıyız. Almak için her zaman get, retrieve, return ve on bin farklı isim yerine sadece get kullanabiliriz:
getQuestions getUserPosts getUsers ‘dan ziyade:
getQuestions returnUsers retrieveUsers.
Açıkçası bu kelimelerin farklı varyasyonları vardır, ancak hangisini seçerseniz seçin, tutarlı kalın. Örneğin bir şeyi sildiğinizde tüm programınız boyunca "delete" veya "remove" kullanın (ikisini birden değil).
Boolean değişken adları için iyi bir test; vereceğiniz ismi bir if-then ifadesine koymak ve yüksek sesle okumaktır. Doğal bir cümle gibi okunuyorsa bu daha iyi bir durumdur.
Örneğin, bir arabanın özelliklerini kontrol ediyorsak hangi isimlendirmeyi daha uygun bulursunuz?
sedan, sold, green, airbag, veya;
isSedan, isSold, isGreen, hasAirbag.
Ve şimdi property’leri kontrol ediyorsak şöyle bir şey yapabiliriz:
car.isSedan, car.isSold, car.hasAirbag (car.airbags’ den çok daha iyi) ve boolean değerleriyle karşı karşıya olduğumuzu hemen anlıyoruz.
Bunlar kulağa daha doğal geliyor ve programın anlaşılmasını kolaylaştırıyor.
Sınıflar bir şeyleri almaz, bunlar nesnedir.
Daha spesifik olarak, bir şeyin planıdırlar. Bir sınıfı örneklemek, bir şeyi yapan şeydir.
class Car = {...} class MakeCar {...} değil.
Yeni bir araba yapacak olsaydın "yeni bir yeni araba yap" demezdin, "yeni bir araba yap" derdin.
Pascal case hangi öğelerin sınıf olduğunu ve hangilerinin olmadığını görmeyi kolaylaştırır.
class task {...} yerine class Task {...}.
Bir günde saniyeleri belirttiğimizi hatırlıyor musunuz? (SECOND_IN_A_DAY = 86400)
Sabit bir değer değişmeyecek bir şeydir. Bu kuralın C dilinde kökleri vardır ve her zaman JavaScript'te görülmez.
Const bildirimi değerin yeniden atama yoluyla değiştirilemeyeceği anlamına gelir.
Örneğin:
const HOURS_IN_DAY = 24; const TODAY = new Date (); gibi.
Kısaltılmış adlar uzun vadede kaydettiğiniz tuş vuruşlarından daha fazla güçlük çıkarır.
İsimler kısa ve açıklayıcı olmalıdır. Genel kapsamda (Global scope) başlatılan bir değişken yüz satır sonra kullanıma girebilir. Yalnızca tek bir harf olursa ne olduğunu unutmak kolaylaşır.
const dueDate = new Date() şundan çok daha iyi const d = new Date();
const query = () => { ... }; şundan çok daha iyi q = () => { ... };
Tek harfli değişken adları kullanıyorsanız, bunları küçük fonksiyonlarla veya döngülerde dizin değişkenleri olarak sınırlayın (bu sorun değil):
for(let i = 0; i < 10>; i ++) { // ... }
Gelecekteki akıl sağlığınız için bu kuralları hatırlayın.
Özetlemek gerekirse, uzun vadede bu kurallara uymanın çok büyük faydaları var. Diğerleri yazdığınız kodu kısa bir süre içerisinde, yukarıdan aşağıya tarayabilir ve rahat bir nefes alabilir veya hayal kırıklığı yaşayabilir. Hangisini tercih edersiniz?
Temiz kod, kodlamaya başlamayı ve devam etmeyi kolaylaştırır; hem birey hem de ekip için daha iyidir ve okunması çok daha kolaydır.
Kod hatasız, düzenlenebilir, kolay anlaşılabilir, genişletilebilir veya daraltılabilir özelliklere sahip ise temiz kod olarak adlandırılır.
Zor okunan, üzerinde değişiklik yapmanın imkansız olduğu, yönetimsel hataların mevcut olduğu kodlar, kötü kod olarak adlandırılır. Bu kodlar, temiz kod kriterlerini karşılayamaz.
Kod Kokuları, uygulama veya kod tabanında derin bir soruna işaret eden bir koddaki izleri ifade eder. Code smells, hata veya bug değildir. Kod tasarım temelinde ortaya çıkan somut, gözlemlenebilir ve düşük kod kalitesine neden olan ihlallerdir.
Kod tekrarı, bir programın birden fazla bölümünde aynı kodun tekrarlanmasıdır. Kodun yeniden kullanılması, uzun vadede yazılım ürününün verimliliğini ve kalitesini zayıflatan bir durumdur.
Temiz kod, kod inceleme süreçlerinde güvenlik açıklarını erken tespit etmeye yardımcı olduğu için güvenlidir.
Temiz kod, yazılımın her yerde ve her zaman güvenilir olmasını sağlar. Bu da müşteriler ve ekipler arasında güven ortamı yaratır.
Temiz kodun bakımı kolaydır. Bakımı kolay yapılan bir kod tabanı, daha ölçeklenebilir yazılımlar için iyileştirilmiş bir iş akışı sağlar.
Software Developer
SAP Leonardo Nedir?
SAP'nin Leonardo Platformu Hakkında Bilmeniz Gereken Her ŞeySAP Leonardo, SAP tarafından sunulan blockchain, IoT, analitik, büyük veri ve...
SAP Bulut Sistemlerinde Üç Katmanlı Genişletilebilirlik Modeli
SAP, müşterilerinin sistemlerini ihtiyaçlarına göre genişletebilmesi için kapsamlı bir çerçeve sunuyor. Bu model sayesinde şirketler, SAP...
SAP EWM’de Malzeme Akış Sistemi
SAP Genişletilmiş Depo Yönetimi (SAP EWM), işletmelerin depo operasyonlarını ve malzeme akış süreçlerini optimize etmelerini sağlayan...
EDI’nin (Elektronik Veri Değişimi) 6 Faydası
Elektronik Veri Alışverişi (EDI), bilgisayar sistemlerinin birbiriyle iletişim kurma yeteneğine sahip bir teknolojidir. EDI protokolleri ve...
GS1 Barkod Sistemi Nedir? GS1 & SAP Entegrasyonu
GS1 sistemi, uluslararası elektronik ticaret uygulamaları için evrensel bilgi tanımlama sistemdir. Tedarikçiler ve müşteriler arasındaki...
Intralojistik (İç Lojistik) Nedir?
Lojistiği, mal ve hizmeterin üretim noktasından tüketim noktasına kadar taşınması olarak tanımlayabiliriz. Intralojistik, lojistiğe...
SAP PO 7.5 geçişine hazır mısınız?
2020 yılının sonunda SAP PI sürümleri 7.5’den düşük olan sistemlerin desteğinin sona erecek olması SAP PO 7.5’e geçişini zorunlu...
Bilgi Yönetim Sistemlerinin Önemi ve Avantajları
Üretimin ve büyümenin en önemli kaynağı, fiziki sermayeden de önce bilgidir. Bulunduğumuz çağ tam da bu sebeple “Bilgi Çağı” olarak...
e-Fatura ve e-Arşiv Fatura Arasındaki Farklar
e-Dönüşüm, Gelir İdaresi Başkanlığı tarafından teknolojiyi iş süreçlerine entegre etmek için başlatılan...
Mailiniz başarıyla gönderilmiştir en kısa sürede sizinle iletişime geçilecektir.
Mesajınız ulaştırılamadı! Lütfen daha sonra tekrar deneyin.