در این آموزش با متد های جاوا ، نحوه تعریف یک متد و استفاده از آن ها در برنامه با کمک مثال آشنا خواهید شد.
متد چیست؟
در ریاضیات ، در مورد توابع مطالعه کرده اید. به عنوان مثال ، f (x) = x2 تابعی است که مقدار مربع x را برمی گرداند.
If x = 2, then f(2) = 4
If x = 3, f(3) = 9
and so on.
به طور مشابه ، در برنامه نویسی ، یک تابع بلوکی از کد است که یک کار خاص را انجام می دهد.
در برنامه نویسی شی گرا ، متد یک اصطلاح است که برای تابع استفاده می شود. متد ها به یک کلاس محدود می شوند و رفتار یک کلاس را تعریف می کنند.
انواع متد های جاوا
متد بسته به این که توسط کاربر تعریف شده باشد یا در کتابخانه استاندارد موجود باشد ، دو نوع است:
- متد های کتابخانه استاندارد
- متد های تعریف شده توسط کاربر
متد های کتابخانه استاندارد
متد های کتابخانه استاندارد متد های داخلی در جاوا هستند که به راحتی قابل استفاده هستند. این کتابخانه های استاندارد همراه با کتابخانه کلاس جاوا (JCL) در بایگانی جاوا (*.jar) با JVM و JRE ارائه می شوند.
مثلا،
- ()print متدی از java.io.PrintSteam است. (“ … “)print رشته داخل علامت های نقل قول را چاپ می کند.
- ()sqrt متدی برای کلاس Math است. جذر عدد را برمی گرداند.
به مثال زیر دقت کنید:
public class Numbers {
public static void main(String[] args) {
System.out.print(“Square root of 4 is: ” + Math.sqrt(4));
}
}
خروجی
Square root of 4 is: 2.0
متد تعریف شده توسط کاربر
همچنین می توانید طبق خواسته خود متد هایی را در داخل کلاس تعریف کنید. به این متد ها، متد های تعریف شده توسط کاربر گفته می شود.
چگونه یک متد تعریف شده توسط کاربر ایجاد کنیم؟
قبل از استفاده (استفاده از متد) باید آن را تعریف کنید.
در اینجا نحوه تعریف متد ها در جاوا آورده شده است.
public static void myMethod() {
System.out.println(“My Function called”);
}
در اینجا متدی به نام ()myMethod تعریف شده است.
قبل از نام تابع ، می توانید سه کلمه کلیدی public ، static و void را مشاهده کنید.
- کلمه کلیدی public متد ()myMethod را عمومی می کند. از خارج از کلاس می توان به اعضای عمومی دسترسی داشت.
- کلمه کلیدی static نشان می دهد که بدون ایجاد شی از کلاس می توان به متد دسترسی داشت.
- کلمه کلیدی void نشان می دهد که این متد هیچ مقداری را برنمی گرداند.
در برنامه بالا ، متد ما هیچ آرگومانی را نمی پذیرد. از این رو پرانتز خالی () است.
ساختار تعریف یک متد جاوا:
modifier static returnType nameOfMethod (Parameter List) {
// method body
}
اینجا،
- modifier – نوع دسترسی را تعریف می کند که آیا این متد public ، private و غیره است.
- static – اگر از کلمه کلیدی static در متد استفاده کنید ، به متد استاتیک تبدیل می شود. متد های استاتیک را می توان بدون ایجاد شی از کلاس فراخوانی کرد.
به عنوان مثال ، متد sqrt() کلاس استاندارد Math استاتیک است. از این رو ، می توانیم بدون ایجاد شی از کلاس Math ، مستقیماً از Math.sqrt استفاده کنیم.
- ReturnType – یک متد می تواند یک مقدار را برگرداند.
که می تواند انواع داده های محلی (int ، float ، double و غیره) ، اشیاء محلی (string ، Map ، List و غیره) یا هر شیء داخلی و تعریف شده توسط کاربر را برگرداند.
اگر متد یک مقدار را برنگرداند ، نوع برگشتی آن void است.
- nameOfMethod – نام متد یک شناسه است.
می توانید هر نامی را به متد بدهید. با این حال ، نام گذاری آن بر اساس وظایفی که انجام می دهد مرسوم تر است. به عنوان مثال ، calcuteInterest ، calcuteArea و غیره.
- (Parameters (arguments – پارامترها مقادیر ارسال شده به متد هستند. می توانید هر تعداد آرگومان را به متد ارسال کنید.
- Metho body – مشخص می کند که متد در واقع چه کاری انجام می دهد ، چگونه پارامترها با دستورات برنامه نویسی دستکاری می شوند و چه مقادیری بازگردانده می شوند. کدهای داخل { } بدنه متد است.
چگونه متد جاوا را صدا بزنیم؟
حالا که متد را تعریف کردید ، باید از آن استفاده کنید. برای این کار ، باید متد را فراخوانی کنید:
myMethod();
این دستور متد ()myMethod را که قبلاً تعریف شده بود را فراخوانی می کند.
۱- در حالی که جاوا کد برنامه را اجرا می کند ، با ()myMethod روبرو می شود. (در کد)
۲- سپس اجرا به متد ()myFunction می رود و کد درون بدنه ی متد را اجرا می کند.
۳- پس از اتمام اجرای کدها در داخل بدنه ی متد ، برنامه به حالت اصلی برمی گردد و عبارت بعدی را اجرا می کند.
مثال: برنامه ی متد جاوا
بیایید با تعریف یک کلاس جاوا ، یک متد جاوا را در عمل مشاهده کنیم.
class Main {
public static void main(String[] args) {
System.out.println(“About to encounter a method.”);
// method call
myMethod();
System.out.println(“Method was executed successfully!”);
}
// method definition
private static void myMethod(){
System.out.println(“Printing from inside myMethod()!”);
}
}
هنگامی که برنامه را اجرا می کنید ، خروجی برابر خواهد بود با:
About to encounter a method.
Printing from inside myMethod().
Method was executed successfully!
متد ()myMethod در برنامه بالا هیچ آرگومانی را قبول نمی کند. همچنین ، این متد هیچ مقداری را بر نمی گرداند (نوع برگشتی void است).
توجه داشته باشید که ، ما بدون ایجاد شی کلاس از این متد نام برده ایم. این کار امکان پذیر بود زیرا ()myMethod از نوع static است.
در مثال زیر متد ما غیر استاتیک است و در داخل کلاس دیگری قرار دارد.
class Main {
public static void main(String[] args) {
Output obj = new Output();
System.out.println(“About to encounter a method.”);
// calling myMethod() of Output class
obj.myMethod();
System.out.println(“Method was executed successfully!”);
}
}
class Output {
// public: this method can be called from outside the class
public void myMethod() {
System.out.println(“Printing from inside myMethod().”);
}
}
هنگامی که برنامه را اجرا می کنید ، خروجی برابر خواهد بود با:
About to encounter a method.
Printing from inside myMethod().
Method was executed successfully!
توجه داشته باشید که ، ابتدا شی ای از کلاس Output ایجاد کردیم. زیرا که ()myMethod متدی غیر استاتیک است.
متدهای جاوا با آرگومان های دریافتی و مقدار بازگشتی
یک متد جاوا می تواند دارای آرگومان دریافتی صفر یا بیشتر باشد و ممکن است یک مقدار را برگرداند.
مثال: مقدار بازگشتی از متد
بیایید مثالی بزنیم و از متد مقداری برگردانیم.
class SquareMain {
public static void main(String[] args) {
int result;
result = square();
System.out.println(“Squared value of 10 is: ” + result);
}
public static int square() {
// return statement
return 10 * 10;
}
}
خروجی
Squared value of 10 is: 100
در قطعه کد بالا ، متد ()squre هیچ آرگومانی را نمی پذیرد و همیشه مقدار مربع ۱۰ را برمی گرداند.
توجه کنید ، نوع بازگشتی ()squre عدد صحیح است. به این معنی که متد مقدار عدد صحیح را برمی گرداند.
همانطور که می بینید دامنه این روش محدود است زیرا همیشه همان مقدار را برمی گرداند.
حال بیایید قطعه کد بالا را طوری تغییر دهیم که به جای اینکه همیشه مقدار مربع ۱۰ را برگرداند ، مقدار مربع هر عدد صحیحی را که به متد ارسال می شود برگرداند.
مثال: متد با آرگومان های دریافتی و مقدار بازگشتی
public class SquareMain {
public static void main(String[] args) {
int result, n;
n = 3
result = square(n);
System.out.println(“Square of 3 is: ” + result);
n = 4
result = square(n);
System.out.println(“Square of 4 is: ” + result);
}
static int square(int i) {
return i * i;
}
}
خروجی
Squared value of 3 is: 9
Squared value of 4 is: 16
حال ، متد ()squre مقدار مربع هر عدد صحیحی که به آن ارسال شود را برمی گرداند.
جاوا یک زبان کاملاً وابسته به نوع است. اگر هر نوع داده دیگری را به جز int (در مثال بالا) استفاده کنید ، کامپایلر خطا می گیرد.
آرگومان n در متد ()getSquare طی فراخوانی متد ، آرگومان حقیقی نامیده می شود.
result = getSquare(n);
پارامتر i آرگومان های ارسالی را در تعریف متد (getSquare (int i می پذیرد که به آن آرگومان(پارامتر) رسمی گفته می شود. نوع آرگومان رسمی باید صریح تایپ شود.
با استفاده از کاما می توانید بیش از یک آرگومان را به متد جاوا ارسال کنید. مثلا،
public class ArithematicMain {
public static int getIntegerSum (int i, int j) {
return i + j;
}
public static int multiplyInteger (int x, int y) {
return x * y;
}
public static void main(String[] args) {
System.out.println(“10 + 20 = ” + getIntegerSum(10, 20));
System.out.println(“20 x 40 = ” + multiplyInteger(20, 40));
}
}
خروجی
۱۰ + ۲۰ = ۳۰
۲۰ x 40 = 800
نوع داده آرگومان های حقیقی و رسمی باید مطابقت داشته باشد ، یعنی نوع داده اولین آرگومان حقیقی باید مطابق با اولین آرگومان رسمی باشد. به همین ترتیب ، نوع آرگومان حقیقی دوم باید مطابق با نوع آرگومان رسمی دوم و غیره باشد.
مثال: مقدار مربعات اعداد ۱ تا ۵ را حساب کنید
public class JMethods {
// method defined
private static int getSquare(int x){
return x * x;
}
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
// method call
result = getSquare(i)
System.out.println(“Square of ” + i + ” is : ” + result); }
}
}
خروجی
Square of 1 is : 1
Square of 2 is : 4
Square of 3 is : 9
Square of 4 is : 16
Square of 5 is : 25
در قطعه کد بالا ، متد getSquare () ،int را به عنوان یک پارامتر در نظر می گیرد. براساس آرگومانی که ارسال شد، متد مقدار مربع آن را برمی گرداند.
در اینجا ، آرگومان i از نوع int در طی فراخوانی متد به متد ()getSquare ارسال می شود.
result = getSquare(i);
پارامتر x آرگومان ارسال شده را می پذیرد. [در تعریف تابع (getSquare (int x)]
return i*i; : دستور بازگشت است و مقدار را به روش فراخوانی برمی گرداند و تابع را خاتمه می دهد.
متوجه شدید، ما ۵ بار از متد getSquare استفاده کردیم؟
مزایای استفاده از متد ها چیست؟
- مزیت اصلی قابلیت استفاده مجدد از کد است. می توانید یک بار یک متد بنویسید ، و چندین بار از آن استفاده کنید. لازم نیست هر بار کل کد را دوباره بنویسید. به این فکر کنید که “یک بار بنویسید ، چندین بار استفاده مجدد کنید.”
- متد ها باعث می شود کد خواناتر باشد. به عنوان مثال ، متد ()getSalaryInformation نسبت به خواندن خطوط کد آنقدر قابل خواندن است که می توانیم بدانیم این متد چه کاری انجام خواهد داد.