TheCodəPod
289 subscribers
269 photos
103 videos
7 files
165 links
باما همیشه بروز باشید =)
Download Telegram
🤔2
TheCodəPod
Photo
خب خب خب… داستان این منطق عجیب جاوااسکریپت چیه؟! 🤔

برای اینکه بفهمیم چه اتفاقی میفته، باید یه کمی عملگرهای + و - رو زیر ذره‌بین ببریم.


💡 عملگر + یا 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 عدد باشن ← ساده…
این موضوع توی پایتون هم اینجوریه که :

وقتی تو پایتون مینویسید
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
تبدیل آبجکت به Primitive توی جاوااسکریپت

خب خب خب…
تا حالا فکر کردی وقتی دو تا آبجکت رو با هم جمع می‌کنی (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
❤2👍1
❤1👍1😢1
❤2👍1
❤2👍1
❤2👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
وقتی اولین بار وارد لینوکس میشی
🤣3🥰1
❤2
TheCodəPod
Photo
استفاده از Skill Icons در README گیت هاب

اگه می‌خوای صفحه‌ی پروفایل یا پروژه‌هات تو گیت‌هاب حرفه‌ای‌تر و چشم‌گیرتر بشه، می‌تونی از Skill Icons استفاده کنی!
این آیکون‌ها رو خیلی راحت می‌تونی به README اضافه کنی. کافیه این کد رو بذاری:
[![Skill Icons](https://skillicons.dev/icons?i=html,css,js,react,python,git,github&theme=dark)](https://skillicons.dev/)


📌 توی قسمت i= اسم تکنولوژی‌هایی که می‌خوای رو با کاما جدا کن (html, css, js و …).
📌 با theme=dark یا theme=light هم می‌تونی تم رو تغییر بدی.

بعد از اینکه آیکون ها و تم رو کاستوم کردی، کافیه کدش رو بزاری تو فایل README پروفایل یا پروژه‌ات و از خروجی لذت ببری!

👨‍💻 نتیجه‌اش؟ یه README خفن جذاب که همه تو کفش میرن!
❤3👍1
تو پست بعدی بهتون یاد میدم چجوری یدونه از اینا بزارید تو پروفایل گیت هاب خودتون تا پشمای همه فر بخوره 😉
❤2👍1