مسیرها
/
JavaScript
JavaScript
/
تمرین‌ها
/
نرخ‌های فریلنسر
نرخ‌های فریلنسر

نرخ‌های فریلنسر

تمرین یادگیری

مقدمه

اعداد

بسیاری از زبان‌های برنامه‌نویسی نوع‌های عددی مشخصی برای نمایش انواع مختلف اعداد دارند، اما JavaScript فقط دو نوع دارد:

  • number: یک «نوع داده‌ی عددی» در قالب ممیز شناور دقت مضاعف ۶۴ بیتی (IEEE 754). نمونه‌هایی از آن -6، -2.4، 0، 0.1، 1، 3.14، 16.984025، 25، 976، 1024.0 و 500000 هستند.
  • bigint: یک نوع داده‌ی عددی که می‌تواند اعداد صحیح را در قالب دقت دلخواه نمایش دهد. نمونه‌هایی از آن -12n، 0n، 4n و 9007199254740991n هستند.

اگر به دقت دلخواه نیاز دارید یا با اعداد بسیار بزرگ کار می‌کنید، از نوع bigint استفاده کنید. در غیر این صورت، نوع number احتمالاً گزینه‌ی بهتری است.

گرد کردن

یک شیء سراسری توکار به اسم Math وجود دارد که توابع گرد کردن مختلفی را در اختیار شما می‌گذارد. برای مثال، می‌توانید اعداد اعشاری را به سمت پایین (floor) یا به سمت بالا (ceil) به نزدیک‌ترین عدد صحیح گرد کنید.

Math.floor(234.34); // => 234
Math.ceil(234.34); // => 235

عملگرهای حسابی

JavaScript ۶ «عملگر» مختلف برای انجام عملیات حسابی پایه روی اعداد در اختیار شما می‌گذارد.

  • +: عملگر جمع برای یافتن مجموع اعداد به کار می‌رود.
  • -: عملگر تفریق برای یافتن تفاضل دو عدد به کار می‌رود
  • *: عملگر ضرب برای یافتن حاصل‌ضرب دو عدد به کار می‌رود.
  • /: عملگر تقسیم برای تقسیم دو عدد به کار می‌رود.
2 - 1.5; //=> 0.5
19 / 2; //=> 9.5
  • %: عملگر باقی‌مانده برای یافتن باقی‌مانده‌ی یک تقسیم به کار می‌رود.

    40 % 4; // => 0
    -11 % 4; // => -3
    
  • **: عملگر توان برای به توان رساندن یک عدد به کار می‌رود.

    4 ** 3; // => 64
    4 ** 1 / 2; // => 2
    

ترتیب انجام عملیات

وقتی چند عملگر در یک خط به کار می‌رود، JavaScript از ترتیبی برای اولویت پیروی می‌کند که در این جدول اولویت نشان داده شده است. برای ساده کردن ماجرا در بحث ما، JavaScript از قاعده‌ی PEDMAS (پرانتز، توان، تقسیم/ضرب، جمع/تفریق) استفاده می‌کند که در کلاس‌های ریاضی دبستان یاد گرفته‌ایم.

const result = 3 ** 3 + 9 * 4 / (3 - 1);
// => 3 ** 3 + 9 * 4/2
// => 27 + 9 * 4/2
// => 27 + 18
// => 45

عملگرهای انتساب کوتاه

عملگرهای انتساب کوتاه، روش کوتاه‌تری برای نوشتن کدی هستند که یک عملیات حسابی را روی یک متغیر انجام می‌دهد و مقدار جدید را به همان متغیر نسبت می‌دهد. برای مثال، دو متغیر x و y را در نظر بگیرید. در این صورت، x += y معادل x = x + y است. اغلب به‌جای متغیر y از یک عدد استفاده می‌شود. ۵ عملیات دیگر هم می‌توانند به روشی مشابه انجام شوند.

let x = 5;
x += 25; // x is now 30

let y = 31;
y %= 3; // y is now 1

دستورالعمل‌ها

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

Note

متغیر ratePerHour و تابع dayRate به پول مربوط هستند. واحد اندازه‌گیری، پول در ازای یک واحد زمان است: به‌ترتیب ساعت و روز.

1. محاسبه‌ی نرخ روزانه با داشتن نرخ ساعتی

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

dayRate(89);
// => 712

نرخ روزانه نیازی به گرد کردن یا تبدیل شدن به دقت «ثابت» ندارد.

2. محاسبه‌ی تعداد روزهای کاری با داشتن بودجه‌ی ثابت

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

daysInBudget(20000, 89);
// => 28

3. محاسبه‌ی نرخ تخفیف‌خورده برای پروژه‌های بزرگ

اغلب مشتریان فریلنسر او را برای پروژه‌هایی استخدام می‌کنند که چند ماه طول می‌کشند. در این موارد، فریلنسر تصمیم می‌گیرد برای هر ماه کامل تخفیف بدهد و روزهای باقی‌مانده با نرخ روزانه حساب شوند. تعادل عالی شما میان کار و زندگی یعنی در هر ماه تقویمی فقط ۲۲ روز کار می‌کنید، پس هر ماه ۲۲ روز قابل صورتحساب دارد. به او کمک کنید هزینه‌ی چنین پروژه‌هایی را تخمین بزند، با داشتن نرخ ساعتی، تعداد روزهای قابل صورتحساب پروژه و نرخ تخفیف ماهانه. تخفیف همیشه به‌صورت یک عدد داده می‌شود، جایی که 42% به 0.42 تبدیل می‌شود. نتیجه باید به نزدیک‌ترین عدد صحیح به بالا گرد شود.

priceWithMonthlyDiscount(89, 230, 0.42);
// => 97972
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
JavaScript Exercism

آماده‌اید نرخ‌های فریلنسر را شروع کنید؟

در Exercism ثبت‌نام کنید تا JavaScript را همراه با 37 مفهوم159 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.