| کانال توسعه‌دهندگان جاوااسکریپت |
3.87K subscribers
63 photos
3 videos
40 links
⭕️ کانال توسعه‌دهندگان جاوااسکریپت دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
‌‎پاک‌سازی توابع با تکنیک «Early Return» در JavaScript 🚿

یکی از ساده‌ترین و مؤثرترین تکنیک‌های 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 به «کاندید انتشار»
- پشتیبانی از بافر سفارشی در 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
👍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
👍4
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است

🔸 ارتقا از نسخه 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
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است

🔸 ارتقا از نسخه 26.7.0 به 26.8.1

🔹 لیست تغییرات این نسخه:
- رفع مشکل نمایش اشتباه نسخه در خروجی node --version

🔖 #nodejs, #web, #js, #release

💎 @DevelopixJavascript
👍2
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است

🔸 ارتقا از نسخه 26.8.2 به 26.9.0

🔹 لیست تغییرات این نسخه:
- افزودن API عمومی برای MAC در ماژول crypto
- کشف خودکار cipherها از OpenSSL providerها در crypto
- کشف خودکار hashها از OpenSSL providerها در crypto
- فعال شدن پیش‌فرض ماژول FFI برای اتصال به کتابخانه‌های بومی
- معرفی node:bench و بهبودهای perf_hooks برای بنچمارک
- پشتیبانی Web Workers و API آزمایشی DTLS و تغییرات دیگر

🔖 #nodejs, #web, #js, #release

💎 @DevelopixJavascript
👍1
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است

🔸 ارتقا از نسخه 26.9.0 به 26.10.0

🔹 لیست تغییرات این نسخه:
- افزودن تابع جدید crypto.parsePKCS12 برای پردازش PKCS12
- قابلیت بارگذاری کتابخانه‌ها از VFS در ffi
- اضافه شدن متد fs.openAsBlobSync برای کار با فایل به صورت Blob
- امکان ارسال net.BoundSocket به Thread و فرایند فرزند
- افزودن SlidingWindowHistogram و تحلیل qrde در perf_hooks
- بهبودهای متعدد دیگر در util، sqlite و غیره

🔖 #nodejs, #web, #js, #release

💎 @DevelopixJavascript
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است

🔸 ارتقا از نسخه 26.10.0 به 26.11.1

🔹 لیست تغییرات این نسخه:
- افزودن اعتبارسنجی نام و مقدار هدرهای HTTP
- پایدار شدن process.ref و process.unref
- افزودن محدودیت زمانی اجرای پردازش
- ارتقای پشتیبانی Alpine Linux به سطح دوم
- افزودن محاسبه طول رشته با Buffer.stringLength
- رفع مشکل دسترسی به مستندات و موارد دیگر

🔖 #nodejs, #web, #js, #release

💎 @DevelopixJavascript