️ CodeNight | آموزش برنامه نویسی
875 subscribers
8 photos
1 file
69 links
🚀 کدنایت | آموزش برنامه‌نویسی از صفر تا صد
گولنگ، جاوااسکریپت، نودجی اس، وب، اپلیکیشن و الگوریتم
🧑🏻‍💻 آموزش پروژه‌محور و رایگان
🤖آموزش هوش مصنوعی و vibe coding و Ai engineering

💻 مناسب مبتدی تا پیشرفته
🌐 codenight.ir
Download Telegram
دوستان سلام حالتون چطوره ❤️

از ورژن جدید سایت کدنایت راضی هستید 😁

هر مورد پیشنهادی یا انتقادی هم بود حتما برام ارسال کنید

با چند مدرس جدید و کار درست صحبت شده ببینیم همکاری رو با مجموعه قبول میکنن که وبسایت کدنایت رو رنگین تر کنیم

خلاصه ممنون بابت پیشنهاداتون که باعث شدید کدنایت به این نقطه برسه ❤️🙏
❤15
اخبار داغ این هفته‌ی دنیای کد و AI 🚀
سه تا خبر مهمی که این چند روز اومدن رو براتون جمع کردم:

🔹 شرکت OpenAI مدل GPT-6 Astra رو معرفی کرد (۴ سپتامبر). این مدل جدید ادعای رکورد در استدلال، کدنویسی، ریاضی و حتی امنیت سایبری رو داره و به‌صورت مرحله‌ای در اختیار سازمان‌های محدود قرار می‌گیره. برای برنامه‌نویس‌ها یعنی دستیارهای کدنویسی احتمالاً یک پله دیگه قوی‌تر می‌شن، هم در حل باگ‌های پیچیده هم در ریویو امنیتی کد.

🔹 برنامه ی VS Code با نسخه‌ی 1.136 منتشر شد (۲ سپتامبر) با قابلیت پیش‌نمایش «Agent Merge» — یعنی ایجنت‌ها می‌تونن خودشون فیدبک روی PR یا کانفلیکت‌های مرج رو حل کنن، بدون دخالت مستقیم شما. پشتیبانی از ایجنت در ورک‌اسپیس‌های چندریشه‌ای هم اضافه شده. اگه با ایجنت‌های کدنویسی کار می‌کنید حتماً امتحانش کنید.

🔹 پایتون 3.15.0 وارد مرحله‌ی RC2 شد (۱ سپتامبر)، آخرین کاندید انتشار قبل از نسخه‌ی پایدار در اکتبر ۲۰۲۶. اگه پروژه‌ای دارید که با نسخه‌های جدید پایتون سر و کار داره، الان بهترین زمانه برای تست سازگاری کدتون.


کانال آموزشی کدنایت | آموزش برنامه نویسی

🆔 @codenight_ir
❤2👍1
ری‌اکت کامپایلر:
پایان دوران useMemo و useCallback دستی

اگه تا حالا با ری‌اکت کار کردی، حتماً درگیر بهینه‌سازی رندرهای اضافه با useMemo، useCallback و React.memo شدی. این کار هم وقت‌گیره هم جای خطا داره؛ یه دیپندنسی رو جا بندازی، کل بهینه‌سازی بی‌اثر می‌شه.

دقیقا React Compiler همین مشکل رو حل می‌کنه. این کامپایلر در زمان build، کد کامپوننت‌ها و هوک‌های شما رو آنالیز می‌کنه و به‌صورت خودکار memoization لازم رو اضافه می‌کنه؛ بدون اینکه شما دستی چیزی بنویسید. تیم ری‌اکت این پروژه رو مدت‌ها به‌صورت تجربی روی خود facebook.com تست کرد و حالا با انتشار نسخه پایدار ۱.۰، برای پروژه‌های production آماده‌ست.

نکته مهم: کامپایلر فقط زمانی درست کار می‌کنه که کد شما از Rules of React پیروی کنه (مثلاً موقع رندر، state یا props رو mutate نکنید). برای همین eslint-plugin-react-hooks هم قوانین مخصوص کامپایلر رو داره تا قبل از build مشکلات رو نشونتون بده.

نصبش در Next.js خیلی ساده‌ست:
// next.config.js
module.exports = {
reactCompiler: true,
}


برای پروژه‌های Vite یا هر ابزار دیگه‌ای هم کافیه پکیج زیر رو نصب کنید و به کانفیگ Babel اضافه کنید:
npm install babel-plugin-react-compiler


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

#برنامه_نویسی #ری‌اکت #فرانت_اند #React #WebDev


کانال آموزشی کدنایت | آموزش برنامه نویسی

🆔 @codenight_ir
❤6
الگوی Dependency Injection در NestJS؛

معماری تمیز و قابل تست
NestJS از همون ابتدا حول محور Dependency Injection طراحی شده (الهام‌گرفته از معماری Angular). به‌جای اینکه توی هر کلاس دستی یه سرویس رو new کنی، فقط اعلام می‌کنی به چی نیاز داری، و NestJS خودش نمونهٔ مناسب رو در زمان اجرا بهت تزریق می‌کنه.
قلب ماجرا دو چیز هست:

دکوریتور @Injectable() که یه کلاس رو به‌عنوان provider معرفی می‌کنه، و تزریق از طریق constructor. این کار باعث میشه سرویس‌ها از هم decoupled بمونن و وابستگی‌ها به‌جای پنهون شدن توی کد، توی امضای کلاس واضح و قابل مشاهده باشن.

نکته‌ای که خیلیا بلد نیستن، custom provider‌ها هستن. با useValue، useClass یا useFactory می‌تونی یه توکن سفارشی تعریف کنی و بسته به شرایط (مثلاً محیط dev یا prod) پیاده‌سازی متفاوتی بهش وصل کنی، بدون اینکه کد مصرف‌کننده تغییری کنه.

فایده بزرگ دیگه‌اش تست‌پذیری‌ـه. توی تست‌ها با overrideProvider می‌تونی یه سرویس واقعی (مثلاً اتصال به دیتابیس) رو با یه mock جایگزین کنی، دقیقاً مثل الگوی مشابهش توی فریمورک‌های دیگه.

@Injectable()
export class UsersService {
findOne(id: number) {
return { id, name: 'Ali' };
}
}

@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}

@Get(':id')
findOne(@Param('id') id: number) {
return this.usersService.findOne(id);
}
}


توی NestJS v12 (منتشرشده اوت ۲۰۲۶)، همین معماری DI حالا با پکیج‌های ESM-ready و پشتیبانی رسمی از Standard Schema برای validation ترکیب شده و پایه‌ی بخش جدید observability هم همینه.

#برنامه_نویسی #جاوااسکریپت #NestJS #بک_اند #تایپ_اسکریپت


کانال آموزشی کدنایت | آموزش برنامه نویسی

🆔 @codenight_ir
❤3
الگوی طراحی Strategy: وقتی if/else شما را له می‌کند 🎯

وقتی توی کدت به تابعی می‌رسی که پر از if/else یا switch-case هست و هر بار رفتار متفاوتی اجرا می‌کنه (مثلاً روش‌های مختلف پرداخت، الگوریتم‌های مختلف مرتب‌سازی، یا استراتژی‌های مختلف تخفیف)،

احتمالاً وقتشه سراغ الگوی Strategy بری.
ایده اصلی ساده است:
به‌جای اینکه منطق تصمیم‌گیری رو توی یک کلاس یا تابع بزرگ قایم کنی، هر رفتار رو توی یک کلاس جدا (یک «استراتژی») پیاده‌سازی می‌کنی که همه از یک قرارداد مشترک (interface) پیروی می‌کنن. کلاس اصلی فقط یکی از این استراتژی‌ها رو نگه می‌داره و در زمان اجرا صداش می‌زنه، بدون اینکه بدونه دقیقاً چه الگوریتمی پشتش هست.
فایده‌اش کجاست؟ اضافه کردن یک روش پرداخت جدید یا یک الگوریتم تخفیف جدید یعنی فقط یک کلاس جدید بنویسی، بدون دست‌زدن به کد قبلی. این دقیقاً همون اصل Open/Closed از SOLID هست:

باز برای توسعه، بسته برای تغییر.
یک مثال ساده با تخفیف:

interface DiscountStrategy {
apply(price: number): number;
}

class NoDiscount implements DiscountStrategy {
apply(price: number) { return price; }
}

class PercentageDiscount implements DiscountStrategy {
constructor(private percent: number) {}
apply(price: number) {
return price * (1 - this.percent / 100);
}
}

class Cart {
constructor(private strategy: DiscountStrategy) {}
checkout(price: number) {
return this.strategy.apply(price);
}
}

const cart = new Cart(new PercentageDiscount(20));
console.log(cart.checkout(100)); // 80

یک نکته: Strategy رو با Factory اشتباه نگیر؛ Factory برای ساختن آبجکت‌هاست، ولی Strategy برای انتخاب رفتار (الگوریتم) در زمان اجراست. خیلی وقت‌ها هم این دو کنار هم استفاده می‌شن.


#برنامه_نویسی #DesignPatterns
#طراحی_نرم‌افزار #TypeScript #Clean_Code

کانال آموزشی کدنایت | آموزش برنامه نویسی

🆔 https://t.me/codenight_ir
👍5❤2
مجموعه ای از آموزش های روزانه جاوااسکریپت و گولنگ رو اماده کردم که هر روز یک قسمتی از اونا رو توی کانال میذارم

از مبتدی تا پیشرفته
❤3
#جاوااسکریپت - درس اول

معرفی جاوااسکریپت و کاربردهاش
جاوااسکریپت یکی از پرکاربردترین زبان‌های برنامه‌نویسی دنیاست و اولین قدم مسیر یادگیری ماست. تقریباً هر سایتی که باز می‌کنی یه‌جوری داره ازش استفاده می‌کنه.
• تو مرورگر اجرا میشه و صفحات وب رو تعاملی می‌کنه (کلیک، فرم، انیمیشن) • با Node.js همین زبان رو سمت سرور هم میشه استفاده کرد • زبانی داینامیک و تفسیریه، یعنی نیازی به کامپایل جداگانه نداره • استاندارد رسمیش ECMAScript هست و هر سال آپدیت میشه • فریم‌ورک‌های معروفی مثل React، Vue و Express روش ساخته شدن
// اولین خط کد جاوااسکریپت
console.log("سلام، دنیای جاوااسکریپت!");

همین یک خط رو می‌تونی تو کنسول مرورگر (با زدن F12) امتحان کنی. فردا میریم سراغ متغیرها و انواع داده‌ایی که پایه هر برنامه‌ایه.

کانال آموزشی کدنایت | آموزش برنامه‌نویسی

https://t.me/codenight_ir
❤5
#گولنگ - درس اول

معرفی زبان Go و کاربردهاش
امروز اولین قدم رو تو مسیر یادگیری Go (گولنگ) برمی‌داریم؛ زبانی که گوگل برای سادگی، سرعت و کارایی بالا طراحی کرده.
• زبان Go یه زبان کامپایلی و به‌شدت سریعه، نزدیک به سرعت زبان‌های سطح پایین • برای ساخت بک‌اند، ابزارهای CLI و زیرساخت (مثل Docker و Kubernetes) خیلی محبوبه • سینتکس ساده و خواناست، برای همین یادگیریش برای مبتدی‌ها راحته • برنامه‌های Go به یه فایل اجرایی مستقل کامپایل میشن، بدون نیاز به نصب چیز اضافه رو سیستم مقصد • همزمانی (Concurrency) یکی از نقاط قوت اصلی Go هست که جلوتر باهاش آشنا می‌شیم
package main

import "fmt"

func main() {
fmt.Println("Hello, Codenight!") // اولین خروجی ما
}

این ساده‌ترین برنامه ممکن تو Go هست: هر برنامه با package main و تابع main شروع میشه. فردا با ساختار کلی یه برنامه Go بیشتر آشنا می‌شیم.

کانال آموزشی کدنایت | آموزش برنامه‌نویسی

https://t.me/codenight_ir
❤5
معماری رویداد-محور؛ وقتی سرویس‌ها به‌جای «دستور دادن» به هم «خبر می
‌دن»
در معماری‌های سنتی، سرویس‌ها مستقیم با هم صحبت می‌کنن:
سرویس سفارش، سرویس انبار رو صدا می‌زنه، انبار هم سرویس ارسال رو... یعنی وابستگی زنجیره‌ای؛ اگه یکی از حلقه‌ها کند یا خراب بشه، کل زنجیره می‌لنگه.

در Event-Driven Architecture (EDA) این رابطه عوض می‌شه. سرویس‌ها به‌جای صدا زدن مستقیم هم، فقط «رویداد» (event) منتشر می‌کنن؛ مثلاً وقتی سفارشی ثبت می‌شه، سرویس سفارش یه رویداد OrderPlaced رو روی یه message broker (مثل Kafka یا NATS) پابلیش می‌کنه. هر سرویسی که به این خبر نیاز داره (انبار، پرداخت، اعلان) بهش subscribe می‌کنه و مستقل از بقیه واکنش نشون می‌ده.

مزیت اصلی‌اش decoupling واقعیه:
سرویس سفارش اصلاً نمی‌دونه چند تا سرویس دیگه به رویدادش گوش می‌دن، و می‌شه بدون تغییر کد قدیمی یه consumer جدید (مثلاً آنالیتیکس) اضافه کرد. مقیاس‌پذیری و تحمل خطا هم بهتره، چون اگه یه سرویس مصرف‌کننده موقتاً از کار بیفته، رویدادها توی broker می‌مونن و بعداً پردازش می‌شن.
نمونه ساده‌ش:

// وقتی سفارش ثبت میشه
publish("OrderPlaced", { orderId, userId, items })

// سرویس انبار
subscribe("OrderPlaced", (event) => {
reserveInventory(event.items)
})

// سرویس اعلان
subscribe("OrderPlaced", (event) => {
sendConfirmationEmail(event.userId)
})

نکته مهم: EDA پیچیدگی جدیدی هم میاره؛ دیباگ کردن جریان رویدادها سخت‌تره و باید به idempotency (جلوگیری از پردازش تکراری یه رویداد) و event ordering فکر کنی. برای سیستم‌های ساده شاید لازم نباشه؛ بیشتر برای میکروسرویس‌هایی که نیاز به مقیاس‌پذیری و استقلال بالا دارن مناسبه.

#معماری_نرم_افزار #برنامه_نویسی #میکروسرویس #EventDriven #Kafka

منابع:
• Event-Driven Architecture in 2026: Patterns, Tools, and When to Use It – Encore
• Event-Driven Architecture in 2026: Kafka, NATS, and Building Reactive Microservices | ZeonEdge

کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
#جاوااسکریپت - درس دوم

متغیرها و انواع داده‌ای در جاوااسکریپت
تو درس قبلی با جاوااسکریپت و کاربردهاش آشنا شدیم. حالا وقتشه یاد بگیریم چطور داده‌ها رو تو کد نگه داریم: با متغیرها.
• برای تعریف متغیر از let و const استفاده می‌کنیم؛ var قدیمی‌تره و کمتر توصیه میشه • let مقداری قابل تغییره، ولی const بعد از تعریف دیگه عوض نمیشه • جاوااسکریپت چند نوع داده اولیه (primitive) داره: عدد (number)، رشته (string) و بولین (boolean) • null یعنی «عمداً خالی»، undefined یعنی «هنوز مقداری نگرفته» • برای دیدن نوع یه متغیر از typeof استفاده می‌کنیم
let name = "Erfan"; // یه رشته
const age = 25; // یه عدد ثابت
let isStudent = true;

console.log(typeof name); // "string"
console.log(typeof age); // "number"

نکته: همیشه اول با const شروع کن و فقط وقتی واقعاً نیاز به تغییر مقدار داری، از let استفاده کن. فردا با عملگرها و اولویت اجراشون آشنا می‌شیم.

کانال آموزشی کدنایت | آموزش برنامه‌نویسی

https://t.me/codenight_ir
👍2
مفهوم Agent Skills چیست و چرا مهم است؟

یکی از مفاهیم جدید و کاربردی در دنیای ایجنت‌های هوش مصنوعی، Agent Skills است؛ روشی که آنتروپیک برای مدل‌های Claude معرفی کرده تا ایجنت‌ها بتونن دانش تخصصی و رویه‌ای (procedural knowledge) رو به شکل ماژولار یاد بگیرن، بدون این‌که همیشه توی context window اشغال‌کننده باشه.

هر Skill یه پوشه‌ست که حداقل یک فایل به اسم SKILL.md داره؛ توش یه توضیح کوتاه (metadata) هست که همیشه لود می‌شه، و محتوای کامل دستورالعمل فقط وقتی لود می‌شه که ایجنت واقعاً به اون کار نیاز داره. به این تکنیک می‌گن progressive disclosure یعنی افشای تدریجی اطلاعات، دقیقاً برعکس اینکه همه‌چیز رو یکجا بریزی توی پرامپت.

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

مثلاً یک Skill برای ساخت فایل اکسل می‌تونه شامل یه اسکریپت آماده برای فرمول‌نویسی باشه، یا یک Skill برای ری‌ویو کد می‌تونه یه چک‌لیست استاندارد داشته باشه.
نکته‌ی جالب اینه که Skillها قابل حمل بین محصولات مختلف Claude هستن (مثل کلود اپ، Claude Code، و API)، و می‌تونن ترکیبی (composable) باشن؛ یعنی چند Skill با هم فعال بشن و مکمل کار کنن.

ساختار خیلی ساده‌ی یک Skill معمولاً این شکلیه:

my-skill/
SKILL.md # name + description + دستورالعمل
scripts/
helper.py


اگه با ایجنت‌های AI کار می‌کنی، این الگو رو مقایسه کن با RAG یا fine-tuning:
به جای اینکه دانش رو توی وزن مدل جا بدی یا هر بار سند بازیابی کنی، دانش رویه‌ای رو به شکل فایل و به‌صورت on-demand در اختیار ایجنت می‌گذاری.

#هوش_مصنوعی #AI_Agent #برنامه_نویسی #Claude #تکنولوژی

کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
👍2
🤖 ساخت AI Agentها یک مرحله ساده‌تر شد

شرکت OpenAI در ۱۰ سپتامبر Agents API را به‌صورت Public Beta معرفی کرد؛ API جدیدی که بخش مهمی از زیرساخت Agent را خودش مدیریت می‌کند:
از اجرای Agent Loop و مدیریت Context گرفته تا Sessionهای طولانی، Tool Calling و هماهنگی Subagentها.

نکته جذاب‌تر اینجاست که Agent می‌تواند داخل Sandbox خود OpenAI، زیرساخت خودتان یا Providerهای دیگر اجرا شود.

برای AI Engineerها این یعنی به‌جای ساخت دوباره‌ی بخش بزرگی از Agent Runtime، می‌توان تمرکز را روی Tools، Knowledge Base و Business Logic گذاشت.

کانال آموزشی کدنایت | آموزش برنامه نویسی
https://t.me/codenight_ir
👨🏻‍💻💚 روز برنامه‌نویس مبارک!

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

برایتان یادگیری مداوم، پیشرفت حرفه‌ای و موفقیت‌های بزرگ آرزو داریم! 💻❤️
❤7
🔥 ورژن NestJS 12 منتشر شده؛ فقط یک آپدیت معمولی نیست
ورژن NestJS 12 با چند تغییر مهم آمده:
✅ پکیج‌های ESM-ready ✅ پشتیبانی از Standard Schema برای Validation و Serialization ✅ ابزار CLI بازطراحی‌شده ✅ پکیج های Observability بومی با @nestjs/observe ✅ تست نویسی با Vitest و oxlint به‌عنوان انتخاب‌های جدید برای پروژه‌های تازه

نکته مهم: مهاجرت پروژه فعلی شما به ESM اجباری نیست و CommonJS همچنان پشتیبانی می‌شود.
همچنین برای NestJS 12 حداقل Node.js 20.19+ یا 22.12+ لازم است.

قبل از Upgrade هم می‌توانید اجرا کنید:
nest upgrade --dry-run

تا تغییرات را بدون دستکاری پروژه ببینید.

کانال آموزشی کدنایت | آموزش برنامه نویسی
https://t.me/codenight_ir
❤4
یکی از دردسرهای Production در Go: Goroutine Leak

در Go 1.27 قابلیت جدیدی برای Goroutine Leak Profiling اضافه شده که تشخیص Goroutineهایی را که ایجاد شده‌اند اما دیگر عملاً پیشرفتی ندارند ساده‌تر می‌کند.

در Go 1.27 همچنین Generic Methodها، encoding/json/v2، پکیج UUID و بهبودهایی در Runtime و Memory Allocation آورده است.

چرا مهم است؟

یک سرویس ممکن است ظاهراً درست کار کند، اما به‌مرور تعداد Goroutineها بالا برود و مصرف Memory و Resource افزایش پیدا کند.

برای Backend Developerها، Monitoring تعداد Goroutineها باید بخشی از Observability سرویس باشد.



کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
وقتی سیستم شما به ۷۰ میلیون Request در ثانیه برسد چه اتفاقی می‌افتد؟
شرکت OpenAI جزئیات معماری Habitat، پلتفرم Online Storage خودش را منتشر کرده؛ سیستمی که بیش از 70M درخواست در ثانیه و بیش از 500PB داده را مدیریت می‌کند.

یکی از نکات جالب معماری این سیستم:
شرویس Habitat ابتدا یک Library ساده بود، اما با رشد سیستم به یک Service مستقل تبدیل شد.

در مسیر Scale هم موضوعاتی مثل:
Connection Pool Management Load Balancing Rate Limiting Tail Latency Downstream Protection
اهمیت زیادی پیدا کردند.

حتی OpenAI بازنویسی Python به Rust را حدود یک سال عقب انداخت تا ابتدا Bottleneckهای مهم‌تر را حل کند.

📌 درس مهم معماری:
همیشه اولین راه‌حل پرفورمنس Rewrite نیست.

کانال آموزشی کدنایت | آموزش برنامه نویسی
https://t.me/codenight_ir
👍2
درس دوم - #گولنگ

ساختار یک برنامه Go
تو درس قبلی با زبان Go و کاربردهاش آشنا شدیم. حالا وقتشه اولین قدم عملی رو برداریم و ببینیم یه برنامه ساده Go از چه بخش‌هایی تشکیل شده.
• هر فایل Go با package main شروع میشه که میگه این برنامه قابل اجراست •

با import پکیج‌های موردنیاز رو وارد برنامه می‌کنیم، مثلاً fmt برای چاپ خروجی • تابع func main() نقطه شروع اجرای هر برنامه Go هست • برای نمایش خروجی از fmt.Println() استفاده می‌کنیم • برنامه رو با دستور go run file.go تو ترمینال اجرا می‌کنیم
package main

import "fmt"

func main() {
// این پیام موقع اجرای برنامه چاپ میشه
fmt.Println("سلام از Go!")
}

نکته مهم اینه که Go خیلی به ساختار و نظم اهمیت میده؛ برخلاف خیلی از زبان‌های دیگه نمیشه بخش‌هایی مثل package رو نادیده گرفت. فردا با متغیرها و انواع داده‌ای تو Go آشنا می‌شیم.

کانال آموزشی کدنایت | آموزش برنامه‌نویسی

https://t.me/codenight_ir
❤1🔥1
#جاوااسکریپت - درس سوم

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

• عملگرهای ریاضی: +، -، *، / و %

(باقیمانده تقسیم) برای محاسبات عددی •

• عملگرهای مقایسه‌ای: == و != فقط مقدار رو مقایسه می‌کنن، ولی === و !== مقدار و نوع داده رو هر دو چک می‌کنن

• عملگرهای منطقی: && (و)، || (یا) و ! (نقیض) برای ترکیب شرط ها

•‌ عملگرهای انتسابی مثل += و -= کار نوشتن کد رو کوتاه‌تر می‌کنن

اولویت اجرا مهمه: ضرب و تقسیم قبل از جمع و تفریق انجام میشن، دقیقاً مثل ریاضی مدرسه
let price = 50000;
let discount = 5000;
let finalPrice = price - discount;

console.log(finalPrice); // 45000
console.log(finalPrice === 45000); // true
console.log(price > 10000 && discount > 0); // true

یه اشتباه رایج بین تازه‌کارها استفاده از == به‌جای === هست که می‌تونه نتایج غیرمنتظره بده؛ همیشه سعی کن از === استفاده کنی. فردا سراغ ساختارهای شرطی می‌ریم و می‌بینیم چطور از همین عملگرها برای تصمیم‌گیری تو کد استفاده کنیم.

کانال آموزشی کدنایت | آموزش برنامه‌نویسی

https://t.me/codenight_ir
❤1
یک کامپوننت داخلی React برای انیمیشن‌های نرم، بدون هیچ کتابخانه‌ی اضافه

اگر تا حالا برای انیمیت کردن ورود و خروج کامپوننت‌ها سراغ framer-motion یا کدنویسی دستی با CSS transition رفته‌اید، خبر خوب اینه که دیگه لازم نیست.

در React نسخه‌ی ۱۹.۳ (منتشرشده ۹ سپتامبر ۲۰۲۶) کامپوننت ViewTransition رو به‌صورت رسمی و پایدار عرضه کرده؛ یعنی بعد از یک دوره‌ی طولانی experimental بودن، حالا می‌شه توی پروژه‌ی پروداکشن ازش استفاده کرد.
این کامپوننت روی View Transitions API خود مرورگر سوار شده و خودش تشخیص می‌ده که تغییر درخت کامپوننت‌ها چه نوعیه:
اضافه‌شدن (enter)، حذف‌شدن (exit)، تغییر محتوا یا استایل (update)، یا جابه‌جایی یک المان بین دو مکان مختلف (share).

رفتار پیش‌فرضش یک کراس‌فید نرمه، ولی کاملاً قابل شخصی‌سازی با CSS View Transition Classes یا Web Animations API هست.

نکته‌ی جالب‌تر، تابع addTransitionType هست که می‌ذاره انیمیشن رو بر اساس علت تغییر state مشخص کنید؛ مثلاً برای اسلایدر بگید حرکت به جلو از راست بیاد و حرکت به عقب از چپ.

import { ViewTransition, startTransition, addTransitionType } from 'react';

function nextSlide() {
startTransition(() => {
addTransitionType('next');
setCurrentSlide(c => c + 1);
});
}

<ViewTransition
enter={{ next: 'from-right', previous: 'from-left' }}
exit={{ next: 'to-left', previous: 'to-right' }}
>
<Page />
</ViewTransition>


این کامپوننت با startTransition، Suspense و useDeferredValue هم به‌خوبی کار می‌کنه، یعنی می‌تونید حتی fallback یک Suspense رو هم به محتوای نهایی به‌شکل نرم انیمیت کنید.

#React #فرانت_اند #برنامه_نویسی #جاوااسکریپت #وب

Sources:
• React 19.3

کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
❤5
یکی از قابلیت‌هایی که Go Developerها مدت‌ها منتظرش بودند: Generic Methods

در Go 1.27 امکان تعریف Methodهایی با Type Parameterهای خودشان را اضافه کرده است؛ یعنی Genericها دیگر فقط محدود به Type و Function نیستند.

این قابلیت مخصوصاً هنگام طراحی Library و APIهای reusable می‌تواند کدهای تمیزتری ایجاد کند.

اما یک هشدار مهم:
در گو Generic بودن لزوماً به معنی معماری بهتر نیست.
اگر Type Parameter فقط باعث پیچیده‌تر شدن API شود و مزیت واقعی Type Safety یا Reusability نداشته باشد، Interface یا حتی Function ساده ممکن است انتخاب بهتری باشد.

📌 قانون خوب:
اول ساده‌ترین API ممکن را طراحی کن؛ Generic را وقتی اضافه کن که واقعاً duplication یا type-safety problem را حل می‌کند.

منبع رسمی: Go Blog
#گولنگ #گو #go
کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
هر چیزی را نباید داخل Context Window نگه داریم

یکی از اشتباهات رایج در ساخت AI Agent این است که تمام تاریخچه گفتگو، نتایج Toolها و اطلاعات قبلی را دائماً داخل Context مدل قرار دهیم.

با طولانی‌شدن Session، سه مشکل ایجاد می‌شود:

Token Cost ↑
Latency ↑
Noise ↑

معماری بهتر، حافظه Agent را به چند لایه تقسیم می‌کند:

Working Memory → Short-term Context

Conversation Summary → Compressed Memory

Long-term Memory → Database / Vector DB

Business Data → Source of Truth

نکته مهم این است که Vector Database هم نباید به «محل ذخیره همه‌چیز» تبدیل شود. اطلاعات ساختاریافته مثل سفارش، پروفایل یا وضعیت پروژه بهتر است همچنان از Database اصلی خوانده شوند.

📌 خود Context Window حافظه دائمی Agent نیست؛ یک Working Memory محدود و گران‌قیمت است.

کانال آموزشی کدنایت | آموزش برنامه نویسی

https://t.me/codenight_ir
👍2👎1