- İngilizce
- İsimlendirme kuralı
- K-S-A
- Kısaltma kullanmayın
- Bağlam tekrarı yapmayın
- Beklenen sonucu yansıtın
- Fonksiyonları isimlendirmek
- Tekil ve Çoğullar
Bir şeyleri isimlendirmek zordur. Bu sayfa ise bir şeyleri isimlendirmeyi daha kolay bir hale getirmeye çalışıyor.
Buradaki öneriler herhangi bir program diline uyarlanabilir olsa da, pratikte açıklamak için JavaScript kullanacağım.
Değişkenlerinizi ve fonksiyonlarınızı adlandırırken İngilizce kullanın.
/* Kötü */
const adi = "Cenk";
const arkadaslari = ["Ecenur", "Serkan"];
/* İyi */
const firstName = "Cenk";
const friends = ["Ecenur", "Serkan"];
Beğenin veya beğenmeyin, İngilizce programlama alanında baskın dil: tüm programlama dillerinin sözdizimleri İngilizce, aynı şekilde sayısız dökümantasyon ve eğitim materyali de. İngilizce yazarak kodunuzun tutarlılığını önemli ölçüde artırırsınız.
Bir adet isimlendirme kuralı belirleyin ve onunla devam edin. Seçtiğiniz kural camelCase
veya snake_case
veya herhangi başka bir şey olabilir önemli değil. Önemli olan tutarlı kalmak.
/* Kötü */
const pages_count = 5;
const shouldUpdate = true;
/* İyi */
const pageCount = 5;
const shouldUpdate = true;
/* Bu da İyi */
const page_count = 5;
const should_update = true;
Bir isim kısa, sezgisel ve açıklayıcı olmalı:
- Kısa. Bir ismin yazılması uzun sürmemeli, böylece hatırlanabilir de olacaktır;
- Sezgisel. Bir isim doğal bir şekilde okunabilir, olabildiğince yaygın konuşmaya yakın olmalı;
- Açıklayıcı. Bir isim yaptığı/sahip olduğu şeyi en verimli şekilde yansıtmalı.
/* Kötü */
const a = 5; // "a" her anlama gelebilir
const isPaginatable = a > 10; // "Paginatable" kulağa hiç doğal gelmiyor
const shouldPaginatize = a > 10; // Uydurma fiiller çok eğlencelidir!
/* İyi */
const postCount = 5;
const hasPagination = postCount > 10;
const shouldDisplayPagination = postCount > 10; // alternatif
Kısaltmaları kullanmayın. Kodun okunabilirliğinin azalmasından başka hiçbir işe yaramazlar. Kısa ve açıklayıcı bir isim bulmak zor olabilir, ancak kısaltma bunun için bir çözüm değildir.
/* Kötü */
const onItmClk = () => {};
/* İyi */
const onItemClick = () => {};
Bir isim, tanımlandığı bağlamı tekrar etmemelidir. Okunabilirliğini azaltmıyorsa her zaman isimden bağlamı kaldırın.
class MenuItem {
/* Fonksiyon isminde bağlam tekrar kullanılıyor ("MenuItem" olan) */
handleMenuItemClick = (event) => { ... }
/* `MenuItem.handleClick()` olarak güzelce okunuyor */
handleClick = (event) => { ... }
}
Bir isim, beklenen sonucu yansıtmalıdır.
/* Kötü */
const isEnabled = itemCount > 3;
return <Button disabled={!isEnabled} />;
/* İyi */
const isDisabled = itemCount <= 3;
return <Button disabled={isDisabled} />;
Fonksiyonları adlandırırken izlenecek faydalı bir model vardır:
önek? + aksiyon (A) + yüksek bağlam (YB) + düşük bağlam? (DB)
Aşağıdaki tabloda bu modelin nasıl uygulanabileceğine bir göz atın.
İsim | Önek | Aksiyon (A) | Yüksek bağlam (YB) | Düşük bağlam (DB) |
---|---|---|---|---|
getPost |
get |
Post |
||
getPostData |
get |
Post |
Data |
|
handleClickOutside |
handle |
Click |
Outside |
|
shouldDisplayMessage |
should |
Display |
Message |
Not: Bağlamın sırası bir değişkenin anlamını etkiler. Örneğin, "shouldUpdateComponent" bir bileşeni güncellemek üzere olduğunuz anlamına gelirken, "shouldComponentUpdate" size component öğesinin kendi kendine güncelleneceğini ve ne zaman güncellenmesi gerektiğini sizin kontrol ettiğiniz anlamına gelir. Başka bir deyişle, yüksek bağlam bir değişkenin anlamını vurgular.
Fonksiyon adınının fiil kısmı. Fonksiyonun ne yaptığını açıklamaktan sorumlu en önemli kısım.
Verilere anında erişir.
function getFruitCount() {
return this.fruits.length;
}
Ayrıca bakınız compose.
A
değerinden B
değerine bir değişkeni dekleratif bir biçimde değiştirir.
let fruits = 0;
function setFruits(nextFruits) {
fruits = nextFruits;
}
setFruits(5);
console.log(fruits); // 5
Bir değişkeni başlangıç değerine veya durumuna geri döndürür.
const initialFruits = 5;
let fruits = initialFruits;
setFruits(10);
console.log(fruits); // 10
function resetFruits() {
fruits = initialFruits;
}
resetFruits();
console.log(fruits); // 5
Belirsiz bir süre alan bazı veriler için istek yapar (örneğin, async request).
function fetchPosts(postCount) {
return fetch('https://api.dev/posts', {...})
}
Bir yerden bir şeyi kaldırır.
Örneğin, bir arama sayfasında seçilen filtrelerden oluşan bir koleksiyonunuz varsa, koleksiyondan birini kaldırmak için removeFilter
kullanırsınız, deleteFilter
değil (Doğal olarak İngilizce söyleyeceğiniz de budur):
function removeFilter(filterName, filters) {
return filters.filter((name) => name !== filterName);
}
const selectedFilters = ["price", "availability", "size"];
removeFilter("price", selectedFilters);
Ayrıca bakınız delete.
Varoluş aleminden bir şeyi tamamen siler.
Bir içerik editörü olduğunuzu ve kurtulmak istediğiniz kötü şöhretli bir gönderi olduğunu hayal edin. Parlak bir "Gönderiyi sil" düğmesini tıkladığınızda, CMS bir deletePost
aksiyonu gerçekleştirdi, removePost
değil.
function deletePost(id) {
return database.find({ id }).delete();
}
Ayrıca bakınız remove.
Mevcut olandan yeni veriler oluşturur. Çoğunlukla stringler, nesneler veya fonksiyonlar için geçerlidir.
function composePageUrl(pageName, pageId) {
return `${pageName.toLowerCase()}-${pageId}`;
}
Ayrıca bakınız get.
Bir aksiyonu yönetir. Genellikle bir callback fonksiyonunu adlandırırken kullanılır.
function handleLinkClick() {
console.log("Linke tıklandı!");
}
link.addEventListener("click", handleLinkClick);
Bir fonksiyonun üzerinde çalıştığı alan.
Bir fonksiyon genellikle bir şey üzerine yapılan bir aksiyondur. Çalıştırılabilir alanının veya en azından beklenen bir veri türünün ne olduğunu belirtmek önemlidir.
/* Primitivelerle çalışan saf bir fonksiyon */
function filter(predicate, list) {
return list.filter(predicate);
}
/* Tam olarak postslarla çalışan bir fonksiyon */
function getRecentPosts(posts) {
return filter(posts, (post) => post.date === Date.now());
}
Bazı dile özgü varsayımlar, bağlamın çıkarılmasına izin verebilir. Örneğin, JavaScript'te,
filter
ın Array üzerinde çalışması yaygındır. AçıkçafilterArray
eklemek gereksiz olacaktır.
Önek, bir değişkenin anlamını geliştirir. Fonksiyon adlarında nadiren kullanılır.
Mevcut bağlamın bir karakteristiğini veya durumunu açıklar (genellikle boolean
).
const color = "blue";
const isBlue = color === "blue"; // karakteristik
const isPresent = true; // durum
if (isBlue && isPresent) {
console.log("Mavi mevcut!");
}
Mevcut bağlamın belirli bir değere veya duruma sahip olup olmadığını açıklar (genellikle boolean
).
/* Kötü */
const isProductsExist = productsCount > 0;
const areProductsPresent = productsCount > 0;
/* İyi */
const hasProducts = productsCount > 0;
Belirli bir eylemle birlikte pozitif bir koşullu ifadeyi (genellikle boolean
) yansıtır.
function shouldUpdateUrl(url, expectedUrl) {
return url !== expectedUrl;
}
Minimum veya maksimum değeri temsil eder. Sınırları veya sınırları açıklarken kullanılır.
/**
* Verilen minimum/maksimum sınırlar dahilinde
* rastgele sayıda gönderi oluşturur.
*/
function renderPosts(posts, minPosts, maxPosts) {
return posts.slice(0, randomBetween(minPosts, maxPosts));
}
Geçerli bağlamda bir değişkenin önceki veya sonraki durumunu belirtir. Durum geçişlerini açıklarken kullanılır.
function fetchPosts() {
const prevPosts = this.state.posts;
const fetchedPosts = fetch("...");
const nextPosts = concat(prevPosts, fetchedPosts);
this.setState({ posts: nextPosts });
}
Önek gibi, değişken isimleri de tek bir değer veya birden fazla değer bulundurmalarına bağlı olarak tekil veya çoğul yapılabilir.
/* Kötü */
const friends = "Eser";
const friend = ["Leyla", "Uğur", "Ahsen"];
/* İyi */
const friend = "Eser";
const friends = ["Leyla", "Uğur", "Ahsen"];