در این آموزش یکی از پرکاربردترین کلاسهای اصطلاحاً Built-in در زبان برنامهنویسی جاوا تحت عنوان Math
را مورد بررسی قرار داده و از برخی متدهای تعریفشده در این کلاس به منظور انجام برخی عملیات ریاضیاتی در طراحی برنامههای خود بهرهمند خواهیم شد (توجه داشته باشیم که نام این کلاس با حرف اول بزرگ نوشته میشود.) در همین راستا، ابتدا پروژهای تحت عنوان Math ایجاد کرده و کلاسی به نام MathClass
در آن ایجاد میکنیم و پیش از کلیک کردن بر روی دکمۀ Finish، تیک گزینۀ public static void main را میزنیم.
برای آنکه بتوانیم متدهای مختلف کلاس Math
را مورد بررسی قرار داده و خروجی این متدها را مشاهده کنیم، از متد ()println
استفاده کرده و خروجی حاصل از فراخوانی متدهای کلاس Math
را با بهکارگیری آن در کنسول چاپ مینماییم به طوری که در ابتدا کد مربوط به کلاس MathClass
به صورت زیر خواهد بود:
public class MathClass {
public static void main(String[] args) {
System.out.println();
}
}
حال چنانچه آرگومانی را به عنوان ورودی به متد ()println
بدهیم، مقدار در نظر گرفته شده در پنجرۀ کنسول نمایش داده میشود اما پیش از ادامۀ آموزش، دو رویکرد متفاوت در به اصطلاح ایمپورت کردن کلاسهای مختلف در برنامه را معرفی کرده و در ادامه متدهایی مانند ()abs
و ()ceil
و همچنین متد ()floor
از کلاس Math
را معرفی میکنیم.
معرفی روشهای مختلف ایمپورت کردن کلاسها در برنامههای جاوا
به طور خلاصه، میتوان گفت که کلیۀ کلاسها در زبان برنامهنویسی جاوا به دو صورت اصطلاحاً Implicit و Explicit در برنامۀ مورد نظر ایمپورت میشوند. برای مثال، کلاسی همچون Scanner
به صورت Explicit یا «آشکارا» در برنامۀ مورد نظر ایمپورت میشود. به عبارت دیگر، جهت بهکارگیری این کلاس در برنامه میباید در سطر اول به صورت آشکارا آن را ایمپورت نماییم اما از سوی دیگر برخی از کلاسها مانند کلاس String
،Math
و بسیاری از کلاسهای دیگر در زبان جاوا هستند که به صورت Implicit یا «ناآشکار» در برنامۀ مورد نظر ایمپورت میشوند. برای مثال، زمانی که از کلاس String
استفاده میکنیم، میبینیم که هیچ دستوری جهت ایمپورت کردن کلاس مذکور در برنامه نمینویسیم بدین دلیل که کلاس String
به صورت ضمنی در پروژههای ساختهشده در اکلیپس ایمپورت میشود و کلاس Math
نیز به همین صورت است و برای استفاده از آن نیازی به ایمپورت کردن دستی کلاس مذکور نداریم.
حال با آگاهی از این نکته که کلاس Math
به صورت ضمنی در برنامۀ ما ایمپورت شده و نیازی به نوشتن دستور مرتبط با ایمپورت آن نداریم، در ادامه به معرفی برخی از متدهای کلاس Math
و نحوۀ عملکرد هر یک از آنها میپردازیم.
متد ()abs
از جمله متدهای پرکاربرد کلاس Math
میتوان به ()abs
اشاره کرد که نام آن از واژۀ Absolute به معنای «مطلق» گرفته شده و این وظیفه را دارا است تا در صورت فراخوانی، تمامی اعدادی که به عنوان آرگومان ورودی به آن پاس داده میشوند را به یک عدد مثبت تبدیل کرده و در خروجی ریترن نماید که برای روشن شدن نحوۀ عملکرد این متد، کد فوق را به شکل زیر تکمیل میکنیم:
public class MathClass {
public static void main(String[] args) {
System.out.println(Math.abs(-100));
}
}
همانطور که مشاهده میکنیم، به منظور استفاده از کلاس Math
، نام این کلاس را نوشته سپس یک .
قرار داده و در ادامه نام متد مورد نظر از این کلاس را مینویسیم. در واقع، پس از نوشتن نام کلاس Math
و قرار دادن نقطه، اکلیپس به صورت خودکار کلیهٔ متدهای مرتبط با این کلاس را برایمان نمایش میدهد که از میان متدهای مذکور میتوانیم ()abs
را انتخاب کرده و عدد مربوط به آرگومان ورودی را به آن پاس دهیم. بنابراین در کد فوق عدد 100- به عدد مثبت 100 تبدیل شده و توسط متد ()println
در خروجی چاپ میگردد.
به علاوه، همانطور که در آموزشهای پیشین اشاره کردیم، جهت نمایش متدهای کلاس Math
میتوانیم پس از نوشتن نام کلاس و درج علامت .
کلیدهای Ctrl + Space را به صورت همزمان فشار داده و بدین ترتیب متدهای تعریفشده در این کلاس را مشاهده نماییم. همچنین از میان گزینههای مربوط به متد ()abs
میباید متدی را انتخاب کنیم که مرتبط با دیتا تایپ آرگومان ورودی مورد نظر میباشد. با در نظر گرفتن این توضیحات، با اجرای برنامۀ فوق در خروجی خواهیم داشت:
100
همانطور که ملاحظه میکنیم، با استفاده از متد ()abs
عدد 100- به عدد مثبت 100 تبدیل شده و در کنسول چاپ شده است.
متد ()ceil
یکی دیگر از متدهای کلاس Math
متدی تحت عنوان ()ceil
میباشد که نام آن از واژۀ Ceiling به معنای «سقف اتاق» گرفته شده است و وظیفۀ آن تبدیل عددی از نوع اعشاری به یک عدد صحیح میباشد به طوری که دادهای از جنس اعشاری را به عنوان آرگومان ورودی گرفته و آن را رو به بالا رُند کرده و عددی صحیح را در خروجی ریترن میکند. برای مثال، اگر عدد 12/3 را به این متد دهیم، خروجی حاصله عدد 13 خواهد بود که برای درک بهتر نحوۀ کارکرد متد ()ceil
و همچنین ارتباط آن با واژۀ Ceiling، تصویر زیر را مد نظر قرار میدهیم:
حال در ادامه متد ()ceil
را در مثال مربوط به کد فوق فراخوانی میکنیم به طوری که در کد زیر داریم:
public class MathClass {
public static void main(String[] args) {
System.out.println(Math.ceil(12.3));
}
}
همانطور که در کد فوق ملاحظه میکنیم، متد ()ceil
از کلاس Math
را فراخوانی کرده و عدد اعشاری 12/3 را به عنوان آرگومان ورودی به آن دادهایم که عدد ریترنشده توسط متد ()println
در کنسول چاپ میشود به طوری که با اجرای برنامۀ فوق در خروجی خواهیم داشت:
13.0
همانطور که میبینیم، عدد 12/3 رو به بالا رُند شده و در نتیجۀ آن عدد 13 در کنسول چاپ میشود.
متد ()floor
نحوۀ عملکرد متد ()floor
دقیقاً برعکس متد ()ceil
میباشد که نام آن نیز از واژۀ Floor به معنای «کف اتاق» گرفته شده است و با توجه به تصویر زیر میتوانیم عملکرد این متد را حدس بزنیم:
در واقع، متد ()floor
یک عدد اعشاری را به عنوان آرگومان ورودی گرفته و آن را رو به پایین رُند میکند و در ادامه عدد رُندشده را در خروجی ریترن میکند که برای روشن شدن نحوۀ کار این متد، کد مربوط به مثال پیشین را به صورت زیر بازنویسی میکنیم:
public class MathClass {
public static void main(String[] args) {
System.out.println(Math.floor(12.3));
}
}
در کد فوق، متد ()floor
از کلاس Math
را فراخوانی کرده و عدد 12/3 را به عنوان ورودی به آن دادهایم که نتیجۀ ریترنشده در خروجی نیز توسط متد ()println
در کنسول چاپ میشود به طوری که با اجرای برنامۀ فوق در خروجی خواهیم داشت:
12.0
همانطور که مشاهده میکنیم، متد ()floor
عدد 12/3 را رو به پایین رُند کرده و آن را به عدد 12 کاهش داده است.