ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

رقصنده با کد (و غیره)

رقصنده با کد (و غیره)

前往频道在 Telegram

Here are some interesting things I've come across during my learning process. That's it. Admin ID: @alithecodeguy

显示更多
727
订阅者
无数据24 小时
-57 天
无数据30 天
帖子存档
فرض کنید یه پلی‌لیست توی یوتیوب هست ، نمیدونید مجموعا زمانش چه قدر میشه. از طریق سایت زیر می‌تونید این زمان رو پیدا کنید https://ytplaylist-len.sharats.dev/ #youtube

با هشتگ #interview می‌تونید به تمام سولات مصاحبه‌ای که توی این چند سال بهشون برخوردم ، دسترسی داشته باشید.

تفاوت unknown و any در TypeScript -------------- 💡 any • وقتی از any استفاده می‌کنی، TypeScript همه‌ی چک‌های تایپ را غیرفعال می‌کند. • هر کاری می‌تونی با اون مقدار انجام بدی بدون خطا:

let x: any = "Hello";

x.toUpperCase(); // ✅ بدون خطا
x.push(123);      // ✅ حتی اگه string باشه
• مشکل: Type safety از بین می‌ره. عملاً مثل جاوااسکریپت عادی می‌شه. -------------- 💡 unknown • شبیه any هست از نظر اینکه می‌تونی هر مقداری بهش اختصاص بدی. • اما برعکس any، نمی‌تونی مستقیماً باهاش عملیات انجام بدی مگر اینکه اول تایپش رو چک کنی (type narrowing).

let y: unknown = "Hello";

y.toUpperCase(); // ❌ خطا
• باید قبلش بررسی کنی:

if (typeof y === "string") {
  console.log(y.toUpperCase()); // ✅ حالا مجازه
}
#ts #interview

تفاوت بین Promise.all و Promise.allSettled در جاوااسکریپت -------- 💡Promise.all • همه‌ی پرامیس‌ها رو به صورت موازی اجرا می‌کنه. • اگر حتی یکی از پرامیس‌ها reject بشه، کل Promise.all رد (reject) می‌شه. • مقدار خروجی: آرایه‌ای از نتایج resolve شده (اگه همه موفق باشن).

const p1 = Promise.resolve(10);
const p2 = Promise.reject("Error");
const p3 = Promise.resolve(30);

Promise.all([p1, p2, p3])
  .then(result => console.log(result))
  .catch(error => console.log("Rejected:", error));
// خروجی: Rejected: Error
• فقط اولین خطا رو برمی‌گردونه، بقیه رو نادیده می‌گیره. -------- 💡Promise.allSettled • همه‌ی پرامیس‌ها رو به صورت موازی اجرا می‌کنه. • منتظر می‌مونه تا همه settle بشن (چه resolve چه reject). • هیچ‌وقت reject نمی‌شه. همیشه resolve می‌شه با آرایه‌ای از نتایج. • هر نتیجه یک آبجکت با این شکل: { status: "fulfilled", value: ... } یا { status: "rejected", reason: ... }

const p1 = Promise.resolve(10);
const p2 = Promise.reject("Error");
const p3 = Promise.resolve(30);

Promise.allSettled([p1, p2, p3])
  .then(results => console.log(results));
/*
[
  { status: "fulfilled", value: 10 },
  { status: "rejected", reason: "Error" },
  { status: "fulfilled", value: 30 }
]
*/
هیچ خطایی throw نمی‌کنه، چون همه رو گزارش می‌ده. #js #interview

تفاوت git rebase و git merge در Git اساسی است، چون هر دو برای ترکیب تغییرات استفاده می‌شوند ولی نحوه‌ی ادغام و تاریخچه کاملاً فرق دارد. -------------------------- 💡 git merge • چه می‌کند؟ تغییرات دو شاخه را با هم ادغام می‌کند و یک کامیت جدید (merge commit) ایجاد می‌کند. • تاریخچه حفظ می‌شود به صورت شاخه‌ای (branching history). • مزیت: سابقه واقعی و ترتیب زمانی کامیت‌ها حفظ می‌شود. • عیب: تاریخچه ممکن است شلوغ شود (کامیت‌های Merge زیاد).

git checkout main
git merge feature
نتیجه: A---B---C (main) \ D---E (feature) \ M (merge commit) -------------------------- 💡git rebase • چه می‌کند؟ کل کامیت‌های شاخه‌ی فعلی را بر اساس شاخه‌ی هدف بازنویسی می‌کند (history rewrite). • کامیت‌ها را جوری قرار می‌دهد که انگار از همان ابتدا بر اساس آخرین کامیت شاخه‌ی هدف ساخته شده‌اند. • مزیت: تاریخچه خطی (linear history) و تمیز. • عیب: بازنویسی تاریخچه خطرناک است (نباید در شاخه‌های اشتراکی استفاده شود).

git checkout feature
git rebase main
نتیجه: A---B---C---D'---E' (feature) #interview #git

ویژگی satisfied در TypeScript از نسخه 4.9 معرفی شده و برای بررسی نوع در زمان کامپایل بدون تغییر نوع اصلی متغیر استفاده می‌شود. کاربرد اصلی satisfies به شما اجازه می‌دهد مطمئن شوید که یک مقدار با یک تایپ خاص سازگار است. اما برخلاف as، نوع مقدار را تغییر نمی‌دهد، فقط بررسی می‌کند. در نتیجه: • اگر اشتباه تایپی باشد، خطا می‌دهد. • اگر درست باشد، نوع اصلی مقدار حفظ می‌شود. مثال ساده

type Person = {
  name: string;
  age: number;
};

const user = {
  name: "Ali",
  age: 30,
  extra: true
} satisfies Person;
اینجا user باید تمام الزامات Person را برآورده کند. اما همچنان نوع user برابر با { name: string; age: number; extra: boolean } می‌ماند. اگر name را حذف کنیم، خطا می‌دهد:

const user = {
  age: 30
} satisfies Person; // ❌ خطا: name وجود ندارد
تفاوت با as

const user = {
  name: "Ali",
  age: 30
} as Person;
اینجا TypeScript فقط نوع را Cast می‌کند، حتی اگر چیزی کم باشد، ممکن است بدون خطا عبور کند (در حالت غیر strict). ولی satisfies اجازه نمی‌دهد چیزی که ناقص است قبول شود. مثال کاربردی‌تر با enum یا union

type Theme = "light" | "dark";

const config = {
  theme: "light"
} satisfies { theme: Theme };

// اگر بنویسی:
const config2 = {
  theme: "blue"
} satisfies { theme: Theme }; // ❌ خطا
#ts #interview

تفاوت revert و reset در git git revert یک کامیت جدید ایجاد می‌کند که تغییرات کامیت مشخص‌شده را برعکس (undo) می‌کند

git revert abc123
git reset شاخه (branch) را به یک نقطه قبلی در تاریخچه برمی‌گرداند. این یعنی تاریخچه بازنویسی می‌شود.

git reset --hard abc123
#git #interview

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

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

خوب بود #js #javascript
خوب بود #js #javascript

آخرین سری که ارواح شیطانی تسخیرتون کرده کی بوده؟ 😁
آخرین سری که ارواح شیطانی تسخیرتون کرده کی بوده؟ 😁

دو تا نسخه از چت جی‌پی‌تی رو دارم. یکی پولی و یکی رایگان. نسخه رایگان به مراتب قوی‌تر از پولیه عمل میکنه. احتمالا به خاطر اینکه داره از ورژ‌ن‌های قبل ۵ استفاده می‌کنه.

دو تا نقطه‌ای که گذاشته شده خطای تایپی نیست. توی جاوااسکریپت وقتی میخواید از متدی روی یک عدد به صورت مستقیم استفاده کنید باید
دو تا نقطه‌ای که گذاشته شده خطای تایپی نیست. توی جاوااسکریپت وقتی میخواید از متدی روی یک عدد به صورت مستقیم استفاده کنید باید از ۲ نقطه استفاده کنید تا به انجین جاوااسکریپت بگید که نقطه اول یعنی اینکه عددمون قسمت اعشاری نداره و نقطه دوم برای کال کردن متد استفاده میشه. در غیر اینصورت خطا میده از روش دوم هم میتونید استفاده کنید.

۱۵۰ تست A+ پیشنهاد میکنم نگاه کنید ببینید چه قدرش رو بلدید. حقیقتا خودم هر چی بیشتر میخونم بیشتر برگام میریزه که چه قدر بلد نیستم.

یه چیزی. اگر گاهی نکته‌ی پیشرفته‌ای از جاوااسکریپت داخل کانال میذارم و بلد نیستید ، روی انگیزه‌ یا تلاشتون در یادگیری اثر منفی نذاره. خیلی از نفرات این‌ها رو بلد نیستن و خیلی جاها هم آموزش نمیدن. چرا که خیلیاش واقعا توی استفاده روزمره نیستش. من صرفا چون تلاش دارم جاوااسکریپت رو با تمام جزییاتش بلد بشم میرم سراغ این نکات و گرنه می‌تونید ۲۰ سال فرانت‌اند یا بک‌اند باشید و چیزی مثل weakRef یک بار هم نیازتون نشه.

در جاوااسکریپت Iterable و Enumerable دو مفهوم متفاوت هستن، هرچند که معناشون کمی شبیه همدیگست. 💡 کلمه Enumerable یعنی قابل شمارش بودن propertyها - فقط مربوط به کلیدهای یک آبجکته. - یعنی این‌که آیا وقتی داری کلیدهای آبجکت رو با روش‌هایی مثل for...in یا Object.keys() می‌گیری، اون ویژگی (property) دیده میشه یا نه. - اصلاً کاری به مقدارش یا پیمایش المنت‌ها نداره، فقط دیده شدن property در شمارش‌هاست. - کنترلش با descriptor انجام می‌شود

const obj = { a: 1, b: 2 };
Object.defineProperty(obj, 'c', { value: 3, enumerable: false });

console.log(Object.keys(obj)); // ['a', 'b']
💡 کلمه Iterable یعنی پیمایش بودن مقدار - مربوط به اینه که آیا خود شیء می‌تونه با for...of یا ...spread پیمایش بشه یا نه. - این یعنی آبجکت باید پروتکل iterator رو پیاده‌سازی کنه (Symbol.iterator). - این مفهوم بیشتر برای ساختار داده‌های لیستی هست مثل Array, String, Map, Set.

const arr = [10, 20, 30];

for (const item of arr) {   
  console.log(item);        // 10 20 30
}

console.log(...arr); // 10 20 30
مثال ترکیبی

const obj = {
  a: 1,
  b: 2,
  [Symbol.iterator]: function* () {
    yield this.a;
    yield this.b;
  }
};

console.log(Object.keys(obj)); 

for (const value of obj) {    
  console.log(value);       
}
اینجا: - ویژگی‌های a و b ، هر دو enumerable هستن پس Object.keys می‌بیندشون. - خود obj رو با iterable کردیم پس for...of می‌تونه پیمایشش کنه. --------------------- مطالب بیشتر در کانال رقصنده با کد https://t.me/danceswithcode #js #deepjs

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

به طور کلی توی جاوااسکریپت، از نظر سرعت ، معمولاً حلقه‌ی for ساده (با شمارنده‌ی ایندکس) سریع‌تر از for...of هست، و این دو هم ، معمولاً سریع‌تر از متدهایی مثل .forEach() یا .map() عمل می‌کنند. چرا for معمولاً سریع‌تره؟ - هیچ تابع اضافه‌ای در هر تکرار ایجاد نمی‌کنه. - از پروتکل iterator استفاده نمی‌کنه. - مستقیماً با ایندکس و طول آرایه کار می‌کنه. به صورت کلی: - اگر سرعت حداکثری و کنترل کامل لازم داری : for ساده. - اگر کد تمیز و خوانا می‌خوای و عملکرد خیلی بحرانی نیست : for...of. - اگر سبک فانکشنال و کوتاه‌نویسی می‌خوای : .map() یا .forEach().