Kural
Aşırı belgesiz belgelenmemiş anonim işlevleri
Büyük büyük fonksiyonlar belgeleri belgeleri
zor zor anlaşılması anlaşması ve yeniden kullanılması
Desteklenen diller: 45+Giriş
Geri çağırma işlevleri veya olay işleyicileri olarak aktarılan anonim işlevler, amaçlarını uygulama ayrıntılarının arkasına gizler. Bir .map() veya .filter() okuyucuları, hangi dönüşümün gerçekleştiğini anlamak için mantığın tamamını ayrıntılı olarak incelemek zorunda bırakır. Açıklayıcı isimlere sahip işlevler, amaçlarını hemen ortaya koyar ve karmaşık mantık, uygulamaya dalmadan önce işlev adını okuyarak anlaşılabilir.
Kod örnekleri
❌ Uygun değil:
app.get('/users', async (req, res) => {
const users = await db.users.find({});
const processed = users.filter(u => {
const hasActiveSubscription = u.subscriptions?.some(s =>
s.status === 'active' && new Date(s.expiresAt) > new Date()
);
const isVerified = u.emailVerified && u.phoneVerified;
return hasActiveSubscription && isVerified && !u.deleted;
}).map(u => ({
id: u.id,
name: `${u.firstName} ${u.lastName}`,
email: u.email,
memberSince: new Date(u.created).getFullYear(),
tier: u.subscriptions[0]?.tier || 'free'
})).sort((a, b) => a.name.localeCompare(b.name));
res.json(processed);
});Neden yanlış: Filtre işlevi, isimsiz bir işlevin içine gömülmüş karmaşık iş mantığı (abonelik doğrulaması, kontrol işlemleri) içeriyor. Bu mantık, her satırı okumadan yeniden kullanılamaz, bağımsız olarak test edilemez veya anlaşılamaz. Filtreleme mantığı başarısız olursa, yığın izleri isimsiz işlevleri gösterir.
✅ Uygunluk:
function hasActiveSubscription(user) {
return user.subscriptions?.some(subscription =>
subscription.status === 'active' &&
new Date(subscription.expiresAt) > new Date()
);
}
function isVerifiedUser(user) {
return user.emailVerified && user.phoneVerified && !user.deleted;
}
function isEligibleUser(user) {
return hasActiveSubscription(user) && isVerifiedUser(user);
}
function formatUserResponse(user) {
return {
id: user.id,
name: `${user.firstName} ${user.lastName}`,
email: user.email,
memberSince: new Date(user.created).getFullYear(),
tier: user.subscriptions[0]?.tier || 'free'
};
}
function sortByName(a, b) {
return a.name.localeCompare(b.name);
}
app.get('/users', async (req, res) => {
const users = await db.users.find({});
const processed = users
.filter(isEligibleUser)
.map(formatUserResponse)
.sort(sortByName);
res.json(processed);
});Bunun önemi: Karmaşık iş mantığı, test edilebilir işlevlere ayrıştırılır. hasActiveSubscription() ve isVerifiedUser() birim testine tabi tutulabilir ve yeniden kullanılabilir. Yığın izleri işlev adlarını gösterir, bu da hata ayıklamayı hızlandırır. Uç nokta mantığı temiz ve kendi kendini açıklayıcıdır.
Sonuç
2-3 satırdan uzun olan veya tekrar kullanılabilecek herhangi bir mantık için adlandırılmış işlevler kullanın. İşlev adının uygulamanın kendisinden daha uzun olacağı basit işlemler için ise isimsiz işlevleri saklayın. Açıklayıcı işlev adları, satır içi dokümantasyon görevi görür.

