TheCodəPod
مثال : نقاط ۱، ۳ ،۵ برجسته هستند و نقاط ۲، ۴ و ۶ برجسته نیستند دلیل اینکه این موضوع مطرح کردم و برای ما جالب هست این موضوع است، که نقاط دودویی هستند(مثل 0 و 1) یک نقطه یاصافه یا برجسته
اگه به کد مورس هم دقت کنیم همین موضوع باینری بودن رو میبینیم یا نقطه یا خط تیره
2❤3👍1
وقتی کسی ازت میپرسه "با چه زبانی برنامه نویسی رو شروع کنم؟"
صرفا زبان مورد علاقه خودت رو بهش پیشنهاد نده!
بهتره که اول از اون شخص بپرسی دوست داره تو چه حوزهای فعالیت کنه. برای مثال:
فرانت اند: جاوااسکریپت
بک اند: جاوااسکریپت
موبایل: جاوااسکریپت
بازی: جاوااسکریپت
هوش مصنوعی: جاوااسکریپت
خلاصه که درست راهنمایی کنید 🫡
صرفا زبان مورد علاقه خودت رو بهش پیشنهاد نده!
بهتره که اول از اون شخص بپرسی دوست داره تو چه حوزهای فعالیت کنه. برای مثال:
فرانت اند: جاوااسکریپت
بک اند: جاوااسکریپت
موبایل: جاوااسکریپت
بازی: جاوااسکریپت
هوش مصنوعی: جاوااسکریپت
خلاصه که درست راهنمایی کنید 🫡
🤣3🤝3🖕1
TheCodəPod
Photo
خب خب خب… داستان این منطق عجیب جاوااسکریپت چیه؟! 🤔
برای اینکه بفهمیم چه اتفاقی میفته، باید یه کمی عملگرهای
💡 عملگر
عملگر
• وقتی هر دو operand عدد باشن ← ساده و منطقی جمع میکنه:
• وقتی هر دو operand رشته (string) باشن ← اونها رو به هم میچسبونه (concat):
• اما وقتی یکی عدد و یکی رشته باشه…
اینجاست که داستان عجیب میشه:
دلیلش اینه که عملگر
💡 عملگر
داستان عملگر
• وقتی هر دو operand عدد باشن ← درست مثل تفریق ریاضی عمل میکنه:
• وقتی یکی یا هر دو operand رشته باشن ← جاوااسکریپت اونها رو به عدد تبدیل میکنه و بعد تفریق میکنه:
🔑 جمعبندی رفتار
• عملگر
• باقی عملگرها مثل
📚 چند مثال جذاب
مثال ۱ – عدد ساده:
مثال ۲ – ترکیب رشته و عدد:
اینجا ابتدا عملگر
✅ جمعبندی نهایی
• عملگر
• عملگر
• اولویت اجرای عملگرهای
برای اینکه بفهمیم چه اتفاقی میفته، باید یه کمی عملگرهای
+ و - رو زیر ذرهبین ببریم.💡 عملگر
+ یا Binary Plusعملگر
+ رفتار متفاوتی نسبت به نوع داده operandها داره:• وقتی هر دو operand عدد باشن ← ساده و منطقی جمع میکنه:
2 + 2 = 4
• وقتی هر دو operand رشته (string) باشن ← اونها رو به هم میچسبونه (concat):
"2" + "2" = "22"
• اما وقتی یکی عدد و یکی رشته باشه…
اینجاست که داستان عجیب میشه:
"2" + 2 = "22"
دلیلش اینه که عملگر
+ وقتی نوع operandها یکی نباشه، اونها رو به رشته تبدیل میکنه."2" + 2 → "2" + "2" → "22"
💡 عملگر
- یا Binary Minusداستان عملگر
- کمی فرق داره:• وقتی هر دو operand عدد باشن ← درست مثل تفریق ریاضی عمل میکنه:
10 - 2 = 8
• وقتی یکی یا هر دو operand رشته باشن ← جاوااسکریپت اونها رو به عدد تبدیل میکنه و بعد تفریق میکنه:
"10" - 4 → 10 - 4 → 6
"10" - "4" → 10 - 4 → 6
🔑 جمعبندی رفتار
+ و - در جاوااسکریپت• عملگر
+ ← وقتی نوعها یکی نباشن، operandها رو تبدیل به string میکنه.• باقی عملگرها مثل
- * / operandها رو تبدیل به number میکنن و عملیات ریاضی انجام میدن.📚 چند مثال جذاب
مثال ۱ – عدد ساده:
2 + 2 - 2 → 4 - 2 → 2
مثال ۲ – ترکیب رشته و عدد:
"2" + 2 - 2 → "22" - 2 → 22 - 2 → 20
اینجا ابتدا عملگر
+ رشته و عدد رو تبدیل به "22" میکنه، بعد - اونها رو به عدد تبدیل میکنه و نتیجه 20 میشه.✅ جمعبندی نهایی
• عملگر
+ ← ترکیب رشتهها یا جمع اعداد. وقتی نوع operand ها ترکیبی از رشته و عدد باشه، هر دو به رشته تبدیل میشن.• عملگر
- ← تفریق اعداد. اگه هر دو operand یا یکی از اونها رشته باشن، جاوااسکریپت اونها رو به عدد تبدیل میکنه.• اولویت اجرای عملگرهای
+ و - از چپ به راست هست و همین باعث میشه بعضی ترکیبها عجیب به نظر برسن!👍2👏2
TheCodəPod
خب خب خب… داستان این منطق عجیب جاوااسکریپت چیه؟! 🤔 برای اینکه بفهمیم چه اتفاقی میفته، باید یه کمی عملگرهای + و - رو زیر ذرهبین ببریم. 💡 عملگر + یا Binary Plus عملگر + رفتار متفاوتی نسبت به نوع داده operandها داره: • وقتی هر دو operand عدد باشن ← ساده…
این موضوع توی پایتون هم اینجوریه که :
وقتی تو پایتون مینویسید
توجه کردید چرا خروجی 4 است و نه 22 ؟ در واقع پشت این اتفاق ساده یک فلسفه قدرتمند در پایتون پنهان شده است فلسفه ای به نام
Object-Oriented Programming
یا برنامه نویسی شئ گرایی
در پایتون همه چیز یک شئ (Object) است از اعداد و رشتهها گرفته تا توابع هر شیء دارای نوع (Type) و متدهای (Methods) خاص خودشو داره
مکانیسم داخلی پایتون
شناسایی نوع داده:
وقتی شما عبارت 2 + 2 را مینویسید، پایتون ابتدا دادههای اطراف عملگر + را بررسی میکند. پایتون تشخیص میدهد که هر دو 2 شیءهایی از نوع int (عدد صحیح) هستند
❗️فراخوانی متد add:
با توجه به اینکه هر دو شیء از نوع int هستند پایتون به سراغ کلاس int و متد مخصوص add رو که مربوط به این کلاس هست رو اجرا میکنه
این متد کد اجرا میکنه که عملیات جمع ریاضی را انجام میده
حالا فرض کنید کد زیر را بنویسید:
این حالت، پایتون نوع دادهها را از نوع str (رشته) تشخیص میده حالا پایتون به سراغ کلاس str میره و متد add مربوط به این کلاس را اجرا میکنه متد add در کلاس str که کد اون دو رشته به یکدیگر میچسبونه نه جمع ریاضی که تو متد add از کلاس int هست به همین دلیل خروجی این کد 22 خواهد بود
توجه کردید تو هردوتا مسله + بود ولی جواب متفاوت ؟
ویژگی پلی مورفیسم (Polymorphism):
سعنی یک عملگر(مثل +) رفتارهای مختلف داره
این ویژگی پایتون که یک عملگر (مثل +) رفتارهای متفاوتی بر اساس نوع دادههای اطراف خود داره، پلیمورفیسم (Polymorphism) نام دارد
پلیمورفیسم باعث میشود که کدهای پایتون بسیار انعطافپذیر و قابل فهم باشه چون عملگرها رفتار خود را با توجه به نوع شیء مورد نظر تنظیم میکنند
وقتی تو پایتون مینویسید
print(2 + 2)
توجه کردید چرا خروجی 4 است و نه 22 ؟ در واقع پشت این اتفاق ساده یک فلسفه قدرتمند در پایتون پنهان شده است فلسفه ای به نام
Object-Oriented Programming
یا برنامه نویسی شئ گرایی
در پایتون همه چیز یک شئ (Object) است از اعداد و رشتهها گرفته تا توابع هر شیء دارای نوع (Type) و متدهای (Methods) خاص خودشو داره
مکانیسم داخلی پایتون
شناسایی نوع داده:
وقتی شما عبارت 2 + 2 را مینویسید، پایتون ابتدا دادههای اطراف عملگر + را بررسی میکند. پایتون تشخیص میدهد که هر دو 2 شیءهایی از نوع int (عدد صحیح) هستند
❗️فراخوانی متد add:
با توجه به اینکه هر دو شیء از نوع int هستند پایتون به سراغ کلاس int و متد مخصوص add رو که مربوط به این کلاس هست رو اجرا میکنه
این متد کد اجرا میکنه که عملیات جمع ریاضی را انجام میده
حالا فرض کنید کد زیر را بنویسید:
print("2" + "2")این حالت، پایتون نوع دادهها را از نوع str (رشته) تشخیص میده حالا پایتون به سراغ کلاس str میره و متد add مربوط به این کلاس را اجرا میکنه متد add در کلاس str که کد اون دو رشته به یکدیگر میچسبونه نه جمع ریاضی که تو متد add از کلاس int هست به همین دلیل خروجی این کد 22 خواهد بود
توجه کردید تو هردوتا مسله + بود ولی جواب متفاوت ؟
ویژگی پلی مورفیسم (Polymorphism):
سعنی یک عملگر(مثل +) رفتارهای مختلف داره
این ویژگی پایتون که یک عملگر (مثل +) رفتارهای متفاوتی بر اساس نوع دادههای اطراف خود داره، پلیمورفیسم (Polymorphism) نام دارد
پلیمورفیسم باعث میشود که کدهای پایتون بسیار انعطافپذیر و قابل فهم باشه چون عملگرها رفتار خود را با توجه به نوع شیء مورد نظر تنظیم میکنند
❤🔥3👍2
TheCodəPod
این موضوع توی پایتون هم اینجوریه که : وقتی تو پایتون مینویسید print(2 + 2) توجه کردید چرا خروجی 4 است و نه 22 ؟ در واقع پشت این اتفاق ساده یک فلسفه قدرتمند در پایتون پنهان شده است فلسفه ای به نام Object-Oriented Programming یا برنامه نویسی شئ گرایی در…
این موضوع Polymorphism تو دنیای واقعی مثل ادمی که هرجا ی رنگی داره
پیش من بد تورو میگه پیش تو بد منو 😶🌫️
پیش من بد تورو میگه پیش تو بد منو 😶🌫️
👏4🤣4💩1👌1
تبدیل آبجکت به Primitive توی جاوااسکریپت
خب خب خب…
تا حالا فکر کردی وقتی دو تا آبجکت رو با هم جمع میکنی (
✋ اول اینو بدون
برخلاف زبانهایی مثل پایتون یا ++C، توی جاوااسکریپت نمیتونی بیای رفتار عملگرها رو مستقیم تغییر بدی.
یعنی خبری از متدهای جادویی (Magic Methods) مثل
پس نمیتونی بگی: "آبجکت من وقتی با + جمع شد، فلان کارو بکن!"
👈 جاوااسکریپت قبل از هر عملیات، آبجکتهارو خودکار تبدیل به primitive میکنه. بعد تازه میره سراغ اجرای اون عملگر.
📌 حالا اصلا primitive یعنی چی؟
توی جاوااسکریپت دو نوع داده اصلی داریم:
نوع اول 👈 Primitive ها: سادهترین نوع دادهها مثل number, string, boolean, null, undefined, symbol, bigint.
نوع دوم 👈 Objects: هر چیزی غیر از primitive ها! مثل object
حالا وقتی جاوااسکریپت نیاز داره روی یه آبجکت عملیاتی انجام بده (مثل جمع، تفریق، یا پرینت)، باید اون رو تبدیل کنه به یکی از primitive ها.
🔑 ماجرا با هینت (hint) شروع میشه
جاوااسکریپت بسته به شرایط مختلف، از سه تا hint استفاده میکنه تا بفهمه آبجکت رو به چی تبدیل کنه:
حالت اول 👈 "string": وقتی انتظار رشته داره.
مثال:
حالت دوم 👈 "number": وقتی نیاز به عدد هست.
مثال:
حالت سوم 👈 "default": وقتی جاوااسکریپت مطمئن نیست (مثل عملگر + که هم جمع عددی انجام میده هم رشتهها رو بهم میچسبونه).
مثال:
⚙️ الگوریتم تبدیل
وقتی یه آبجکت توی همچین موقعیتی باشه، جاوااسکریپت این مراحل رو میره جلو:
اگه متد obj[Symbol.toPrimitive](hint) وجود داشته باشه 👈 از همون استفاده میکنه.
اگه هینت string باشه 👈 اول متود toString() رو صدا میزنه، اگه وجود نداشت میره سراغ متود valueOf().
اگه هینت number یا default باشه 👈 اول متود valueOf() رو صدا میزنه، و اگه وجود نداشت میره سراغ متود toString().
📦 اگه چیزی پیادهسازی نکنیم چی؟
متود toString() برای یه آبجکت معمولی به صورت پیش فرض این رو برمیگردونه:
مثال:
متود valueOf() هم خود آبجکت رو برمیگردونه (که بیمصرفه) 🫤
🔧 مثال کاستومایز شده
حالا اگه بخوای رفتار رو کنترل کنی:
⚠️ نکته مهم:
متود های
📊 مقایسه با زبانهای دیگه
توی پایتون یا ++C میتونی مستقیماً رفتار عملگرها رو تغییر بدی (
ولی توی جاوااسکریپت، عملگرها دستکاری نمیشن.
فقط میتونی تعیین کنی وقتی آبجکت به primitive تبدیل شد، دقیقا چه مقداری برگرده.
📝 جمعبندی
جاوااسکریپت همیشه آبجکتها رو قبل از عملیات تبدیل به primitive میکنه.
سه حالت داره: "string", "number", "default".
متدهای کلیدی: Symbol.toPrimitive, toString, valueOf.
خب خب خب…
تا حالا فکر کردی وقتی دو تا آبجکت رو با هم جمع میکنی (
obj1 + obj2) یا از هم کم میکنی (obj1 - obj2) چه اتفاقی میفته؟ 🤔✋ اول اینو بدون
برخلاف زبانهایی مثل پایتون یا ++C، توی جاوااسکریپت نمیتونی بیای رفتار عملگرها رو مستقیم تغییر بدی.
یعنی خبری از متدهای جادویی (Magic Methods) مثل
__add__ یا __sub__ تو پایتون نیست.پس نمیتونی بگی: "آبجکت من وقتی با + جمع شد، فلان کارو بکن!"
👈 جاوااسکریپت قبل از هر عملیات، آبجکتهارو خودکار تبدیل به primitive میکنه. بعد تازه میره سراغ اجرای اون عملگر.
📌 حالا اصلا primitive یعنی چی؟
توی جاوااسکریپت دو نوع داده اصلی داریم:
نوع اول 👈 Primitive ها: سادهترین نوع دادهها مثل number, string, boolean, null, undefined, symbol, bigint.
نوع دوم 👈 Objects: هر چیزی غیر از primitive ها! مثل object
{} و array []حالا وقتی جاوااسکریپت نیاز داره روی یه آبجکت عملیاتی انجام بده (مثل جمع، تفریق، یا پرینت)، باید اون رو تبدیل کنه به یکی از primitive ها.
🔑 ماجرا با هینت (hint) شروع میشه
جاوااسکریپت بسته به شرایط مختلف، از سه تا hint استفاده میکنه تا بفهمه آبجکت رو به چی تبدیل کنه:
حالت اول 👈 "string": وقتی انتظار رشته داره.
مثال:
alert(user);
anotherObj[user] = 123;
حالت دوم 👈 "number": وقتی نیاز به عدد هست.
مثال:
let n = +obj;
let delta = date1 - date2;
let bigger = user1 > user2;
حالت سوم 👈 "default": وقتی جاوااسکریپت مطمئن نیست (مثل عملگر + که هم جمع عددی انجام میده هم رشتهها رو بهم میچسبونه).
مثال:
let total = obj1 + obj2;
if (user == 1) { ... }
⚙️ الگوریتم تبدیل
وقتی یه آبجکت توی همچین موقعیتی باشه، جاوااسکریپت این مراحل رو میره جلو:
اگه متد obj[Symbol.toPrimitive](hint) وجود داشته باشه 👈 از همون استفاده میکنه.
اگه هینت string باشه 👈 اول متود toString() رو صدا میزنه، اگه وجود نداشت میره سراغ متود valueOf().
اگه هینت number یا default باشه 👈 اول متود valueOf() رو صدا میزنه، و اگه وجود نداشت میره سراغ متود toString().
📦 اگه چیزی پیادهسازی نکنیم چی؟
متود toString() برای یه آبجکت معمولی به صورت پیش فرض این رو برمیگردونه:
[object Object]
مثال:
let user = { name: "Ali" };
alert(user); // [object Object]
alert(user + 1); // [object Object]1متود valueOf() هم خود آبجکت رو برمیگردونه (که بیمصرفه) 🫤
🔧 مثال کاستومایز شده
حالا اگه بخوای رفتار رو کنترل کنی:
let user = {
name: "Ali",
money: 100,
[Symbol.toPrimitive](hint) {
return hint === "string" ? `{User: ${this.name}}` : this.money;
}
};
alert(user); // "{User: Ali}" (string hint)
alert(+user); // 100 (number hint)
alert(user + 50); // 150 (default hint)⚠️ نکته مهم:
متود های
[Symbol.toPrimitive](hint)، toString() و valueOf() باید به عنوان خروجی یک primitive برگردونن📊 مقایسه با زبانهای دیگه
توی پایتون یا ++C میتونی مستقیماً رفتار عملگرها رو تغییر بدی (
__add__، __str__ و …).ولی توی جاوااسکریپت، عملگرها دستکاری نمیشن.
فقط میتونی تعیین کنی وقتی آبجکت به primitive تبدیل شد، دقیقا چه مقداری برگرده.
📝 جمعبندی
جاوااسکریپت همیشه آبجکتها رو قبل از عملیات تبدیل به primitive میکنه.
سه حالت داره: "string", "number", "default".
متدهای کلیدی: Symbol.toPrimitive, toString, valueOf.
❤3
TheCodəPod
Photo
استفاده از Skill Icons در README گیت هاب
اگه میخوای صفحهی پروفایل یا پروژههات تو گیتهاب حرفهایتر و چشمگیرتر بشه، میتونی از Skill Icons استفاده کنی!
این آیکونها رو خیلی راحت میتونی به README اضافه کنی. کافیه این کد رو بذاری:
📌 توی قسمت
📌 با
بعد از اینکه آیکون ها و تم رو کاستوم کردی، کافیه کدش رو بزاری تو فایل README پروفایل یا پروژهات و از خروجی لذت ببری!
👨💻 نتیجهاش؟ یه README خفن جذاب که همه تو کفش میرن!
اگه میخوای صفحهی پروفایل یا پروژههات تو گیتهاب حرفهایتر و چشمگیرتر بشه، میتونی از Skill Icons استفاده کنی!
این آیکونها رو خیلی راحت میتونی به README اضافه کنی. کافیه این کد رو بذاری:
[](https://skillicons.dev/)
📌 توی قسمت
i= اسم تکنولوژیهایی که میخوای رو با کاما جدا کن (html, css, js و …).📌 با
theme=dark یا theme=light هم میتونی تم رو تغییر بدی.بعد از اینکه آیکون ها و تم رو کاستوم کردی، کافیه کدش رو بزاری تو فایل README پروفایل یا پروژهات و از خروجی لذت ببری!
👨💻 نتیجهاش؟ یه README خفن جذاب که همه تو کفش میرن!
❤3👍1