Web appOpen in Telegram

Postاصل مهمی در Clean Code این است که هر تابع فقط یک وظیفهٔ واضح داشته باشد ✨

13 August 2026
|
| کانال توسعه‌دهندگان جاوااسکریپت |
اصل مهمی در Clean Code این است که هر تابع فقط یک وظیفهٔ واضح داشته باشد ✨ وقتی یک تابع چند کار مختلف انجام می‌دهد: - تست‌نویسی سخت می‌شود - احتمال باگ بالا می‌رود - خواندن و تغییر کد زمان‌بر می‌شود به این ایده در Design Principleها می‌گویند: Single Responsibility Principle (SRP). نمونهٔ یک تابع شلوغ در Node.js 👇 const registerUser = async (req, res) => { const { email, password } = req.body; // validate if (!email || !password || password.length < 8) { return res.status(400).json({ message: 'Invalid data' }); } // check duplicate const existing = await User.findOne({ email }); if (existing) { return res.status(409).json({ message: 'Email exists' }); } // hash password const bcrypt = await import('bcrypt'); const hashed = await bcrypt.hash(password, 10); // save user const user = await User.create({ email, password: hashed }); // send welcome email await sendWelcomeEmail(email); return res.status(201).json({ id: user.id, email: user.email }); }; این تابع هم اعتبارسنجی می‌کند، هم دیتابیس می‌زند، هم ایمیل می‌فرستد؛ یعنی چند مسئولیت در یک جا. حالا همان منطق را با توابع کوچک‌تر تمیزتر می‌کنیم 🧼 const validateRegisterInput = ({ email, password }) => { if (!email || !password) return 'Email and password are required'; if (password.length < 8) return 'Password too short'; return null; }; const ensureEmailUnique = async (email) => { const existing = await User.findOne({ email }); if (existing) throw new Error('EMAIL_TAKEN'); }; const createUser = async ({ email, password }) => { const bcrypt = await import('bcrypt'); const hashed = await bcrypt.hash(password, 10); return User.create({ email, password: hashed }); }; const registerUser = async (req, res) => { const { email, password } = req.body; const error = validateRegisterInput({ email, password }); if (error) return res.status(400).json({ message: error }); try { await ensureEmailUnique(email); const user = await createUser({ email, password }); await sendWelcomeEmail(email); return res.status(201).json({ id: user.id, email: user.email }); } catch (err) { if (err.message === 'EMAIL_TAKEN') { return res.status(409).json({ message: 'Email exists' }); } return res.status(500).json({ message: 'Server error' }); } }; حالا: - تست کردن validateRegisterInput و createUser مستقل و ساده است ✅ - تغییر قانون پسورد، فقط در یک تابع انجام می‌شود ✅ - خطاها واضح‌تر و قابل مدیریت‌تر هستند ✅ برای کدهای React، Express، Next.js و هر محیط JavaScript/TypeScript دیگر همین ایده جواب می‌دهد: توابع کوچک، با نام خوب و یک کار مشخص. برای مطالعهٔ بیشتر می‌توان از Refactoring.Guru و MDN کمک گرفت. قدم‌های کوچک refactor کردن همین امروز روی یکی از فانکشن‌های شلوغ پروژه، بعد از چند هفته تاثیر زیادی در خوانایی و کیفیت کد می‌گذارد 🚀 🔖 #Javascript #JS #جاوااسکریپت #JavaScript #Clean_Code #Node_js #Refactoring #SRP 👤 Developix 💎 Channel: @DevelopixJavascript
9 · 1.2K ·

Nearby in the feed

|| کانال توسعه‌دهندگان جاوااسکریپت |💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.6.0 به 26.7.0 🔹 لیست تغییرات این نسخه: - پشتیبانی از بارگذاری کلید خصوصی با STORE loade|| کانال توسعه‌دهندگان جاوااسکریپت |🔥 پروژه: ‏DrawDB؛ طراحی بصری دیتابیس آنلاین ویرایشگر تحت‌وب DrawDB یک ابزار رایگان برای طراحی نمودار دیتابیس و تولید خودکار SQL است 🧩 برای وقتی عالی است که قبل
this message
|| کانال توسعه‌دهندگان جاوااسکریپت |💠 نسخه جدید سوپرست تایپ‌اسکریپت (Typescript) منتشر شده است 🔸 ارتقا از نسخه 6.0.3 به 7.0.2 🔹 لیست تغییرات این نسخه: 🔖 #typescript, #web, #js, #react, #vue, #rele|| کانال توسعه‌دهندگان جاوااسکریپت |💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است 🔸 ارتقا از نسخه 26.7.0 به 26.8.1 🔹 لیست تغییرات این نسخه: - رفع مشکل نمایش اشتباه نسخه در خروجی node --ver
|| کانال توسعه‌دهندگان جاوااسکریپت || کانال توسعه‌دهندگان جاوااسکریپت |@DevelopixJavascript · channel
3 879subscribers681average post reach
Venue feed Open in Telegram

An open public feed from the search index ChatCrawler — “Google for public Telegram”; refreshed as the venue is crawled. Times are UTC.

Public content only, official Telegram API. About · FAQ · Index limits · Remove a page · Catalog · Search · How we count