کلوژر در جاوااسکریپت: توابع چطور به خاطر میسپارند
کلوژر واقعاً چیست، چطور یک تابع جاوااسکریپت بعد از تمام شدن تابع بیرونی متغیرهایش را نگه میدارد و کلوژرها چه الگوها و باگهایی میسازند.
آرشیو
همهٔ آموزشهایی که منتشر کردهایم، از جدیدترین. بر اساس موضوع یا سطح فیلتر کنید تا دقیقاً همان چیزی را که لازم دارید پیدا کنید.
کلوژر واقعاً چیست، چطور یک تابع جاوااسکریپت بعد از تمام شدن تابع بیرونی متغیرهایش را نگه میدارد و کلوژرها چه الگوها و باگهایی میسازند.
اینکه yield چطور یک تابع را به ژنراتور تبدیل میکند، چرا ژنراتورها تقریباً هیچ حافظهای مصرف نمیکنند و چطور با آنها پایپلاین داده بسازیم.
پوشهٔ .git را باز کنید و گیت را همانطور که هست ببینید: یک انبار اشیاء که هر شیء با هشِ محتوایش نامگذاری شده، بهعلاوهٔ چند اشارهگرِ جابهجاشدنی. یک کامیت را با دست بسازید و بالاخره rebase، reset و reflog را بفهمید.
وقتی یک دستور را اجرا میکنید واقعاً چه اتفاقی میافتد: fork و exec، کدهای خروج و wait، اینکه سیگنالها چطور برنامهها را متوقف میکنند (و چطور مؤدبانه خاموش شویم)، زامبیها از کجا میآیند و چرا PID 1 در کانتینر Ctrl+C شما را نادیده میگیرد.
بیشتر اسکریپتهای شل خوب کار میکنند تا وقتی که نام یک فایل فاصله داشته باشد یا دستوری وسط کار شکست بخورد. حالت سختگیرانه، کوتیشنگذاری، فایلهای موقت امن و trap برای پاکسازی را یاد بگیرید و همه را در یک اسکریپت پشتیبانگیری واقعی کنار هم بگذارید.
با git rebase -i یک ردِ شلوغ از کامیتهای نیمهکاره را به تاریخچهای تمیز و قابل بازبینی تبدیل کنید. کامیتها را ادغام، بازنویسی، جابهجا، تقسیم و حذف کنید و بگذارید کامیتهای fixup مرتبسازی را برایتان انجام دهند.
property، متدهای bound، cached_property و __slots__ همه روی یک پروتکل کوچک کار میکنند. یاد بگیرید دیسکریپتورها چطور کار میکنند، ترتیب دقیق جستوجوی attributeها چیست و چطور دیسکریپتور خودتان را بنویسید.
چرا یک پرامیسِ resolveشده همیشه زودتر از setTimeout(fn, 0) اجرا میشود؟ دقیقاً ببینید حلقهٔ رویداد تسکها، میکروتسکها و رندر صفحه را چطور زمانبندی میکند و چطور کارهای طولانی را طوری اجرا کنید که صفحه قفل نشود.
جستوجوی دودویی را راحت میشود توضیح داد و بهطرز عجیبی راحت میشود اشتباه نوشت. یک «ناوردا» یاد بگیرید که آن را هر بار درست از آب درمیآورد، اولین و آخرین موقعیت را پیدا کنید و جستوجوی دودویی را بهجای آرایه روی جوابها اجرا کنید.
GROUP BY ردیفها را در هم فشرده میکند؛ توابع پنجرهای روی چند ردیف محاسبه میکنند و همهٔ آنها را نگه میدارند. OVER، PARTITION BY، ROW_NUMBER، RANK، LAG و قابهای پنجره را با مثالهای کوچک و قابل اجرا یاد بگیرید.
یاد بگیرید ایندکسهای B-tree واقعاً چطور کار میکنند، پلن کوئری را با EXPLAIN بخوانید، ترتیب درست ستونها را در ایندکسهای ترکیبی انتخاب کنید و اشتباههایی را بشناسید که بیصدا یک ایندکس را از کار میاندازند.
الگوریتم کوتاهترین مسیرِ دایکسترا را در پایتون با heapq پیاده کنید، قدمبهقدم دنبالش کنید، بفهمید چرا درست است و دقیقاً یاد بگیرید کِی خراب میشود: یالهای منفی، تساوی در هیپ و گرافهای چگال.
وقتی دو قاعدهٔ CSS با هم مخالفاند، مرورگر برای انتخاب برنده از مجموعهای از قواعدِ دقیق پیروی میکند. یاد بگیرید آبشار چطور تصمیم میگیرد، specificity را با دست حساب کنید و دیگر سراغ !important نروید.
ویژگی z-index یک رتبهبندیِ سراسری نیست. فقط عنصرهای داخل یک stacking context را با هم مقایسه میکند، و دهها ویژگی بیصدا context تازه میسازند. ترتیب رسم را یاد بگیرید، contextی را که عنصرتان در آن گیر افتاده پیدا کنید و باگهای همپوشانی را برای همیشه حل کنید.
یاد بگیرید لیست کامپرهنشن چطور کار میکند، کِی کدتان را خواناتر میکند و کِی همان حلقهٔ for ساده انتخاب بهتری است.
راهنمایی کاربردی دربارهٔ پرامیسها و async/await: چطور کار میکنند، خطاها را چطور مدیریت کنیم و کارها را چطور موازی اجرا کنیم تا برنامه کند نشود.
دیگر همهچیز را روی main کامیت نکنید. یک روش کاری ساده و تیمی با برنچهای فیچر، پول ریکوئست و ادغامِ تمیز یاد بگیرید.
پیچیدگی زمانی را بدون ترس از ریاضیات بفهمید. توابع واقعی پایتون را تحلیل میکنیم و میبینیم چرا کدِ O(n²) در مقیاس بزرگ از پا درمیآید.
Flexbox و Grid هر دو عناصر را چیدمان میکنند، اما متفاوت فکر میکنند. قانون یکبعدی در برابر دوبعدی را یاد بگیرید و با هر کدام چیدمانهای واقعی بسازید.
JOINهای INNER، LEFT، RIGHT و FULL با دو جدول کوچک. دقیقاً ببینید هر نوع JOIN کدام ردیفها را برمیگرداند و چرا.
با اطمینان در سیستم لینوکس جابهجا شوید، جستوجو کنید، بررسی کنید و آن را مدیریت کنید. گشتی کاربردی در دستورهایی که برنامهنویسان هر روز از آنها استفاده میکنند.
دکوریتورها جادویی به نظر میرسند، اما فقط توابعی هستند که توابع دیگر را میپوشانند. دکوریتورهای زمانسنجی و تلاش مجدد را از صفر بسازید.
هنوز مقالهای با این فیلترها وجود ندارد. ترکیب دیگری را امتحان کنید.