شیء Math
کارگاه قاب اعشار را روی برچسب مشتری نمینویسد. عرض عکس ۷٫۶ سانتی است، از پاسپارتو ۷٫۲ مانده، عکس ۳٫۸ سانتی به چپ خط رفته، و سه شاخهٔ ۱۲ و ۹ و ۱۵ روی میز است. این مترها تا آخر جلسه همانجا میمانند. چیزی که عوض میشود جوابی است که از شیء Math میپرسی، نه خودِ اندازه.
شیء حاضر است، تو نمیسازیاش
جمع و تفریق را در جلسهٔ عملگرهای حسابی بین دو عدد نوشتی و کار همانجا تمام شد. تاریخ را در جلسهٔ تاریخ و زمان با new Date ساختی و بعد تکهای از همان لحظه را خواندی. اینجا سازنده در کار نیست. Math از قبل در زبان نشسته. new Math() خطا میدهد و صدازدن خودِ Math مثل یک تابع هم خطا میدهد. شکل درست، اسم شیء و بعد نام کار است، روی عددی که خودت از قبل داری.
برگه مال همین میز است
ردیفها را برای حفظ کردن فهرست متد ننویس. هر ردیف یک تصمیم همین کارگاه است: برچسب، برش، خرید، تکان به چپ، بلندترین شاخه، کوتاهترین شاخه. صدا زدن، متر را عوض نمیکند. اگر هشت را میخواهی داخل متغیر بماند، باید خودت نتیجهاش را جایی بریزی.
📊 تصمیمهای همین میز
| کار | تصمیم کارگاه | عدد این میز | جایی که دست میلغزد |
|---|---|---|---|
Math.round |
نزدیکترین سانتی درست برای ۷٫۶ | 8 |
نیمخط روی عدد منفی |
Math.floor |
چند سانتی را واقعاً میتوانی ببری | 7 |
همین روش روی تکان منفی |
Math.ceil |
چند سانتی بخری تا ۷٫۲ پوشیده شود | 8 |
عدد درست را یکی ببری جلو |
Math.trunc |
جزء اعشاری منفی را به سمت صفر قیچی کنی | -3 |
انتظار همان نتیجهٔ قدم رو به پایین |
Math.max |
بلندترین بین ۱۲ و ۹ و ۱۵ | 15 |
دادن یک آرایه بهجای سه عدد |
Math.min |
کوتاهترین همان شاخهها | 9 |
همان اشتباه آرایه |
روی خط اعداد، از صفر به راست، ماندهٔ نیم واحد بالا میرود: 0.5 میشود ۱. همان مانده در سمت چپ صفر باز هم به طرف مثبت بینهایت میرود، برای همین منفی یک و نیم روی منفی یک مینشیند نه روی منفی دو. این عادت مدرسه است که «نیم به بالا» را فقط برای مثبتها شنیدهای. قدم Math.floor جداست: همیشه به سمت منفی بینهایت، یعنی به طرف عددهای کوچکتر.
برچسب عرض
مشتری روی رسید اعشار نمیبیند و کارگاه فقط نزدیکترین سانتی درست را میخواهد. این صدا هنوز ۸ را داخل متغیر نمیریزد. اگر برچسب را بعداً دوباره لازم داشتی، باید خودت حاصل را جایی نگه داری.
let width = 7.6;
console.log(Math.round(width));
هشت مال برچسب است. متغیر هنوز ۷٫۶ مانده، چون حاصل را به جایش برنگرداندی. اگر عرض درست نیمواحد بالای هفت بود، یعنی 7.5، باز هم برچسب هشت میشد. همان قانون نیمواحد را اگر روی منفی یک و نیم ببری، برچسب منفی دو نمیشود. یک قدم به طرف مثبت برمیدارد و منفی یک میماند. منفیتر کردنِ نیمخط، قانون این کار نیست.
let scrap = 7.2;
console.log(Math.floor(scrap));
console.log(Math.ceil(scrap));
قیچی روی هفت میایستد. دو دهم سانتی، یک سانتی کامل نیست که بشود برش هشتم را از پارچه درآورد. اگر قرار است همین تکه کامل پوشیده شود، هفت جا خالی میگذارد و باید هشت بخری. حالا فرض کن پاسپارتو از اول هفت سانتی درست بوده. هیچکدام از این دو کار یکی به آن اضافه نمیکنند. فقط وقتی اعشار داری، برش و خرید از هم جدا میشوند.
let nudge = -3.8;
console.log(Math.trunc(nudge));
console.log(Math.floor(nudge));
علامت منفی اینجا سر جایش میماند و فاصلهٔ بیعلامت نمیسازد. قیچیکردن جزء اعشاری، یعنی Math.trunc، به سمت صفر راه میرود: از منفی ۳٫۸ میرسد به منفی ۳ و هشتدهم را دور میریزد. قدم به سمت عدد کوچکتر، یعنی Math.floor، اجازه ندارد به صفر نزدیکتر شود. عدد درستِ کوچکتر از منفی ۳٫۸، منفی ۴ است. اگر این دو را یکی بگیری، یا قاب را یک سانتی کمتر به چپ میبری یا یک سانتی بیشتر.
console.log(Math.max(12, 9, 15));
console.log(Math.min(12, 9, 15));
سه شاخه سه آرگومان جدا هستند، نه یک بسته. بلندترین ۱۵ است و کوتاهترین ۹. اگر همان سه تا را داخل یک آرایه بپیچی و آرایه را یکجا بدهی، متد داخل بسته را باز نمیکند و نتیجهاش NaN میشود. مقایسه انجام نشده. عدد خراب برگشته.
let drawer = Math.floor(Math.random() * 6) + 1;
console.log(drawer >= 1 && drawer <= 6);
console.log(Math.random() < 1);
قرعهٔ خام هیچوقت به خودِ ۱ نمیرسد. از صفر هست تا زیر یک. ضرب در شش، این بازه را میبرد به صفر تا زیر شش. جزء صحیحِ رو به پایین همانجا فقط ۰ تا ۵ است. یکی که بعد از آن اضافه کنی، کشو میشود ۱ تا ۶ و خط اول همیشه درست است. خط دوم قرعهٔ تازهای است، نه همان عدد کشو، و آن هم همیشه زیر یک میماند. اگر یکی را قبل از جزء صحیح اضافه کنی، یا اصلاً اضافه نکنی، کشو به ۰ یا به ۷ میافتد و جعبهٔ ابزار آن خانه را ندارد.
دایرهٔ وسط قاب، روی بلیت
دهانه گرد است و شعاعش ۵. مساحت، π ضرب در شعاع ضرب در خود شعاع است. بلیت اعشار طولانی را به مشتری نشان نمیدهد. اول به سانتی درست نزدیک میکند، بعد همان را در پاراگراف مینویسد.
<!DOCTYPE html>
<html>
<head>
<title>math — page</title>
</head>
<body>
<p id="ticket">…</p>
<script>
let radius = 5;
let area = Math.PI * radius * radius;
let shown = Math.round(area);
let box = document.getElementById("ticket");
box.textContent = shown;
</script>
</body>
</html>
چشم مشتری ۷۹ را میخواند. π در ۲۵ نزدیک ۷۸٫۵۴ است و گرد کردن آن را به ۷۹ میبرد. ۵ شعاع است و ۲۵ حاصل ضرب شعاع در خودش. هیچکدام متن پاراگراف نیستند.
قبل از بستن جعبه
مشتری اول دایره را میبیند و باید ۷۹ بخواند، نه اعشار طولانی و نه خودِ شعاع. اگر قاب به چپ خط نشسته، بپرس منفی ۳٫۸ را به سمت صفر قیچی کردهای یا به سمت عدد کوچکتر قدم برداشتهای. این دو یکی نیستند. برچسب عرض جدا مانده: ۸ روی کاغذ و ۷٫۶ هنوز در متغیر. پاسپارتو را ۷ ببر و ۸ بخر، شاخهٔ ۱۵ از ۹ بلندتر است، و کشو فقط وقتی بین ۱ و ۶ میماند که ضرب در شش قبل از جزء صحیح باشد و یکی را آخر سر اضافه کنی.
مشتری شاکی میشود، کد هم خطا نمیدهد
برنامه اجرا میشود و اندازه دروغ است.
- ساختن
Mathباnew، یا صدازدنش مثل تابع - بردن منفی یک و نیم به منفی دو، چون «نیم رو به پایین» را از مدرسه آوردهای
- عوضی گرفتن قیچی به سمت صفر و قدم به سمت عدد کوچکتر، روی همان منفی ۳٫۸
- پیچیدن ۱۲ و ۹ و ۱۵ در یک آرایه و دادن همان یک بسته به بیشینه یا کمینه
- منتظر ماندن که قرعه یک بار هم عین ۱ شود
- یکی اضافه کردن به عددی که از اول سانتی درست بوده، فقط چون نام روش «پوشش» است
این تصویر بماند
آنچه کار را خراب میکند معمولاً جهت است، نه اسم متد. سمت چپ صفر، قیچی و قدم رو به پایین یکی نیستند و نیمواحد به منفی دو نمیافتد. قرعه را با ضرب، بعد برش به سمت عدد کوچکتر، بعد بهعلاوهٔ یک به کشو تبدیل کن. جلسهٔ بعد مدل DOM در HTML است.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود