Codoloper

آموزش برنامه‌نویسی به فارسی

یاد بگیر، پیشرفت کن، بساز.

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

داکیومنت ها:

JavascriptJetpack ComposeHTMLCSSبیشتر
1// برنامه‌نویسی به فارسی
2import { learn } from 'codoloper'
3
4const developer = learn({
5"lang": "فارسی"
6"level": "همه سطوح"
7free: true
8})
240+
صفحه مستندات
6+
زبان ها / فریمورک ها
رایگان
دسترسی کامل
چرا کدلپر؟

ارزش‌های ما

یادگیری برنامه‌نویسی نباید پیچیده باشد - ما مسیر را ساده می‌کنیم.

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

مطالب جدید

تازه‌ترین مطالب آموزشی و خبرهای مرتبط.

زبان برنامه‌نویسی Verse, انقلاب در توسعه متاورس و بازی‌سازی؟ نوشته شده توسط عرفان دهقانی

زبان برنامه‌نویسی Verse, انقلاب در توسعه متاورس و بازی‌سازی؟

دنیای بازی‌سازی و اینترنت سه‌بعدی (متاورس) با سرعتی سرسام‌آور در حال حرکت است. تا پیش از این، توسعه‌دهندگان بازی‌ها مجبور بودند میان زبان‌های پیچیده و سطح پایینی مثل C++ (برای کارایی بالا) یا ابزارهای اسکریپت‌نویسی بصری و محدود، دست به انتخاب بزنند. اما کمپانی اپیک گیمز (Epic Games) با معرفی ابزار Unreal Editor for Fortnite (UEFN) از یک برگ برنده رونمایی کرد: زبان برنامه‌نویسی ورس (Verse).

ورس تنها یک زبان اسکریپت‌نویسی ساده برای یک بازی نیست؛ این زبان با دیدگاهی بلندمدت و با مشارکت دانشمندان بزرگی چون سایمون پیتون جونز (یکی از خالقان اصلی زبان هسکل) طراحی شده تا زبان آیندهٔ وبِ سه‌بعدی و متاورس باشد. در این مقاله، عمیقاً بررسی می‌کنیم که Verse چیست، چه ویژگی‌های منحصربه‌فردی دارد و چرا باید یادگیری آن را از همین امروز شروع کنید.

زبان Verse چیست و چرا متولد شد؟

زبان Verse یک زبان برنامه‌نویسی چندپارادایمی (Multi-Paradigm) است که ویژگی‌های برنامه‌نویسی تابعی (Functional)، منطقی (Logic) و امری (Imperative) را به شکلی نوآورانه با هم ترکیب کرده است. اپیک گیمز این زبان را با سه اصل بنیادی طراحی کرده است:

  1. فقط کد است (It's just code): پیچیده‌ترین مفاهیم بازی و شبیه‌سازی، در قالب ساختارهای اولیه و خوانای متنی بیان می‌شوند.

  2. یک زبان برای همه چیز (Just one language): ساختارهای یکسانی برای زمان کامپایل (Compile-time) و زمان اجرا (Run-time) استفاده می‌شود.

  3. اول متاورس (Metaverse first): این زبان از پایه برای یک محیط شبیه‌سازی جهانی، توزیع‌شده و زنده طراحی شده است؛ جایی که کدهای نوشته شده باید سال‌ها بدون مشکل و با حفظ سازگاری عقب‌رو (Backward Compatibility) اجرا شوند.

ویژگی‌های کلیدی و انقلابی زبان Verse

اگر با زبان‌هایی مثل پایتون، سی‌شارپ یا جاوااسکریپت کار کرده باشید، در مواجهه با Verse با مفاهیم شگفت‌انگیزی روبرو خواهید شد که فرآیند توسعه را به شدت ایمن‌تر و لذت‌بخش‌تر می‌کنند.

۱. همه چیز یک «عبارت» است (Everything is an Expression)

در زبان‌های سنتی، ما بین دستورات (Statements - مانند حلقه‌ها که مقداری برنمی‌گردانند) و عبارات (Expressions - که مقدار تولید می‌کنند) تفاوت قائل می‌شویم. در Verse این مرز وجود ندارد؛ همه چیز یک عبارت است و یک مقدار تولید می‌کند.

به عنوان مثال، یک شرط ساده یا حتی یک حلقه در ورس می‌تواند مستقیماً به یک متغیر نسبت داده شود:

Result := if (Condition[]) then "yes" else "no"
Multiply := for (X : Array) { X * 42 }

این ویژگی باعث می‌شود کدها فوق‌العاده ترکیب‌پذیر (Composable) و خلاصه شوند.

۲. سیستم شکست به جای مقادیر بولی (Failure as Control Flow)

یکی از جذاب‌ترین بخش‌های فنی ورس، سیستم شکست (Failure System) آن است. در ورس چیزی به نام مقدار Boolean (True/False) سنتی برای کنترل جریان برنامه وجود ندارد. در عوض، عبارات یا «موفق» می‌شوند و مقداری را برمی‌گردانند، یا «شکست» می‌خورند.

توابعی که ممکن است شکست بخورند با براکت [] مشخص می‌شوند. اگر عبارتی در یک محیط failable (قابل شکست) اجرا شود و شکست بخورد، تغییرات آن بخش از کد به صورت خودکار به حالت قبل برمی‌گردد (Speculative Execution). این یعنی دیگر نیازی به نوشتن ساختارهای تکراری try-catch برای مدیریت خطاها ندارید.

۳. همزمانی ساختاریافته (Structured Concurrency)

برنامه‌نویسی بازی‌های آنلاین و چندنفره به شدت به مدیریت زمان و رویدادهای همزمان وابسته است. ورس با معرفی مفاهیمی چون sync ،race ،rush و branch برنامه‌نویسی ناهمگام (Async) را به بازیچه تبدیل کرده است. شما می‌توانید چندین کار را به طور همزمان اجرا کنید، مشخص کنید که کدام یک باید منتظر دیگری بماند، یا در صورت برنده شدن یک پردازش در مسابقه (race)، بقیه پردازش‌ها را فوراً لغو کنید؛ همه این‌ها بدون ریزش حافظه یا تداخل‌های رایج شبکه!

جایگاه Verse در اکوسیستم Unreal Editor for Fortnite (UEFN)

در حال حاضر، دروازه ورود به دنیای ورس، ابزار UEFN یا همان محیط توسعه فورتنایت است. پیش از این، کاربران در بخش Fortnite Creative تنها می‌توانستند دستگاه‌های بازی (Devices) را با خطوط بصری و محدود به هم متصل کنند. اما ورس به شما قدرت مطلق می‌دهد.

با استفاده از Verse در UEFN می‌توانید:

  • تعاملات پیچیده بسازید: رفتار بازیکنان، قوانین بازی و محیط را با دقت میلی‌ثانیه‌ای کنترل کنید.

  • منطق‌های داینامیک خلق کنید: بازی‌هایی بسازید که بر اساس وضعیت فعلی جهان بازی یا مشخصات بازیکن، به صورت زنده تغییر می‌کنند.

  • محدودیت ابزارهای بصری را بشکنید: ساخت سیستم‌های امتیازدهی پیشرفته، هوش مصنوعی شخصی‌سازی‌شده برای NPCها و مکانیزم‌های خلاقانه که تا پیش از این غیرممکن بود.

مقایسه اجمالی: Verse در برابر زبان‌های دیگر

ویژگیزبان Verseزبان‌های سنتی (C++/C#)
هدف اصلیشبیه‌سازی متاورس و بازیتوسعه عمومی و سیستم
مدیریت خطاسیستم شکست (Failure Contexts)استثناها (Exceptions / Try-Catch)
نوع پارادایمتابعی - منطقی - امریشیءگرا یا امری
امنیت شبکهبالا و بومی (بدون Desync)نیازمند کدنوسی دستی پیچیده

چگونه یادگیری Verse را شروع کنیم؟

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

گام اول: نصب ابزارها

ابتدا باید نرم‌افزار Epic Games Launcher را نصب کرده و از درون آن Unreal Editor for Fortnite (UEFN) را دریافت کنید. ورس به صورت بومی در این ادیتور ادغام شده است.

گام دوم: استفاده از قالب‌های آماده (Templates)

مستندات رسمی اپیک گیمز شامل پروژه‌های آماده‌ای مانند Verse Starter Template است. با باز کردن این پروژه‌ها، می‌توانید کدهای نوشته شده برای هدایت یک NPC یا تغییر یک دستگاه در بازی را ببینید، آن‌ها را دستکاری کنید و نتیجه را فوراً در بازی مشاهده کنید.

گام سوم: مطالعه منبع اصلی (Book of Verse)

اگر برنامه‌نویس هستید و می‌خواهید مستقیماً به سراغ مفاهیم عمیق مانند سیستم افکت‌ها (Effects)، کلاسیفیکیشن تایپ‌ها (Type System) و مدیریت حافظه بروید، کتاب آنلاین ورس (Book of Verse) که در آدرس verselang.github.io/book در دسترس است، بهترین و دقیق‌ترین مرجع برای شماست.

آینده زبان Verse؛ فراتر از فورتنایت

شاید بپرسید: «آیا ارزش دارد زبانی را یاد بگیرم که فقط در فورتنایت کاربرد دارد؟» پاسخ کوتاه این است: ورس محدود به فورتنایت نخواهد ماند.

تیم سویینی (مدیرعامل اپیک گیمز) بارها اشاره کرده است که هدف نهایی ورس، تبدیل شدن به زبان استاندارد موتور بازی‌سازی Unreal Engine و در نهایت کل اینترنت سه‌بعدی است. پتانسیل این زبان در هندل کردن پروژه‌های MMO (بازی‌های آنلاین انبوه) با هزاران بازیکن در یک سرور واحد، بدون ناهماهنگی (Desync)، توجه بسیاری از نظریه‌پردازان زبان‌های برنامه‌نویسی را جلب کرده است.

کلام آخر

زبان برنامه‌نویسی Verse مرزهای سنتی میان کدنویسی سخت‌گیرانه و خلاقیت در بازی‌سازی را جابه‌جا کرده است. چه یک بازی‌ساز مستقل باشید که می‌خواهد مپ‌های درآمدزا در فورتنایت خلق کند، و چه یک مهندس نرم‌افزار کنجکاو که به دنبال کشف پارادایم‌های نوین برنامه‌نویسی است، ورس ابزاری است که نباید از آن غافل شوید. رویای متاورس در حال ساختن است و خطوط کد آن، با زبان ورس نوشته می‌شوند. همین امروز یادگیری آن را شروع کنید!

Unreal Engine 6 معرفی شد! Early Access زمستان 2027 نوشته شده توسط عرفان دهقانی

Unreal Engine 6 معرفی شد! Early Access زمستان 2027

شرکت اپیک گیمز (Epic Games) به طور رسمی از نسل بعدی موتور بازی‌سازی خود یعنی Unreal Engine 6 رونمایی کرد که قرار است مرزهای بین بازی‌های سنتی و جهان‌های ابری را کاملاً از بین ببرد.

اپیک گیمز در جریان کنفرانس اخیر خود (State of Unreal)، با معرفی نقشه راه Unreal Engine 6 (UE6)، بمب خبری بزرگی را در میان جامعه توسعه‌دهندگان و گیمرها منفجر کرد. اگر فکر می‌کنید این آپدیت هم فقط قرار است گرافیک بازی‌ها را کمی واقع‌گرایانه‌تر کند، سخت در اشتباهید؛ ورق در حال برگشتن است!

اپیک این‌بار تمرکز خود را از «چگونه ساختن بازی‌ها» به «چگونه منتشر کردن و مدیریت آن‌ها» تغییر داده است. هسته اصلی این تغییر، ادغام موتور قدرتمند Unreal Engine 5 و ابزار بازی‌سازی فورتنایت یعنی UEFN در یک پلتفرم واحد و یکپارچه است. یعنی شما یک‌بار بازی را می‌سازید و می‌توانید آن را هم‌زمان روی کنسول‌ها، کامپیوتر، موبایل و حتی به عنوان یک مینی‌گیم یا دنیای مجزا درون خود بازی فورتنایت (Fortnite) عرضه کنید!

تغییرات کلیدی و انقلابی در نسل ششم

  • کوچ بزرگ به زبان برنامه‌نویسی ورس (Verse): اپیک گیمز به مرور زمان زبان سنتی $C++$ و سیستم محبوب Blueprints را کنار می‌گذارد تا زبان جدید Verse را جایگزین کند. این زبان اختصاصی اجازه می‌دهد هزاران نفر به طور هم‌زمان و بدون تداخل، روی یک دنیای زنده و آنلاین کار کنند.

  • اقتصاد و دارایی‌های مشترک (Interoperability): شاید عجیب‌ترین بخش خبر این باشد که در UE6، کدهای برنامه‌نویسی و آیتم‌های درون بازی (مثل اسکین‌ها) قابلیت جابه‌جایی بین بازی‌های مختلف را دارند! اپیک تایید کرده که در اولین قدم، بازیکنان می‌توانند اسکین‌های فورتنایت خود را به بازی‌های ساخته‌شده با UE6 ببرند و برعکس.

  • تزریق هوش مصنوعی مولد به رگ‌های موتور: با پشتیبانی از پروتکل MCP (مخفف Model Context Protocol)، توسعه‌دهندگان می‌توانند از هوش مصنوعی‌های محبوبی مثل Claude و Gemini مستقیماً درون ابزار توسعه استفاده کنند تا کارهای تکراری و زمان‌بر حذف شوند و سرعت ساخت بازی‌ها چند برابر شود.

  • پشتیبانی باورنکردنی از سخت‌افزارهای ضعیف‌تر: در حاشیه این رویداد، نسخه جدید UE 5.8 نیز منتشر شد که به عنوان پل پیش‌درآمدی برای UE6 عمل می‌کند. فناوری نورپردازی Lumen حالا بهینه‌سازی شده تا بازی‌های سنگین بتوانند روی سخت‌افزارهای ضعیف‌تری مثل کنسول Nintendo Switch 2 یا پی‌سی‌های اقتصادی با نرخ 60 فریم بر ثانیه اجرا شوند.

این موضوع چه سودی برای ما (گیمرها) دارد؟

برای کاربر نهایی، این یعنی پایان دوران انتظار ۴ یا ۵ ساله برای ساخت بازی‌های بزرگ (AAA). بازی‌ها با کمک هوش مصنوعی و کدهای بهینه‌تر بسیار سریع‌تر ساخته می‌شوند، آپدیت‌ها فورا و بدون دانلودهای حجیم روی سرورها اعمال می‌شوند و از همه جذاب‌تر، پول و زمانی که برای خرید آیتم در یک بازی صرف کرده‌اید، در بازی‌های دیگرِ این اکوسیستم هم ارزش خواهد داشت.

تحلیل کوتاه (Peer Insight)

معرفی Unreal Engine 6 نشان می‌دهد که نگاه «تیم سوئینی» (مدیرعامل اپیک) به آینده صنعت گیم، فراتر از فروش بازی‌های مجزای خطی است. اپیک با این حرکت عملاً در حال ساخت زیرساختِ یک مِتاورس واقعی و کاربردی است؛ جایی که فورتنایت دیگر فقط یک بازی بتل‌رویال نیست، بلکه سیستم‌عاملِ بازی‌های آینده است. این انحصار و یکپارچگیِ بی‌نظیر، زنگ خطر بزرگی را برای رقبایی مثل موتور بازی‌سازی Unity به صدا درمی‌آورد.

نسخه دسترسی زودهنگام (Early Access) این موتور قدرتمند برای اواخر سال ۲۰۲۷ برنامه‌ریزی شده است، بنابراین تا دیدن اولین بازی‌های تماماً ساختِ UE6 هنوز چند سالی فاصله داریم.

راهنمای جامع TypeScript؛ تفاوت Type و Interface چیست و چه زمانی از کدام استفاده کنیم؟ نوشته شده توسط Haleh Nakisa

راهنمای جامع TypeScript؛ تفاوت Type و Interface چیست و چه زمانی از کدام استفاده کنیم؟

اگر به تازگی وارد دنیای TypeScript شدید یا حتی مدتیه که از اون تو پروژه‌هاتون (مثل Next.js یا React) استفاده می‌کنید، احتمالاً این سوال برای شما هم پیش اومده: «بالاخره برای تعریف ساختار داده‌ها از type استفاده کنم یا interface؟»
در نگاه اول، این دو کلمه کلیدی شباهت‌های زیادی به هم دارن و در اکثر مواقع کار یکسانی رو انجام میدن. اما در لایه‌های پایین‌تر، تفاوت‌های ساختاری و عملکردی مهمی دارن که شناخت اون‌ها، قطعا تو پروژه کمک کننده‌ست.
در این مقاله می‌خوایم این تفاوت‌ها رو موشکافی کنیم و ببینیم در سناریوهای واقعی، کدوم‌یک انتخاب بهتریه.
شباهت‌ها: 
قبل از اینکه سراغ تفاوت‌ها بریم، بهتره بدونیم که هر دو ابزار می‌تونن شکل یک شیء (Object) رو به راحتی توصیف کنن و هر دو از قابلیت‌هایی مثل ارث‌بری پشتیبانی می‌کنن:

// تعریف یک شیء با استفاده از Interface
interface UserInterface {
  id: number;
  name: string;
}

// تعریف همان شیء با استفاده از Type
type UserType = {
  id: number;
  name: string;
};
در هر دو حالت بالا، خروجی و رفتار TypeScript در مواجهه با یک کامپوننت یا تابع کاملاً یکسان هستش. اما مشکل از جایی شروع میشه که نیازهای پیچیده‌تری داشته باشیم.
تفاوت‌ها: چرا به هر دو نیاز داریم؟
۱. قابلیت ادغام خودکار یا Declaration Merging (کدوم بهتره: Interface)
بزرگ‌ترین و مهم‌ترین تفاوت ساختاری این دو اینه که interfaceها باز (Open) هستن، اما typeها بسته (Closed). یعنی شما می‌تونید یک interface رو چند بار با یک نام یکسان تعریف کنید و TypeScript به صورت خودکار تمام فیلدهای اون‌ها رو با هم ادغام می‌کنه:
interface Client {
  name: string;
}

interface Client {
  age: number;
}

// ادغام خودکار: حالا کلاینت هر دو فیلد را دارد
const newClient: Client = {
  name: "Ali",
  age: 25
};
اگر همین کار رو با type انجام بدید، بلافاصله با خطای دیتای تکراری (Duplicate identifier) مواجه میشد. این ویژگیِ interface برای زمان‌هایی که می‌خواید برای یک کتابخانه اکسترنال (مثل اضافه کردن فیلد به درخواست‌های Express یا تنظیمات تلویند) متغیر جدیدی اضافه کنید، حیاتیه.
۲. انواع داده‌های غیر شیء یا Primitive Types (کدوم بهتره: Type)
یک interface فقط و فقط میتونه شکل یک شیء (Object) یا تابع (Function) رو مشخص کنه. اما کلمه کلیدی type بسیار انعطاف‌پذیرتره و میتونه برای تعریف انواع الیاس‌ها (Aliases)، تایپ‌های ترکیبی (Union) یا چندوجهی (Intersection) استفاده شه:
// Union Types (تعریف تایپی که می‌تواند یکی از چند حالت باشد)
type Status = "pending" | "approved" | "rejected";
type ID = string | number;

// Tuple (آرایه‌ای با طول و تایپ مشخص)
type Point = [number, number];
انجام کارهای بالا با interface غیرممکنه.
۳. نحوه ارث‌بری و گسترش کد (Extending)
هر دو ابزار روش خاص خودشون رو برای گسترش دادن تایپ‌ها دارن. interface از کلمه کلیدی extends استفاده می‌کنه که از نظر فکری به شیءگرایی (OOP) نزدیک‌تره، در حالی که type از عملگر & (Intersection) استفاده می‌کنه:
// گسترش با Interface
interface Animal { name: string; }
interface Bear extends Animal { honey: boolean; }

// گسترش با Type
type AnimalType = { name: string; };
type BearType = AnimalType & { honey: boolean; };
بالاخره چه زمانی از کدوم استفاده کنیم؟ (Best Practices)
امروز تو دنیای توسعه وب، توافق‌های نانوشته اما استانداردی شکل گرفته که بر اساس اون‌ها میشه از فرمول زیر برای پروژه‌ها به استفاده کرد:
از Type استفاده کنید اگر:
•در حال طراحی کامپوننت‌های فرانت‌اند (مثل Props در ری‌اکت و نکست) هستید؛ چون تایپ‌ها برای این کار تمیزترن، جلوی ادغام‌های ناخواسته رو می‌گیرن و کار با قابلیت‌های کامپوننت رو راحت‌تر می‌کنن.
•نیاز به تعریف Union Types دارید (مثلاً وضعیت‌های یک دکمه یا کامپوننت: 'primary' | 'secondary' | 'danger').
•می‌خواید رفتارهای پیچیده‌ای مثل کدهای داینامیک، تایپ‌های شرطی (Conditional Types) یا الیاس‌های ساده برای کدهای پایه (Primitives) بسازید.
از Interface استفاده کنید اگر:
•ساختار داده‌های دیتابیس، مدل‌ها یا API (مثل خروجی‌های Prisma یا آبجکت‌های سمت بک‌آند) رو تعریف می‌کنید که فرمت کاملاً شیء‌گرا دارن.
•در حال نوشتن یک کتابخانه (Library) یا بسته نرم‌افزاری هستید و می‌خواید دیگران بتونن با قابلیت Declaration Merging، ویژگی‌های جدیدی به متغیرهای شما اضافه کنن و اون رو گسترش بدن.
چطور خطای Unknown at rule را در VS Code برطرف کنیم؟ نوشته شده توسط Haleh Nakisa

چطور خطای Unknown at rule را در VS Code برطرف کنیم؟

اگر تو پروژه‌هاتون از فریم‌ورک‌های مدرن CSS مثل Tailwind CSS استفاده می‌کنید، احتمالاً این هشدار رو دیدید: وقتی میخواید از دایرکتیوهایی مثل @apply، @theme یا @tailwind، استفاده کنید ویرایشگر VS Code زیر اونهاخط زرد یا قرمز می‌کشه و خطای Unknown at rule css(unknownAtRules) رو نمایش میده.
این اتفاق به این دلیل میفته که لینتر (Linter) پیش‌فرض VS Code، دایرکتیوهای اختصاصی فریم‌ورک‌ها رو به عنوان کدهای استاندارد CSS نمی‌شناسه. اگرچه این هشدار هیچ اختلالی تو کامپایل و اجرای پروژه ایجاد نمی‌کنه، اما در فایل‌های استایل، ظاهر کدها رو آشفته می‌کنه و تمرکز توسعه‌دهنده رو به هم می‌زنه.
در این آموزش کوتاه، یاد می‌گیریم چطوری تو کمتر از یک دقیقه این مشکل رو برای همیشه تو ادیتورمون برطرف کنیم.
اگر از فایل‌های استاندارد .css استفاده می‌کنید
برای غیرفعال کردن این هشدار و نادیده گرفتن دایرکتیوهای ناشناخته توسط VS Code، این مرحله‌ها رو دنبال کنید:
۱. کلیدهای ترکیبی Ctrl + Shift + P (در مک Cmd + Shift + P) رو فشار بدید تا منوی دستوراهای (Command Palette) باز شه.
۲. عبارت settings.json رو تایپ کنید. بین گزینه‌های پیشنهادی، معمولاً سه فایل زیر رو می‌بینید:
Open User Settings (JSON)
Open Default Settings (JSON)
Open Workspace Settings (JSON)
۳. گزینه اول(ممکنه برای شما گزینه اول نباشه)، Open User Settings (JSON) رو انتخاب کنید تا فایل تنظیمات کاربریتون باز شه.
۴. خط کد زیر رو به انتهای این فایل (قبل از بستن آکاردئون اصلی {}) اضافه کنید:

"css.lint.unknownAtRules": "ignore"
۵. فایل رو با کلیدهای Ctrl + S (در مک Cmd + S) ذخیره کنید. بلافاصله بعد از ذخیره، همه هشدارهای مربوط به این بخش ناپدید میشن.
اگر از فایل‌های .scss استفاده می‌کنید
اگر تو پروژهاتون در کنار فریم‌ورک‌هایی مثل تیلوند، از پیش‌پردازنده‌ی ساس (Sass) استفاده می‌کنید و پسوند فایل‌های استایل شما .scss هستش، باید تنظیمات مربوط به این فرمت رو تغییر بدید. به جای کد قبل، کافیه کد زیر رو به همون فایل settings.json اضافه کنید:
"scss.lint.unknownAtRules": "ignore"
نکته: اگر تو پروژه‌های مختلفتون هم از CSS معمولی و هم از SCSS استفاده می‌کنید، می‌تونید هر دو خط کد رو در فایل تنظیمات قرار بدید تا این خطا تو هیچ‌کدوم از فایل‌ها تکرار نشه.

جمع‌بندی
گاهی اوقات هشدارهای پیش‌فرضِ ابزارهای توسعه، برای کدهای مدرن بهینه‌سازی نشدن و باعث شلوغی محیط کدنویسی می‌شن. با انجام این تغییر ساده، ادیتورتون رو جوری شخصی‌سازی کردید که تنها خطاهای واقعی و ساختاری کد رو به شما نشون میده.
شما برای حل این مشکل از چه روشی استفاده می‌کردید؟