پاکسازی توابع با تکنیک «Early Return» در JavaScript 🚿
یکی از سادهترین و مؤثرترین تکنیکهای Clean Code در جاوااسکریپت، استفاده از Early Return است؛ یعنی بهجای پیچوندن منطق داخل ifهای تودرتو، در همان اول تابع، شرایط نامعتبر را سریع برگردانیم.
این تکنیک توابع را:
• کوتاهتر و خواناتر میکند ✨
• از Nested ifهای عمیق جلوگیری میکند
• باعث میشود مسیرهای خطا و edge caseها واضحتر دیده شوند
نمونه کد قبل از refactor (کد سختخوان)
این تابع کارش را انجام میدهد، اما هر شرط جدیدی که اضافه شود، عمق ifها بیشتر میشود و دیباگ سختتر.
Refactor با Early Return ✅
الان:
• هر شرط invalid در بالا «قطع» میشود 🔪
• مسیر اصلی (happy path) در انتها واضح و تمیز است
• اضافهکردن شرط جدید فقط یعنی اضافه کردن چند خط دیگر بالای happy path
نمونه در Express / Node.js 🌐
هر مرحله نامعتبر بهسرعت return میشود و منطق login مثل یک «چکلیست» خطی خوانده میشود.
نکته مهم 🔍
Early Return با Single Responsibility خیلی خوب جفت میشود؛ اگر تابع خیلی طولانی شد، علاوه بر early return، آن را به چند تابع کوچکتر با نامهای خوب بشکنید.
منابع برای مطالعهٔ بیشتر:
• MDN – Control Flow
• Refactoring.Guru
این سبک نوشتن را کمکم در هندلرهای Express، سرویسهای Node.js یا حتی توابع React خودتان وارد کنید؛ بعد از مدتی، خواندن و نگهداری کد برای خودتان و تیمتان بهوضوح راحتتر میشود 🙌
🔖 #Javascript #JS #جاوااسکریپت #clean_code #early_return #javascript #nodejs #express #refactoring
👤 Developix
💎 Channel: @DevelopixJavascript
یکی از سادهترین و مؤثرترین تکنیکهای Clean Code در جاوااسکریپت، استفاده از Early Return است؛ یعنی بهجای پیچوندن منطق داخل ifهای تودرتو، در همان اول تابع، شرایط نامعتبر را سریع برگردانیم.
این تکنیک توابع را:
• کوتاهتر و خواناتر میکند ✨
• از Nested ifهای عمیق جلوگیری میکند
• باعث میشود مسیرهای خطا و edge caseها واضحتر دیده شوند
نمونه کد قبل از refactor (کد سختخوان)
function createUser(data) {
if (data) {
if (data.email) {
if (data.password && data.password.length >= 8) {
// save to DB
return { ok: true, user: data };
} else {
return { ok: false, error: 'Weak password' };
}
} else {
return { ok: false, error: 'Email is required' };
}
} else {
return { ok: false, error: 'No data' };
}
}
این تابع کارش را انجام میدهد، اما هر شرط جدیدی که اضافه شود، عمق ifها بیشتر میشود و دیباگ سختتر.
Refactor با Early Return ✅
function createUser(data) {
if (!data) {
return { ok: false, error: 'No data' };
}
if (!data.email) {
return { ok: false, error: 'Email is required' };
}
if (!data.password || data.password.length < 8) {
return { ok: false, error: 'Weak password' };
}
// happy path
return { ok: true, user: data };
}
الان:
• هر شرط invalid در بالا «قطع» میشود 🔪
• مسیر اصلی (happy path) در انتها واضح و تمیز است
• اضافهکردن شرط جدید فقط یعنی اضافه کردن چند خط دیگر بالای happy path
نمونه در Express / Node.js 🌐
app.post('/login', async (req, res) => {
const { email, password } = req.body;
if (!email || !password) {
return res.status(400).json({ message: 'Missing credentials' });
}
const user = await findUserByEmail(email);
if (!user) {
return res.status(404).json({ message: 'User not found' });
}
const valid = await comparePassword(password, user.passwordHash);
if (!valid) {
return res.status(401).json({ message: 'Invalid password' });
}
// happy path
res.json({ token: createToken(user) });
});
هر مرحله نامعتبر بهسرعت return میشود و منطق login مثل یک «چکلیست» خطی خوانده میشود.
نکته مهم 🔍
Early Return با Single Responsibility خیلی خوب جفت میشود؛ اگر تابع خیلی طولانی شد، علاوه بر early return، آن را به چند تابع کوچکتر با نامهای خوب بشکنید.
منابع برای مطالعهٔ بیشتر:
• MDN – Control Flow
• Refactoring.Guru
این سبک نوشتن را کمکم در هندلرهای Express، سرویسهای Node.js یا حتی توابع React خودتان وارد کنید؛ بعد از مدتی، خواندن و نگهداری کد برای خودتان و تیمتان بهوضوح راحتتر میشود 🙌
🔖 #Javascript #JS #جاوااسکریپت #clean_code #early_return #javascript #nodejs #express #refactoring
👤 Developix
💎 Channel: @DevelopixJavascript
👍4❤3
💠 نسخه جدید رانتایم نود جیاس (NodeJS) منتشر شده است
🔸 ارتقا از نسخه 26.3.1 به 26.4.0
🔹 لیست تغییرات این نسخه:
- بهروزرسانی وضعیت پایداری blockList به «کاندید انتشار»
- پشتیبانی از بافر سفارشی در
- افزودن بستهمپها در لودر ماژولها (package maps)
- افزودن گزینه فشردهسازی گواهی در TLS
- افزودن گزینههای جدید TCP keepalive در
- افزودن زیرسیستم جدید node:vfs و تغییرات مرتبط، و غیره
🔖 #nodejs, #web, #js, #release
💎 @DevelopixJavascript
🔸 ارتقا از نسخه 26.3.1 به 26.4.0
🔹 لیست تغییرات این نسخه:
- بهروزرسانی وضعیت پایداری blockList به «کاندید انتشار»
- پشتیبانی از بافر سفارشی در
fs.readFile()- افزودن بستهمپها در لودر ماژولها (package maps)
- افزودن گزینه فشردهسازی گواهی در TLS
- افزودن گزینههای جدید TCP keepalive در
net.setKeepAlive()- افزودن زیرسیستم جدید node:vfs و تغییرات مرتبط، و غیره
🔖 #nodejs, #web, #js, #release
💎 @DevelopixJavascript
👍3🔥1
💠 نسخه جدید رانتایم نود جیاس (NodeJS) منتشر شده است
🔸 ارتقا از نسخه 26.4.0 به 26.5.0
🔹 لیست تغییرات این نسخه:
- افزودن متد جدید blob.textStream() در ماژول buffer
- افزودن فلگ جدید --experimental-import-text برای ESM
- افزودن نمونهبرداری تأخیر هر چرخه رویداد در perf_hooks
- افزودن و اکسپوز کردن ReadableStreamTee در ماژول stream
- گزارش گروههای مذاکرهشده TLS در ماژول tls
- سایر بهبودها و بهروزرسانیهای داخلی و مستندات، و غیره
🔖 #nodejs, #web, #js, #release
💎 @DevelopixJavascript
🔸 ارتقا از نسخه 26.4.0 به 26.5.0
🔹 لیست تغییرات این نسخه:
- افزودن متد جدید blob.textStream() در ماژول buffer
- افزودن فلگ جدید --experimental-import-text برای ESM
- افزودن نمونهبرداری تأخیر هر چرخه رویداد در perf_hooks
- افزودن و اکسپوز کردن ReadableStreamTee در ماژول stream
- گزارش گروههای مذاکرهشده TLS در ماژول tls
- سایر بهبودها و بهروزرسانیهای داخلی و مستندات، و غیره
🔖 #nodejs, #web, #js, #release
💎 @DevelopixJavascript
👍7
💠 نسخه جدید رانتایم نود جیاس (NodeJS) منتشر شده است
🔸 ارتقا از نسخه 26.5.1 به 26.6.0
🔹 لیست تغییرات این نسخه:
- افزودن تابع جدید ffi.getCurrentEventLoop
- افزودن context.log() و رویداد test:log در test_runner
- گزارش فیلد entryFile در رویدادهای TestStream
- بهبودهای کارایی رویدادها و once()/removeListener()
- قابلیت انتقال TCP Server و Socket بین worker threads
- بهروزرسانی وابستگیها (npm 11.18.0، V8، OpenSSL، zlib و غیره)
🔖 #nodejs, #web, #js, #release
💎 @DevelopixJavascript
🔸 ارتقا از نسخه 26.5.1 به 26.6.0
🔹 لیست تغییرات این نسخه:
- افزودن تابع جدید ffi.getCurrentEventLoop
- افزودن context.log() و رویداد test:log در test_runner
- گزارش فیلد entryFile در رویدادهای TestStream
- بهبودهای کارایی رویدادها و once()/removeListener()
- قابلیت انتقال TCP Server و Socket بین worker threads
- بهروزرسانی وابستگیها (npm 11.18.0، V8، OpenSSL، zlib و غیره)
🔖 #nodejs, #web, #js, #release
💎 @DevelopixJavascript
👍4
💠 نسخه جدید رانتایم نود جیاس (NodeJS) منتشر شده است
🔸 ارتقا از نسخه 26.6.0 به 26.7.0
🔹 لیست تغییرات این نسخه:
- پشتیبانی از بارگذاری کلید خصوصی با STORE loaderها در crypto
- بهروزرسانی ریشهگواهیها به NSS 3.125 در crypto
- افزودن پشتیبانی Perfetto برای پروفایلینگ کارایی
- پیادهسازی
- افزودن فلگ
- بهروزرسانی npm به نسخه 11.19.0 و سایر وابستگیها و غیره
🔖 #nodejs, #web, #js, #release
💎 @DevelopixJavascript
🔸 ارتقا از نسخه 26.6.0 به 26.7.0
🔹 لیست تغییرات این نسخه:
- پشتیبانی از بارگذاری کلید خصوصی با STORE loaderها در crypto
- بهروزرسانی ریشهگواهیها به NSS 3.125 در crypto
- افزودن پشتیبانی Perfetto برای پروفایلینگ کارایی
- پیادهسازی
Symbol.dispose در ModuleHooks ماژولها- افزودن فلگ
--test-coverage-include-all به test_runner- بهروزرسانی npm به نسخه 11.19.0 و سایر وابستگیها و غیره
🔖 #nodejs, #web, #js, #release
💎 @DevelopixJavascript
❤2