Persian Software Engineers – Telegram
Persian Software Engineers
1.9K subscribers
353 photos
14 videos
84 files
303 links
تجربیات شخصی یک مهندس نرم افزار در آلمان‌.
کانال یوتیوب:
https://www.youtube.com/@Dev_Germany
ادمین کانال :
@mohamad_germany
Download Telegram
خب بیاید مثال را عملی کنیم. مثلا یک کلاس بسازید به نام myMath (Math نگذاریدا!!!)
حالا توی کلاس یک تابع بسازید به اسم Sum که دوتا ورودی میگیرد. میخواهم این تابع دوتا ورودی صحیح داشته باشد و جمع آنها را برگرداند.
تا ایجا را که بلدید:
public class myMath {

public int Sum(int Input1, int Input2){

int TheSum = Input1+Input2;

}

}
یک بررسی بکنیم. اول از همه public تعریفش کردم چون میخواهم از یک کلاس دیگری صدا بزنمش (که البته می¬شد protected تعریف کنید چون از کلاس هم پکیجش باز هم قابل خوندن خواهد بود).
مورد بعدی int هست به معنای عدد صحیح که همانطور که یادتون دادم در تعریف توابع در این قسمت نوع خروجی را مشخص میکنیم.
بعد از آن Sum را آوردم که نام تابعم هست.
سپس داخل پرانتز دوتا ورودی را مشخص کردم. و تعیین کردم دوتا ورودی که به تابع فرستاده میشود باید نوعش int باشه و داخل تابع بخواهم با آنها کار کنم با اسم Input1 و Input2 صدا میزنمشان
بعد داخل تابع یک متغیر تعریف کردم به اسم TheSum که مقدار جمع ورودیها را داخلش ذخیره کردم
🚫خب ایراد میگیره ازتون! آخر تابع میبینید که یک خط قرمز کشیده شده. موس رو ببرید روش نوشته شده Missung Return
حالا Return چی هست و چرا تاحالا استفادش نکردیم. تا الان توابعی که نوشتیم هیچوقت خروجی نداشتن و از نوع void بودن. اندفعه تابعی نوشتیم که میخواهیم محاسبه کند و از هرجا که صدا زده شده به همانجا یک مقداری را برگرداند. برای برگرداندن مقدار توی توابع از return استفاده میکنیم. اینطوری:
return *some value*;
پس کلا کلاسمان تا اینجا میشود:
public class myMath {



public int Sum(int Input1, int Input2){

int TheSum = Input1+Input2;

return TheSum;

}

}
حالا برید یک کلاس دیگری بسازید و داخلش متد main بسازید (در کلاس قبلی هم میشد اما میخوام بیشتر درکش کنیدش)
اینبار میخوام دوتا عدد 4 و 5 را باهم جمع کنم و خروجی را چاپ کنم. پس دارم:



public class myClass {



public static void main(String args[]){

myMath m = new myMath();

int result = m.Sum(4,5);

System.out.print(result);

}

}
مشخص هست از کلاس ریاضیم نمونه گرفتم، بعد تابعش را با دو ورودیه 4 و 5 صدا زدم.
خروجی برمیگرداند (return) که درجا در متغیری بنام result ذخیره کردم.
و در اخر چاپ کردم متغیرم را. که اگه از منوی بالا Run را بزنید میبینید خروجیش رو.
خب بنظر شما بی معنی نیست؟ هربار بیایم ازین کلاس نمونه بگیریم؟؟ مسلما کار جالبی نی!
اما چکار کنیم که جای نمونه گرفتن یک myMath.Sum که بزنیم قابل استفاده باشد؟ اگر الان این را بزنید میبینید که اصلا نمیخونه کد شما را.
برید داخل کلاس ریاضیتان و متدی که نوشتید را استاتیک کنید. اینطوری:
public static int Sum(int Input1, int Input2){

int TheSum = Input1+Input2;

return TheSum;

}
خب تمام. حالا برید توی اونیکی کلاس و خیلی راحت بصورت زیر متدتان را صدا بزنید:
int result = myMath.Sum(4,5);

System.out.print(result);
این هم از مفهوام استاتیک برای توابع.
این مفهوم برای متغیرها هم صدق میکند. اما چطور و به چه معنا.
فک کنید در یک کلاسی یک متغیری دارید که توی کلاسهای مختلفی باید صدا بزنیدش و تغییرش بدید. خب هربار برای استفاده از متغیرتان باید بیاید از کلاستان نمونه بگیرید. اما این باعث میشود که خراب شود متغیرتان. یعنی چی؟ خب تست کنید.
متغیر زیر را در کلاس myMath تعریف کنید (توی خوده کلاس نه داخل متد)
public int MyInt;
حالا برید داخل کلاس دیگری که ساختید. بیاید یه تست کوچیک بگیریم. همینجا در main بیاید دوبار از کلاسمان نمونه بگیریم و متغیرمان را تغییر بدیم. ببینیم آیا تغییرات ما توی آن ذخیره میشود یا نه
myMath m = new myMath();

m.MyInt = 4;

System.out.print(m.MyInt + "\n");


myMath m2 = new myMath();

System.out.print(m2.MyInt);
خب اجرا بگیرید. این کد دقیقا عین این هست که توی دوتا کلاس مختلف بیاید از myMath نمونه بگیرید و فرقی ندارد. (علامت \n در عمل پرینت نقش enter زدن را دارد و عمل + در متن چاپی برای متصل کردن دوتا فرمان چاپ به هم دیگر استفاده میشود)
وقتی چاپ کنید میبینید که اولش متغیرتان همان 4 شده مقدارش اما بعدش که دوباره کلاس را نمونه گرفتید شده 0. که البته لازم به ذکر هست این صفر برای این است که مقدار int در جاوا وقتی متغیری از جنسش تعریف میکنید بصورت پیشفرض صفر در نظر گرفته میشود....
حالا چرا اینطوری شد؟ ..... خب اصلا واضح هم هست! این عین همین هست که بگید یک انسانی گشنه اش بوده و چیزی خورده یکی دیگه سیر شده! خنده دار هست. چون m و m2 دوتا موجوده جدا هستند. با یکی کار کنید نمیشه روی دیگری هم اجرا شود کارتون!