متدهای جاوا – به زبان ساده
متدهای جاوا بخشی از این زبان هستند که میتوان منطق تجاری یک اپلیکیشن را با آنها تعریف کرد. متدها تعاملهای میان دادههای موجود در یک شیء را تعریف میکنند. در این راهنما با ساختار متدهای جاوا آشنا میشویم و تعریف امضای متد و شیوه فراخوانی و overload متدها را در جاوا خواهیم آموخت.
ساختار متدهای جاوا
ابتدا باید اشاره کنیم که یک متد دارای شش بخش است:
- مادیفایر دسترسی: به طور اختیاری میتوان یک مادیفایر دسترسی برای متد تعریف کرد که بخشهایی از اپلیکیشن که امکان دسترسی به این متد را دارند تعیین میکند.
- نوع بازگشتی: در صورتی که متد بازگشتی داشته باشد، نوع مقدار بازگشت یافته از سوی متد را تعریف میکند.
- شناسه متد: نامی است که به متد میدهیم.
- لیست پارامتر: یک لیست جدا شده با کاما از ورودیهای متد است.
- لیست استثنا: یک لیست اختیاری از استثناهایی است که متد میتواند تولید کند.
- بدنه متد: تعریف منطق متد است و میتواند خالی نیز باشد.
به مثال زیر توجه کنید:
در ادامه هر کدام از شش بخش مختلف متدها را به تفصیل مورد بررسی قرار میدهیم.
مادیفایر دسترسی
مادیفایر دسترسی امکان تعیین این که کدام اشیا میتوانند به متد دسترسی داشته باشند را فراهم میسازد. چهار نوع مادیفایر دسترسی وجود دارند: عمومی، حفاظتشده، خصوصی و پیشفرض (که package-private نیز نامیده میشود).
متد میتواند شامل کلیدواژه static در پیش یا پس از مادیفایر دسترسی نیز باشد. این کلیدواژه تعیین میکند که متد به کلاس تعلق دارد و به وهلههای آن تعلق ندارد و از این رو میتوانیم متد را بدون ایجاد وهلهای از کلاس نیز فراخوانی کنیم. متدهای فاقد کلیدواژه static به نام متدهای وهلهای (instance methods) شناخته میشوند و تنها از طریق وهلههای آن کلاس قابل فراخوانی هستند.
اگر بخواهیم از نظر عملکرد مقایسه کنیم، متد استاتیک تنها یک بار در حافظه بارگذاری میشود که در زمان بارگذاری کلاس است و از این رو از نظر مصرف حافظه کارایی بالایی دارد.
نوع بازگشتی
متدها میتوانند دادهها را به کدی که آنها را فراخوانی کرده بازگشت دهند. متد میتواند یک مقدار اولیه یا یک ارجاع شیء را بازگشت دهد. همچنین در صورتی که از کلیدواژه void به عنوان نوع بازگشتی استفاده کرده باشیم، متد میتواند هیچ چیزی بازگشت ندهد. به مثال نوع بازگشتی void زیر توجه کنید:
اگر یک نوع بازگشتی را اعلان کنیم در ادامه باید یک گزاره Return نیز در بدنه متد تعریف کنیم. زمانی که گزاره Return اجرا میشود، اجرای بدنه متد پایان مییابد و اگر گزارههای دیگری نیز در آنجا وجود داشته باشند، مورد پردازش قرار نمیگیرند.
از سوی دیگر یک متد void هیچ مقداری بازگشت نمیدهد و از این رو دارای گزاره Return نیست.
شناسه متد
شناسه متد همان نامی است که به متد اختصاص میدهیم. استفاده از نامهای گویا و توصیفی رویه مناسبی محسوب میشود. لازم به ذکراست که شناسه متد میتواند حداکثر 65536 کاراکتر داشته باشد.
لیست پارامتر
میتوانیم مقادیر ورودی یک متد را در لیست پارامتر تعریف کنیم که در داخل پرانتز قرار میگیرند. یک متد میتواند از 0 تا 255 پارامتر داشته باشد که با کاما از هم جدا میشوند. پارامتر میتواند یک شیء، یک مقدار اولیه، یا یک نوع شمارشی (enumeration) باشد. همچنین میتوانیم از annotation-های جاوا در سطح پارامتر متد استفاده کنیم.
لیست استثنا
استثناهایی را که از سوی یک متد تولید میشوند، میتوان در یک لیست با استفاده از بند throws تعیین کرد. در مورد «استثنای بررسی شده» (checked exception) یا باید کد را درون یک بند try-catch قرار دهیم و یا بند throws را در امضای متد بگذاریم.
بنابراین در ادامه به نسخه پیچیدهتر متد قبلیمان نگاه کنید که یک استثنای بررسی شده تولید میکند:
بدنه متد
آخرین بخش متد جاوا، بدنه متد است که شامل منطقی است که میخواهیم اجرا شود. در بدنه متد میتوانیم هر تعداد خط کد که دوست داریم بنویسیم. همچنین میتوانیم در صورت وجود متدهای استاتیک هیچ چیزی ننویسیم. اگر متد یک نوع بازگشتی اعلان کرده باشد، بدنه متد باید شامل گزاره Ruteun باشد.
امضای متد
امضای متد چنان که از تعریفش برمیآید از دو مؤلفه تشکیل یافته است که شامل نام متد و لیست پارامتر است. در ادامه یک متد ساده مینویسیم:
امضای این متد به صورت getName(String firstName, String lastName) است.
شناسه متد میتواند هر شناسهای باشد. با این حال اگر از قواعد کدنویسی رایج جاوا پیروی کنیم، شناسه متد باید یک فعل با حروف کوچک باشد که در ادامه یک صفت و/یا اسم میآید.
فراخوانی متد
اینک به بررسی شیوه فراخوانی متدهای جاوا میپردازیم. با ادامه بررسی مثال قبلی، فرض کنید آن متدها در یک کلاس جاوا به نام PersonName قرار دارند:
از آنجا که متد getName ما یک متد وهلهای و نه یک متد استاتیک است، برای فراخوانی متد getName باید یک وهله از کلاس PersonName ایجاد کنیم:
چنان که میبینید ما از شیء ایجاد شده برای فراخوانی متد getName استفاده میکنیم.
در نهایت شیوه فراخوانی یک متد استاتیک را بررسی میکنیم. در مورد متد استاتیک نیازی به ایجاد یک وهله از کلاس وجود ندارد. به جای آن متد را با افزودن نام کلاس به ابتدایش فرامیخوانیم. برای نمونه مثال قبلی را میتوان به صورت زیر فراخوانی کرد:
در این مورد فراخوانی متد به صورت زیر انجام یافته است:
Overload کردن متد
جاوا امکان داشتن دو یا چند متد با شناسه یکسان اما با لیست پارامترهای مختلف را فراهم ساخته است. در این حالت، فرض میگوییم متد Overload شده است. به مثال زیر توجه کنید:
Overload کردن متد در مواردی مانند مثال فوق مفید است و میتوانیم یک متد را با نسخه ساده شده از همان کارکرد پیادهسازی کنیم.
در نهایت باید اشاره کنیم که یک عادت خوب طراحی این است که مطمئن شویم متدهای Overload شده به روش یکسانی عمل میکنند. در غیر این صورت اگر متدی با شناسه یکسان به روش متفاوتی عمل کند، کد ما سردرگم کننده خواهد بود.
سخن پایانی
در این راهنما به بررسی اجزای ساختار متدهای جاوا پرداختیم. بدین منظور مادیفایرهای دسترسی، نوع بازگشتی، شناسه متد، لیست پارامتر، لیست استثنا و بدنه متد را مورد بررسی تفصیلی قرار دادیم. در ادامه شیوه تعریف امضای متد، روش فراخوانی متد و شیوه Overloade کردن متد را دیدیم. کد کامل این راهنما را میتوانید در این ریپوی گیتهاب (+) ملاحظه کنید.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی جاوا (Java)
- گنجینه آموزشهای جاوا (Java)
- مجموعه آموزشهای برنامهنویسی
- زبان برنامه نویسی جاوا (Java) — از صفر تا صد
- پیچیدگی زمانی عملیات جاوا روی انواع ساختمان داده — به زبان ساده
==