CodeVerse | دنیای برنامه نویسان
1.06K subscribers
65 photos
6 videos
72 links
💻 ترفند برنامه نویسی PHP & JavaScript
🚀 آموزش وردپرس
💡 ترفندهای کاربردی
🤖 هوش مصنوعی و تکنولوژی
👨‍💻آموزش • ترفند • پروژه

@ideveloperweb_z |ارتباط
Download Telegram
🧠 یه مشکل معماری که هرچی پروژه بزرگ‌تر بشه، بیشتر اذیتت می‌کنه

فرض کن توی پروژه JavaScript چندین بخش مستقیم به API وصل شدن:

fetch("/api/users")
fetch("/api/products")
fetch("/api/orders")

اوایل پروژه هیچ مشکلی نداره.

اما چند ماه بعد Authentication تغییر می‌کنه.

مثلاً باید یک Header اضافه کنی:

Authorization: Bearer TOKEN

حالا باید بری تمام fetchها رو پیدا کنی و تغییر بدی. 😐

اینجاست که داشتن یک API Client مرکزی ارزش خودش رو نشون میده.

مثلاً:

const api = {
get(url) {
return fetch(`/api${url}`, {
headers: {
Authorization: `Bearer ${token}`
}
});
}
};

حالا بقیه پروژه فقط با این لایه کار می‌کنن:

const users = await api.get("/users");

بعداً اگر:

🔹 Base URL تغییر کرد
🔹 Authentication تغییر کرد
🔹 Retry لازم شد
🔹 Logging اضافه شد
🔹 Error Handling مرکزی خواستی

فقط یک نقطه رو تغییر میدی.

ساختار کلی:

UI
↓
Service
↓
API Client
↓
Backend

🔥 اینجاست که مفهوم Separation of Concerns از یک اصطلاح تئوری تبدیل میشه به چیزی که واقعاً زندگی برنامه‌نویس رو راحت می‌کنه.

💡 پروژه‌های بزرگ معمولاً با یک تصمیم بزرگ خراب نمی‌شن؛ با صدها تصمیم کوچیک که هرکدوم «فعلاً مشکلی ایجاد نمی‌کنن» به مرور غیرقابل نگهداری میشن.

@CodeVerse_dev
🔥6❤2
🐘 چرا کپی کردن یک آرایه همیشه به معنی کپی شدن Memory نیست؟

یکی از رفتارهای مهم PHP که خیلی‌ها ازش خبر ندارن، Copy-on-Write یا همون COW هست.

مثلاً:

$data = range(1, 1_000_000);

$copy = $data;

شاید فکر کنی الان PHP دو آرایه‌ی یکسان داخل Memory ساخته.

اما نه. 👀

زبانPHP در این مرحله می‌تونه هر دو متغیر رو به همون داده‌ی موجود در Memory ارجاع بده.

تا وقتی که یکی از اون‌ها تغییر نکرده:

$data = range(1, 1_000_000);

$copy = $data;

عملاً لازم نیست فوراً یک کپی کامل ساخته بشه.

اما وقتی تغییر ایجاد می‌کنی:

$copy[0] = 999;

اینجاست که PHP باید داده رو از هم جدا کنه.

یعنی:

$data ───────┐
├──> Same Memory
$copy ───────┘

↓ تغییر

$data ─────────> Original Data

$copy ─────────> New Copy

🔥 نکته مهم‌تر

این موضوع وقتی مهم می‌شه که با آرایه‌های بزرگ کار می‌کنی.

مثلاً:

function process(array $data): void
{
$data['status'] = 'processed';
}

$users = getHugeArray();

process($users);

ممکنه با دیدن array $data فکر کنی PHP از همون ابتدا کل آرایه رو کپی کرده.

اما Pass-by-Value در PHP الزاماً به معنی Copy فوری نیست.

زبانPHP می‌تونه از Copy-on-Write استفاده کنه و فقط زمانی واقعاً کپی ایجاد کنه که داده نیاز به تغییر داشته باشه.

---

⚠️ اما اینجا یک دام وجود داره

اگر واقعاً نمی‌خوای آرایه کپی بشه و فقط می‌خوای تابع روی همان داده کار کنه، می‌تونی از Reference استفاده کنی:

function process(array &$data): void
{
$data['status'] = 'processed';
}

ولی این به معنی «همیشه بهتر بودن Reference» نیست.

حالا Referenceها می‌تونن باعث پیچیده‌تر شدن رفتار کد و ایجاد Side Effect بشن.

پس صرفاً برای کاهش Memory نباید کورکورانه از & استفاده کرد.

---

🧠 نکته حرفه‌ای امروز

در PHP:

Assignment ≠ Copy فوری

و:

Pass-by-Value ≠ Copy فوری

به لطف Copy-on-Write، PHP تا زمانی که لازم نباشه داده رو واقعاً Duplicate نمی‌کنه.

بنابراین وقتی Performance و Memory برات مهمه، باید تفاوت بین:

Value

Reference

Copy-on-Write

و

Actual Memory Copy

رو بشناسی.

این دقیقاً یکی از تفاوت‌های بین «کدی که فقط کار می‌کنه» و «کدی که رفتار PHP Engine رو می‌فهمه» است. 🐘


@CodeVerse_dev
👍5❤3
🌐 چرا localStorage جای خوبی برای ذخیره هر چیزی نیست؟

قابلیت localStorage خیلی جذابه.

چون ساده‌ست:
localStorage.setItem(
"username",
"ali"
);

و بعد:

const user =
localStorage.getItem("username");

ولی یک اشتباه خطرناک اینه که فکر کنیم:

«چون فقط داخل مرورگر ذخیره میشه، پس امنه.»

نه.

هر JavaScriptای که در Origin مربوطه اجرا بشه، در شرایط مناسب می‌تونه به localStorage دسترسی داشته باشه.

پس اطلاعات حساس مثل:

Password
Access Token
Secret Key
Personal Sensitive Data

رو نباید بدون بررسی امنیتی داخلش ذخیره کنی.

از طرف دیگه localStorage همزمان با درخواست HTTP به سرور ارسال نمیشه؛ یعنی برخلاف Cookie، خودش مکانیزم ارسال خودکار Credential نیست.

برای Authentication باید معماری امنیتی درست داشته باشی، نه اینکه صرفاً یک Token رو داخل localStorage بذاری و خیال خودت رو راحت کنی.

یک API ساده ممکنه در چند خط نوشته بشه؛

ولی محل نگهداری Credentialها تصمیمیه که باید با تهدیدهای امنیتی پروژه گرفته بشه.


@CodeVerse_dev
👍4❤3
🛡️ بازگشت Worm معروف Shai-Hulud به npm

یک خبر جدی برای توسعه‌دهنده‌های JavaScript:

محققان امنیتی اعلام کرده‌اند که Shai-Hulud، یک Worm مخرب در اکوسیستم npm، دوباره فعال شده است.

این بار نکته عجیب‌تر این است که مهاجمان توانسته‌اند چند پکیج مخرب را از سیستم جدید بررسی امنیتی npm عبور دهند.

بررسی‌ها نشان می‌دهد:

🔴 ۴ پکیج مخرب در فاصله کوتاهی منتشر شدند
🔴 حمله بعد از حدود ۱۱۱ روز دوباره مشاهده شد
🔴 و اینکه Payload استفاده‌شده همان نمونه قبلی بوده
🔴 هدف اصلی، سرقت Tokenها و اطلاعات حساس توسعه‌دهنده‌هاست

یعنی حتی اگر یک Package Manager سیستم بررسی امنیتی داشته باشد، باز هم نباید Blind Trust داشته باشیم.

🎯 برای پروژه‌های واقعی:

npm install
↓
Dependency
↓
Dependency Chain
↓
Malicious Code?
↓
Your CI/CD + Secrets

💡 امنیت Supply Chain یعنی فقط به کدی که خودت نوشته‌ای اعتماد نکنی؛ تمام Dependency Tree بخشی از سطح حمله پروژه است.

@CodeVerse_dev
👍5❤2
🚨بیش از ۶ میلیون سایت در معرض خطر بودند

دو آسیب‌پذیری جدی در Pluginهای محبوب WordPress شناسایی و Patch شده‌اند:

🔴 Elementor Pro
🔴 Super Forms

هر دو مشکل مربوط به Unrestricted File Upload بوده‌اند؛ یعنی مهاجم می‌توانسته فایل‌هایی با نوع خطرناک را در شرایط خاص روی سایت آپلود کند.

در مورد Elementor Pro، آسیب‌پذیری تا نسخه 4.2.1 وجود داشته و امکان Remote Code Execution را ایجاد می‌کرد.

شدت هر دو آسیب‌پذیری:

CVSS 9.8 / Critical

و نکته مهم‌تر:

⚠️ صدها هزار تلاش برای سوءاستفاده از این آسیب‌پذیری‌ها مشاهده شده است.

🎯 درس مهم برای WordPress Developer:

فقط WordPress Core را Update نکن.

Core
+
Plugins
+
Themes
+
Server
+
Dependencies
=
Security

💡 یک Plugin می‌تواند به اندازه خود WordPress Core سطح حمله ایجاد کند.

@CodeVerse_dev
👍6❤2
💻❤️ روز برنامه‌نویس مبارک!

به همه‌ی اونایی که ساعت‌ها باگ می‌زنن، دیباگ می‌کنن، سرچ می‌کنن و آخرش با یه ; یا یه پرانتز اضافه می‌فهمن مشکل کجا بوده 😂

برنامه‌نویسی همیشه آسون نیست؛ بعضی روزها پر از خطا و سردرگمیه، ولی هر چیزی که امروز برات سخته، با تمرین یه روز تبدیل میشه به چیزی که بهش افتخار می‌کنی.

پس اگه تازه شروع کردی، وسط راهی یا حتی یه مدت خسته شدی، ادامه بده.
کدی که امروز نمی‌فهمیش، شاید فردا دلیل پیشرفتت باشه. 🚀

روز همه‌ی برنامه‌نویس‌ها مبارک ❤️‍🔥

@CodeVerse_dev
❤‍🔥16❤2👎1
🔍 چرا Dependencyهای غیرمستقیم مهم‌تر از چیزی هستند که فکر می‌کنی؟

فرض کن پروژه‌ات فقط این Package را نصب کرده:

{
"dependencies": {
"package-a": "^5.0"
}
}

اما package-a خودش از این‌ها استفاده می‌کند:

package-a
├── package-b
│ └── package-c
│ └── package-d
└── package-e

تو فقط package-a را نصب کردی؛

اما در واقع داری به چندین Package دیگر هم اعتماد می‌کنی.

این همان چیزی است که به آن:

Transitive Dependencies

می‌گوییم.

🎯 مشکل کجاست؟

اگر یکی از Dependencyهای پایین‌دست:

🔴 آسیب‌پذیر شود
🔴 یا Hijack شود
🔴 همینطور Maintainer آن Compromise شود
🔴 نسخه مخرب منتشر کند

ممکن است پروژه تو هم تحت تأثیر قرار بگیرد.

💡 به همین دلیل ابزارهای Dependency Scanning و Lockfileها فقط امکانات جانبی نیستند؛ در پروژه‌های جدی بخشی از زنجیره امنیت هستند.

@CodeVerse_dev
👍5❤1
‏📊 یه ابزار ساده، کاربردی و خوش‌ساخت برای ساخت Pie Chart

اگه برای گزارش، ارائه یا پروژه‌ات نیاز به نمودار دایره‌ای داری، این ابزار بدون دردسر برات می‌سازه.

کافیه داده‌ها رو وارد کنی؛ نمودار همون لحظه به‌صورت زنده ساخته می‌شه و می‌تونی خروجی رو با فرمت‌های PNG، JPG یا SVG دریافت کنی.

نکته جالب‌تر اینکه کل پردازش داخل مرورگر انجام می‌شه و داده‌ها به سرور ارسال نمی‌شن. این پروژه هم با React، Tailwind CSS و Google Charts ساخته شده و روی Vercel دیپلوی شده. 👌

یه نمونه خوب از اینکه چطور می‌شه با یک ایده ساده، یک ابزار کاربردی و تمیز ساخت.

📎 Article


@CodeVers_dev
👍5❤2
🐘 وضعیت PHP 8.5 در سپتامبر ۲۰۲۶

اگر هنوز پروژه‌های PHP خودت را روی نسخه‌های قدیمی نگه داشته‌ای، وقت آن است که وضعیت Version را جدی‌تر بررسی کنی.

شاخه فعلی PHP 8.5 است و نسخه‌های Patch آن به‌صورت منظم منتشر می‌شوند.

اما یک نکته مهم:

❌ فقط به عدد Version نگاه نکن.

مثلاً:

PHP 8.5
↓
Patch Release
↓
Bug Fix
↓
Security Fix
↓
Changelog

قبل از ارتقای Production:

1️⃣ Changelog را بخوان
2️⃣ Composer Dependencies را بررسی کن
3️⃣ Test Suite را اجرا کن
4️⃣ روی Staging تست کن
5️⃣ بعد Production را Update کن

💡 در پروژه‌های حرفه‌ای، «آخرین نسخه» لزوماً به معنی «همین الان روی Production نصبش کن» نیست؛ Release را بررسی می‌کنیم، Compatibility را می‌سنجیم و بعد Deploy می‌کنیم.

@CodeVerse_dev
👍5❤3
🧩 Design Patterns in 3 Minutes | Factory Pattern

فرض کن در پروژه یک سیستم پرداخت داری:

if ($gateway === 'zarinpal') {
$payment = new Zarinpal();
}

if ($gateway === 'idpay') {
$payment = new IDPay();
}

if ($gateway === 'stripe') {
$payment = new Stripe();
}

امروز مشکلی ندارد.

اما بعداً می‌شود:

5 Gateway
↓
10 Gateway
↓
20 Gateway

و Controller تبدیل می‌شود به یک جنگل از if/elseها. 😅

اینجا Factory Pattern می‌تواند کمک کند.

مثلاً:

$payment = PaymentFactory::make($gateway);

حالا مسئولیت ساخت Object از Controller خارج شده.

🎯حالا Factory چه مشکلی حل می‌کند؟

به جای اینکه هر جای پروژه بدانی:

«برای ساخت این Object دقیقاً باید چه Classای را new کنم؟»

این تصمیم را به یک نقطه مشخص منتقل می‌کنی.

💡 اما یک نکته Senior-Level:

قابلیتFactory را فقط برای اینکه کدت حرفه‌ای‌تر به نظر برسد استفاده نکن.

اگر فقط دو Class داری و منطق ساخت ساده است، Factory ممکن است فقط پیچیدگی اضافه کند.

موضوع Pattern زمانی ارزش دارد که یک مشکل واقعی در طراحی را حل کند.

@CodeVerse_dev
👍5❤2
🧩 چرا بعد از حذف یک افزونه، سرعت سایت همیشه بهتر نمی‌شه؟

یک تصور رایج:

«این افزونه رو حذف کردم، پس دیتابیس هم سبک شد.»

لزوماً نه.

بعضی افزونه‌ها هنگام حذف، تمام داده‌هایی که داخل دیتابیس ساخته‌اند رو پاک نمی‌کنن.

ممکنه بعد از حذف افزونه هنوز چیزهایی مثل:

wp_options
wp_postmeta
wp_usermeta
Custom Tables
Cron Events

باقی مونده باشن.

بدتر اینکه بعضی افزونه‌ها داده‌های موقتی یا Optionهای زیادی ایجاد می‌کنن که بعداً روی Autoload هم اثر می‌ذاره.

اما اینجا هم نباید کورکورانه بری سراغ حذف اطلاعات.

چون ممکنه یک Option هنوز توسط قالب یا افزونه دیگری استفاده بشه.

روش حرفه‌ای:

اول شناسایی → بعد بررسی وابستگی → بعد پاک‌سازی

نه اینکه مستقیم وارد دیتابیس بشی و هر چیزی که اسم افزونه قدیمی روشه حذف کنی. 😄

در WordPress، تمیز بودن دیتابیس خوبه؛

ولی پاک‌سازی بدون شناخت می‌تونه از دیتابیس شلوغ خطرناک‌تر باشه.


@CodeVerse_dev
🔥5❤2
⚡ چرا forEach همیشه انتخاب خوبی نیست؟

این کد رو زیاد می‌بینیم:

users.forEach(async (user) => {
await sendEmail(user);
});

ظاهرش کاملاً منطقیه.

ولی یک مشکل مهم داره:

تابع forEach منتظر Promiseهای داخل Callback نمی‌مونه.

یعنی ممکنه همه sendEmailها تقریباً هم‌زمان شروع بشن و کدی که بعد از forEach نوشته شده، قبل از تمام شدن اون‌ها اجرا بشه.

اگر واقعاً می‌خوای یکی‌یکی اجرا بشن:

for (const user of users) {
await sendEmail(user);
}

و اگر مستقل از هم هستن و می‌خوای هم‌زمان اجرا بشن:

await Promise.all(
users.map(user => sendEmail(user))
);

تفاوت این دو فقط Syntax نیست.

اولی:

کنترل‌شده و ترتیبی

دومی:

هم‌زمان و سریع‌تر، ولی با مصرف منابع بیشتر

پس وقتی Async Code می‌نویسی، همیشه از خودت بپرس:

این عملیات باید یکی‌یکی انجام بشه یا واقعاً می‌تونن هم‌زمان اجرا بشن؟

همین یک سؤال می‌تونه جلوی کلی Bug و Performance Problem رو بگیره.

@CodeVerse_dev
👍5❤1
یه باگ که از یه جای خیلی ساده شروع شد!

یروز داشتم یکی از بخش‌های پروژه رو بررسی می‌کردم که متوجه شدم یه درخواست HTTP بیشتر از چیزی که انتظار داشتم اجرا میشه.

اول فکر کردم مشکل از Backend ـه.

ولی وقتی Network رو باز کردم و درخواست‌ها رو یکی‌یکی بررسی کردم، فهمیدم مشکل از Frontend شروع شده.

یه Event Listener چند بار روی یک Element ثبت شده بود!

نتیجه؟

با هر کلیک، چند درخواست همزمان ارسال می‌شد. 😐

جالب اینجاست که کد ظاهراً کاملاً درست به نظر می‌رسید.

این تجربه دوباره بهم یادآوری کرد که موقع Debug فقط به نتیجه نهایی نگاه نکنم؛ مسیر اتفاق رو هم بررسی کنم.

گاهی DevTools بیشتر از خود کد بهت جواب میده.

📢 @CodeVerse_dev
❤9
یکی از خطرناک‌ترین جمله‌ها در یک پروژه:

«فعلاً کار می‌کنه، بعداً درستش می‌کنیم.»

«بعداً» معمولاً تبدیل می‌شود به:
TODO
↓
TODO
↓
TODO
↓
Temporary Fix
↓
Temporary Fix
↓
Production Code

و ناگهان بعد از چند ماه، هیچ‌کس جرئت تغییر آن قسمت را ندارد.

اسم این مشکل فقط Technical Debt نیست.

مشکل بزرگ‌تر اینه که تیم کم‌کم ترس از تغییر کد پیدا می‌کنه.

توسعه‌دهنده حرفه‌ای لزوماً کسی نیست که از اول بهترین معماری دنیا را طراحی کند.

کسیه که بداند:

کجا می‌شود ساده نوشت،
کجا باید از ابتدا درست طراحی کرد،
و کجا نباید «فعلاً» را وارد Production کرد.

@CodeVerse_dev
👍7❤2
🚨 اگر All-in-One WP Migration داری، این پست مهمه

یک آسیب‌پذیری SQL Injection بدون نیاز به لاگین در افزونه‌ی محبوب All-in-One WP Migration and Backup گزارش شده که حدود ۵ میلیون سایت وردپرسی را تحت تأثیر قرار می‌دهد.

نکته‌ی جالب‌تر اینه که Wordfence اعلام کرده برای کاربران رایگانش، محافظت فایروال از ۱۵ سپتامبر ۲۰۲۶ فعال می‌شود.

یعنی امروز دقیقاً روزیه که اگر این افزونه روی سایتت نصبه، باید وضعیتش رو بررسی کنی.

🔐 همیشه اینو یادت باشه:

نصب یک افزونه‌ی محبوب ≠ امن بودن آن

قبل از هر چیز:

نسخه افزونه را بررسی کن
آپدیت موجود را نصب کن
افزونه‌های بلااستفاده را حذف کن
لاگ‌های امنیتی سایت را بررسی کن

@CodeVerse_dev
👍6❤2
🚀 زبان TypeScript دیگه فقط یک زبان تایپ‌شده روی JavaScript نیست؛ Compiler خودش هم متحول شده

یکی از تغییرات مهم امسال، مهاجرت TypeScript به یک Compiler کاملاً Native بر پایه Go هست.

نسخه TypeScript 7 با این معماری جدید منتشر شده و مایکروسافت گزارش کرده که در Buildهای کامل، بسته به پروژه، سرعت‌هایی حدود ۸ تا ۱۲ برابر نسبت به Compiler قبلی دیده میشه.

اما نکته مهم فقط سرعت نیست.

در پروژه‌های بزرگ TypeScript، زمان صرف‌شده برای:
Type Checking
↓
Language Server
↓
Build
↓
IDE Feedback

می‌تونه روی تجربه توسعه‌دهنده تأثیر جدی بذاره.

وقتی این بخش‌ها سریع‌تر بشن، نتیجه فقط یک Build سریع‌تر نیست.

یعنی:

⚡عمل Feedback سریع‌تر داخل IDE
⚡ سریع‌تر شدن Type Checking
⚡ تجربه بهتر در Monorepoها
⚡ امکان کار راحت‌تر با Codebaseهای بزرگ

و این دقیقاً همون جاییه که TypeScript می‌خواد JavaScript رو برای پروژه‌های خیلی بزرگ مقیاس‌پذیرتر کنه.

💡 نکته جالب:

گاهی Performance یک زبان فقط به Runtime مربوط نیست؛ سرعت ابزارهای اطراف Developer هم بخشی از Performance واقعی اون اکوسیستمه.

@CodeVerse_dev
👍6❤2
🚨 امروز چند آسیب‌پذیری جدی در افزونه‌های وردپرس گزارش شده

یکی از موارد امروز مربوط به افزونه Login with QR با شناسه CVE-2026-86710 هست.

مشکل از جایی میاد که افزونه کد ورود QR را به‌درستی اعتبارسنجی نمی‌کنه و در شرایطی مهاجم بدون احراز هویت می‌تونه به‌عنوان یک کاربر وارد سایت بشه؛ حتی اگر آن حساب Administrator باشه.

دو مورد دیگه هم امروز برای افزونه‌های Pressengine و PuppyFW گزارش شده:

🔴 Pressengine → امکان دور زدن احراز هویت و ایجاد Session معتبر

🔴 PuppyFW → ضعف در بررسی Permission در REST API و امکان تغییر تنظیمات سایت توسط کاربر دارای دسترسی پایین‌تر

نکته مهم برای توسعه‌دهنده‌های WordPress:

وقتی یک API یا Login Handler می‌نویسی، هیچ‌وقت نباید به داده‌ای که از Request میاد برای تعیین سطح دسترسی اعتماد کنی.

اشتباه خطرناک:

$capability = $_REQUEST['capability'];

current_user_can($capability);

چون کاربر عملاً داره تعیین می‌کنه:

«بررسی کن ببین من این دسترسی رو دارم یا نه!»

سطح دسترسی باید سمت سرور و از یک مقدار ثابت و قابل اعتماد تعیین بشه.

💡 خیلی از باگ‌های امنیتی پیچیده، در نهایت از یک اشتباه ساده شروع میشن:

اعتماد کردن به چیزی که کاربر خودش می‌تونه کنترلش کنه.

@CodeVerse_dev
❤8
چرا باید Destructuring در JavaScript رو بلد باشی؟ 🤔

فرض کن از API یک User گرفتیم:

const user = {
name: "alex",
age: 22,
role: "Developer"
};

روش معمول:

const name = user.name;
const age = user.age;
const role = user.role;

اما با Destructuring:

const { name, age, role } = user;

همین! 😎

حالا مستقیم می‌تونی استفاده کنی:

console.log(name);
console.log(age);
console.log(role);

---

تغییر اسم متغیر هم میشه 👀

مثلاً:

const { name: username } = user;

console.log(username);
// alex

اینجا Property همچنان name هست، ولی متغیری که ساختیم username نام داره.

---

مقدار پیش‌فرض هم می‌تونی تعیین کنی:

const { name, country = "England" } = user;

console.log(country);
// England

اگر country داخل Object وجود نداشته باشه، مقدار پیش‌فرض استفاده میشه.

---

داخل Destructuring برای Array هم داریم 🔥

const colors = ["red", "blue", "green"];

const [first, second] = colors;

console.log(first);
// red

console.log(second);
// blue

حتی می‌تونی بعضی آیتم‌ها رو رد کنی:

const [first, , third] = colors;

console.log(third);
// green

---

کاربرد واقعی در پروژه

وقتی از یک تابع چند مقدار برمی‌گردونی:

function getUser() {
return {
name: "alex",
age: 22
};
}

const { name, age } = getUser();

یا هنگام کار با API:

const { data, status } = response;

کدت هم کوتاه‌تر میشه، هم خواناتر.

حالا Destructuring فقط برای کوتاه کردن کد نیست؛ کمک می‌کنه دقیقاً مشخص باشه از یک Object یا Array چه داده‌ای نیاز داری. 🚀

@CodeVerse_dev
👍8❤3
یک اشتباه رایج بین توسعه‌دهنده‌ها:
npm install package

و تمام.

اما واقعاً چه چیزی نصب شد؟

ممکنه تو فقط اینو درخواست کرده باشی:

my-package

ولی پشت صحنه:
my-package
├── dependency-A
│ ├── dependency-C
│ └── dependency-D
├── dependency-B
│ └── dependency-E
└── ...

یعنی یک پکیج می‌تواند ده‌ها یا حتی صدها dependency دیگر وارد پروژه کند.

حملات زنجیره تأمین دقیقاً از همین نقطه خطرناک می‌شوند.

در سال ۲۰۲۶ چندین حمله بزرگ به npm رخ داده که حتی پکیج‌های محبوب را هدف گرفته‌اند؛ از جمله ChainDrop که بیش از ۴۰۰ پکیج npm را تحت تأثیر قرار داد.

پس قبل از اینکه یک پکیج را فقط به خاطر محبوب بودن نصب کنی، این سؤال را بپرس:

«این پکیج چه چیزهایی را با خودش وارد پروژه من می‌کند؟»

@CodeVerse_dev
👍7❤2
This media is not supported in your browser
VIEW IN TELEGRAM
توصیه مهم توی پروژه ها 🙂‍↕️
👌4😁3❤1