JavaRush /جاوا بلاگ /Random-UR /جاوا میں طریقے
articles
سطح

جاوا میں طریقے

گروپ میں شائع ہوا۔
جاوا میں طریقے - 1جاوا میں، ایک درخواست کلاسز پر مشتمل ہوتی ہے۔ کلاسز، بدلے میں، متغیرات پر مشتمل ہوتے ہیں۔ وہ ڈیٹا اور طریقوں کو ذخیرہ کرنے کے ذمہ دار ہیں جو کلاس کے رویے کے ذمہ دار ہیں: دوسرے لفظوں میں، وہ منطق جو یہ فراہم کر سکتی ہے (مثال کے طور پر، کچھ ڈیٹا پر کارروائی کرنا، دوسرے طریقوں کو کال کرنا وغیرہ)۔ ہم اس طرح کے اجزاء کے بارے میں متغیر کے طور پر طویل عرصے تک بات کر سکتے ہیں، لیکن آج ہم اس لیے جمع نہیں ہوئے ہیں۔ آئیے ایک طریقہ کے طور پر کلاس کے ایسے جزو کے بارے میں بہتر بات کریں۔ جاوا میں طریقے - 2ایک طریقہ کلاس کے اندر اعلان کردہ کوڈ کا ایک نامزد بلاک ہے۔ اس میں اعمال کا ایک مکمل سلسلہ (ہدایات) ہے جس کا مقصد ایک الگ مسئلہ کو حل کرنا ہے، جسے دوبارہ استعمال کیا جا سکتا ہے۔ دوسرے الفاظ میں، ایک طریقہ ایک فنکشن ہے: کچھ ایسا جو آپ کی کلاس کر سکتی ہے۔ دوسری زبانوں میں بھی افعال ہوتے ہیں۔ صرف جاوا میں وہ کلاسز کے ممبر ہیں اور OOP اصطلاحات کے مطابق طریقے کہلاتے ہیں۔ لیکن اس سے پہلے کہ ہم آگے بڑھیں، آئیے ایک چھوٹی سی مثال دیکھیں:
public String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
  return resultSentence;
}
یہاں کچھ بھی پیچیدہ نہیں ہے: جاوا کا ایک طریقہ جس کا کام اس نام کے ساتھ گریٹنگ سٹرنگ بنانا ہے جسے ہم اس پر بھیجتے ہیں۔ مثال کے طور پر - Hello world! My name is Bobby آئیے میتھڈ ڈیکلریشن (بائیں سے دائیں) میں ہر کلیدی لفظ کو دیکھ کر طریقہ کی تعمیر کو صحیح طریقے سے سمجھیں۔ ہمارا پہلا مطلوبہ لفظ ہے public، اور یہ ایک رسائی موڈیفائر کی نشاندہی کرتا ہے:

ترمیم کرنے والوں تک رسائی

وہ کلاس ممبران کے لیے مرئیت کی قابل اجازت گنجائش کی نشاندہی کرتے ہیں، یعنی ان جگہوں کی پابندی جس میں متغیر یا طریقہ استعمال کرنے کی اجازت ہے۔ جاوا میں طریقے - 3جاوا میں درج ذیل ایکسیس موڈیفائر استعمال کیے جاتے ہیں۔
  • public : عوامی ۔ اس ترمیم کنندہ کے ساتھ طریقے یا فیلڈز عوامی ہیں، موجودہ پیکج اور بیرونی پیکجز سے دیگر کلاسز (یا اس کے بجائے، ان کے طریقے اور فیلڈز) کو نظر آتے ہیں۔ یہ معلوم رسائی کی وسیع ترین سطح ہے۔

  • محفوظ : اس موڈیفائر کے ساتھ طریقوں یا متغیرات کو موجودہ کلاس یا پیکج میں، یا ان کلاسوں میں جہاں سے اس کو وراثت میں ملا ہے، ساتھ ہی طریقوں یا فیلڈز تک رسائی حاصل کی جا سکتی ہے، چاہے وہ دوسرے پیکجوں میں ہی کیوں نہ ہوں۔

    protected String constructHelloSentence(String name) {...}
  • ڈیفالٹ ترمیم کنندہ۔ اگر کسی کلاس فیلڈ یا طریقہ میں ترمیم کنندہ نہیں ہے، تو ڈیفالٹ موڈیفائر کا اطلاق ہوتا ہے۔ اس صورت میں، فیلڈز یا طریقے موجودہ پیکج میں موجود تمام کلاسز کے لیے نظر آتے ہیں (جیسے protected ، لیکن وراثت میں ملنے پر کوئی مرئی نہیں)۔

    String constructHelloSentence(String name) {...}
  • نجی : عوامی ترمیم کرنے والے کے برعکس ۔ اس طرح کے ترمیم کنندہ کے ساتھ ایک طریقہ یا متغیر صرف اس کلاس میں دستیاب ہے جس میں اس کا اعلان کیا گیا ہے۔

    private String constructHelloSentence(String name) {...}
اس کے بعد ہمارے پاس Stringطریقہ کے دستخط ہیں (اس کی خصوصیات کو بیان کرنے والے طریقہ کی پہلی لائن)۔

واپسی کی قیمت

واپسی کی قدر وہ ڈیٹا (طریقہ کار کے عمل کا کچھ نتیجہ) ہے جو کال کے بعد اپنی جگہ پر آتا ہے۔ ہر طریقہ کی واپسی کی قدر ہوتی ہے۔ یا نہیں؟

واپسی کی قدر کے طریقے

یہ قدر ڈیٹا کی کسی بھی قسم کی ہو سکتی ہے: سادہ قسم کا متغیر یا حوالہ کی قسم۔ اس مثال میں، ہم اس بات کی نشاندہی کرتے ہیں کہ طریقہ کو قسم کی ایک چیز واپس کرنی چاہیے String، جو کہ ہمیں یاد ہے، ایک کلاس ہے جو سٹرنگ کو بیان کرتی ہے۔ دوسرا نکتہ یہاں لفظ ہے return۔ اس کا واپسی کی قیمت سے براہ راست تعلق ہے: اس کے بعد کی قدر کو اس جگہ پر واپس بھیج دیا جائے گا جہاں طریقہ کو بلایا گیا تھا، اور طریقہ خود returnبند ہو جائے گا۔ یہ لفظ عام طور پر طریقہ کی آخری سطر میں ظاہر ہوتا ہے (سوائے مختلف شاخوں والے طریقوں کے جیسے if, else...) اگر آپ اگلی لائن پر کوڈ لکھتے ہیں تو return:
private String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  return resultSentence;
  System.out.println(resultSentence);
}
پھر ہمیں کمپائلر سے لعنت ملے گی، جو کہ بہت اچھی نہیں ہے (مرتب کرنے والا بکواس کی سفارش نہیں کرے گا)۔ آپ کو یہ بھی یاد رکھنے کی ضرورت ہے کہ اس کے بعد ڈیٹا کی قسم کو сطریقہ کے دستخط میں بیان کردہ سے مماثل ہونا چاہئے۔ یہاں کے بارے میں مزید returnپڑھیں ۔

باطل

voidجاوا میں اس کا استعمال کیا ہے ؟ تمام طریقوں کی واپسی کی قدر نہیں ہوتی ہے۔ کچھ کے پاس یا تو کچھ نہیں ہے یا کچھ واپس کرنے کی ضرورت نہیں ہے۔ پھر کیا کیا جائے؟ پھر طریقہ دستخط میں ہم لکھتے ہیں void۔ واپسی کی قیمت کے بغیر ہمارا طریقہ کیسا نظر آئے گا؟
protected void constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
}
آپ نے شاید دیکھا ہوگا کہ واپسی کی قیمت کے ساتھ، لفظ returnSo it is غائب ہوگیا ہے، کیونکہ ہمارے طریقہ کار کو کچھ بھی واپس نہیں کرنا چاہیے۔ تاہم، اسے یہاں رکھا جا سکتا ہے، لیکن بغیر کسی معنی کے، بس return; آخری لائن میں. یہ عام طور پر بیکار ہے، لہذا voidیہ کے ساتھ طریقوں میں اختیاری ہے. تاہم، اسے voidان طریقوں میں مفید طور پر استعمال کیا جا سکتا ہے، جیسے کہ شاخیں یا لوپ، جہاں آپ فوری طور پر طریقہ سے باہر نکلنا چاہتے ہیں۔ طریقہ کے اعلان میں اگلا ہمارے پاس تھا constructHelloSentence۔

طریقوں کے نام

constructHelloSentence ١ - طریقہ کا نام، ایک مخصوص خصوصیت جس کے ذریعے ہم ایک یا دوسرے طریقے کی تمیز کر سکتے ہیں۔ اور، اس کے مطابق، ایک یا دوسرے طریقہ کو کال کریں. جاوا میں طریقے - 4طریقہ کے نام ایک چھوٹے حرف سے شروع ہونے چاہئیں، لیکن اونٹ کیس (کیمل کیس، اونٹ کیس) بھی استعمال کریں: یعنی نام کا ہر اگلا لفظ پچھلے سے متصل ہے اور بڑے حرف سے لکھا جاتا ہے۔ طریقہ کے ناموں میں طریقہ بیان کرنا چاہیے (بہترین تبصرہ مناسب نام ہے)۔ ایسا کرنے کے لیے، فعل کے ساتھ فعل یا مجموعے کا استعمال کریں: getCat, delete, createCar, وغیرہ۔ ایک طبقے کے اندر، طریقہ کار کے نام منفرد ہونے چاہئیں (طریقہ اوور لوڈنگ کو شمار نہیں کرنا، جس کے بارے میں ہم تھوڑی دیر بعد بات کریں گے)۔ آئیے اس طریقہ کو مزید دیکھیں جس کا ہم تجزیہ کر رہے ہیں اور دیکھتے ہیں ( String name)

طریقہ کار کے پیرامیٹرز

طریقوں میں کچھ ڈیٹا ہو سکتا ہے (یا نہیں ہو سکتا) جو باہر سے آئے گا، یعنی اس جگہ سے جہاں سے طریقہ بلایا گیا تھا۔ ہمارے معاملے میں، ہم دیکھتے ہیں کہ ایک Stringنام کے ساتھ ایک قسم کا آبجیکٹ آتا ہے nameاور بعد میں ہم اس متغیر کو اپنے طریقہ کار میں استعمال کرتے ہیں۔ آپ ایک طریقہ میں لامحدود تعداد میں پیرامیٹرز استعمال کر سکتے ہیں، لیکن 7 سے زیادہ کی سفارش نہیں کی جاتی ہے۔ جب ہم عناصر کی صحیح تعداد نہیں جانتے ہیں، لیکن یہ تمام عناصر ایک ہی مقصد کے لیے درکار ہیں اور ایک ہی قسم کے ہوں گے (مثال کے طور پر، String)، ایک بیضوی استعمال کیا جاتا ہے:
public void constructHelloSentence(String...name) {
 ...
}
ہر عنصر کی اپیل اس طرح ہوگی: name[0] کیا یہ آپ کو کسی چیز کی یاد دلاتا ہے؟ یہ ٹھیک ہے، سرنی! کچھ بھی نہیں بدلے گا اگر ہم لکھیں:
protected void constructHelloSentence(String[] name) {
 ...
}
عناصر تک رسائی بھی فارم کی ہوگی: name[1] اور ایک چیز۔ طریقہ کار کے دلائل حتمی ہو سکتے ہیں :
public String constructHelloSentence(final String name) {
  ...
}
اس کا مطلب یہ ہے کہ نام کا حوالہ کسی خاص چیز کا پابند ہے Stringاور اسے اوور رائڈ نہیں کیا جا سکتا۔ finalآپ حوالہ متغیر کے ساتھ کام کرنے اور محفوظ الفاظ کے ساتھ ان کے تعامل کے بارے میں مواد " جاوا میں حوالہ ڈیٹا کی اقسام " میں پڑھ سکتے ہیں۔

کال کرنے کے طریقے

لہذا، ہم نے طریقوں کی تخلیق کو ترتیب دیا ہے، اب ان کے استعمال کے بارے میں بات کرتے ہیں. جاوا میں کسی طریقہ کو کیسے کال کریں؟ جاوا میں طریقے - 5جاوا میں ہر طریقہ کلاس میں ہے۔ یہ سمجھنے کے لیے کہ جاوا میں کال کرنے کے طریقے کیسے کام کرتے ہیں، آئیے ایک کلاس لیتے ہیں:
public class StringConstructor {
  public String constructHelloSentence(String name) {
     String resultSentence = "Hello world! My name is " + name;
     System.out.println(resultSentence);
     return resultSentence;
  }
}
چونکہ ہمارا طریقہ جامد نہیں ہے (یہ بحث کے لیے ایک الگ موضوع ہے جو آج کے مضمون کے دائرہ کار سے باہر ہے)، اس کو کہنے کے لیے آپ کو پہلے ایک اعتراض بنانا ہوگا اور پھر اس پر طریقہ کار کو کال کرنا ہوگا:
class Application{
  public static void main(String[] args) {
     StringConstructor stringConstructor = new StringConstructor();
     stringConstructor.constructHelloSentence("Den");
  }
}
اپنے طریقہ کار کے دلائل میں، ہم نے اس سٹرنگ (نام) کو پاس کیا جسے ہم اسکرین پر ظاہر ہونے والے نتیجے میں اسٹرنگ میں دیکھنا چاہتے ہیں:

Hello world! My name is Den
یہ بھی یاد رکھنے کے قابل ہے کہ طریقوں کو جتنی بار ہمیں ضرورت ہو دوبارہ استعمال کیا جا سکتا ہے - کوئی پابندی نہیں ہے۔

یہ

آپ اکثر کوڈ میں کلیدی لفظ دیکھ سکتے ہیں this، جیسا کہ سیٹرز میں:
public void setValue(Long value) {
   this.value = value;
}
اور اس کا کیا مطلب ہے؟ thisجاوا میں، یہ اس کلاس کے موجودہ آبجیکٹ کا حوالہ ہے۔ مثال کے طور پر، اگر ہم نے کوئی چیز بنائی ہے:
StringConstructor stringConstructor = new StringConstructor();
پھر thisآبجیکٹ کے اندر stringConstructorاسی چیز کا لنک ہوگا۔ thisآبجیکٹ متغیر (جیسا کہ اوپر سیٹر میں) کا حوالہ دینے اور کچھ طریقہ کو کال کرنے کے لئے دونوں استعمال کیا جاتا ہے۔ ہم اپنی کلاس کو تھوڑا سا دوبارہ لکھ سکتے ہیں:
public class StringConstructor {

  public String constructHelloSentence(String name) {
     String resultSentence = this.getSentence()  + name;
     System.out.println(resultSentence);
     return resultSentence;
  }

  private String getSentence() {
     return "Hello world! My name is ";
  }
}
کے ذریعے thisہم مطلوبہ سٹرنگ لینے کے لیے اس آبجیکٹ کے طریقہ کار کو کہتے ہیں۔ لیکن پھر بھی، ایک اصول کے طور پر، یہ تقریباً طریقوں کے لیے استعمال نہیں ہوتا ہے، کیونکہ اس کے بغیر بھی کسی دیے گئے آبجیکٹ کے طریقہ کار کا حوالہ ہے؛ یہ بنیادی طور پر آبجیکٹ متغیر کے لیے استعمال ہوتا ہے۔

طریقہ اوورلوڈنگ

ہم کہتے ہیں کہ ہمیں ایک ایسے طریقہ کی ضرورت ہے جو بنیادی طور پر ایک ہی منطق کو انجام دے، لیکن ایک میں Hello world! اس کے بجائے worldہم اپنا لفظ (سٹرنگ) ڈالنا چاہتے ہیں۔ لیکن ہمارے پاس پہلے سے ہی ایک طریقہ موجود ہے constructHelloSentence۔ تو، کیا ہمیں اس طریقہ کار کے لیے ایک نیا نام لانے کی ضرورت ہے جو بنیادی طور پر وہی فعالیت انجام دے؟ اس سے کوئی فرق نہیں پڑتا ہے کہ یہ کیسے ہے: اس وقت طریقہ اوورلوڈنگ ہماری مدد کے لئے آتا ہے۔ جاوا میں طریقے - 7طریقہ اوورلوڈنگ ایک کلاس میں اعلان کرتے وقت ایک ہی طریقہ کے نام کا ایک سے زیادہ مرتبہ استعمال ہے۔ زبان کی ترکیب کے نقطہ نظر سے، کچھ مقامی جگہ میں دو ایک جیسے نام نہیں ہو سکتے۔ لیکن یہ بھی ممکن ہے کہ ایک ہی نام کے ساتھ طریقوں کا اعلان کیا جائے لیکن مختلف دلائل۔ دوسرے الفاظ میں، ایک کلاس میں اوورلوڈ ہوتے ہیں جب ایک ہی نام کے ساتھ دو یا زیادہ طریقے ہوتے ہیں لیکن مختلف ان پٹ ڈیٹا:
public class Constructor {

  public String constructHelloSentence(String name) {
     String resultSentence = "Hello world! My name is " + name;
     System.out.println(resultSentence);
     return resultSentence;
  }

  protected String constructHelloSentence(String firstName, String secondName) {
     String resultSentence = "Hello " + firstName + "! My name is " + secondName;
     System.out.println(resultSentence);
     return resultSentence;
  }
}
یہاں ہم دیکھتے ہیں کہ طریقوں میں ایک ہی رسائی موڈیفائر (نیز واپسی کی قسم) پر مشتمل ہونا ضروری نہیں ہے۔ اگر ایک اوور لوڈ شدہ طریقہ کو کال کیا جاتا ہے، تو کئی اعلان شدہ طریقوں سے کمپائلر خود بخود مطلوبہ کا تعین کرتا ہے جو کال کے دوران بتائے گئے پیرامیٹرز کی بنیاد پر کرتا ہے۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION