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
، اور یہ ایک رسائی موڈیفائر کی نشاندہی کرتا ہے:
ترمیم کرنے والوں تک رسائی
وہ کلاس ممبران کے لیے مرئیت کی قابل اجازت گنجائش کی نشاندہی کرتے ہیں، یعنی ان جگہوں کی پابندی جس میں متغیر یا طریقہ استعمال کرنے کی اجازت ہے۔ جاوا میں درج ذیل ایکسیس موڈیفائر استعمال کیے جاتے ہیں۔-
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);
}
آپ نے شاید دیکھا ہوگا کہ واپسی کی قیمت کے ساتھ، لفظ return
So it is غائب ہوگیا ہے، کیونکہ ہمارے طریقہ کار کو کچھ بھی واپس نہیں کرنا چاہیے۔ تاہم، اسے یہاں رکھا جا سکتا ہے، لیکن بغیر کسی معنی کے، بس return
; آخری لائن میں. یہ عام طور پر بیکار ہے، لہذا void
یہ کے ساتھ طریقوں میں اختیاری ہے. تاہم، اسے void
ان طریقوں میں مفید طور پر استعمال کیا جا سکتا ہے، جیسے کہ شاخیں یا لوپ، جہاں آپ فوری طور پر طریقہ سے باہر نکلنا چاہتے ہیں۔ طریقہ کے اعلان میں اگلا ہمارے پاس تھا constructHelloSentence
۔
طریقوں کے نام
constructHelloSentence
١ - طریقہ کا نام، ایک مخصوص خصوصیت جس کے ذریعے ہم ایک یا دوسرے طریقے کی تمیز کر سکتے ہیں۔ اور، اس کے مطابق، ایک یا دوسرے طریقہ کو کال کریں. طریقہ کے نام ایک چھوٹے حرف سے شروع ہونے چاہئیں، لیکن اونٹ کیس (کیمل کیس، اونٹ کیس) بھی استعمال کریں: یعنی نام کا ہر اگلا لفظ پچھلے سے متصل ہے اور بڑے حرف سے لکھا جاتا ہے۔ طریقہ کے ناموں میں طریقہ بیان کرنا چاہیے (بہترین تبصرہ مناسب نام ہے)۔ ایسا کرنے کے لیے، فعل کے ساتھ فعل یا مجموعے کا استعمال کریں: 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
آپ حوالہ متغیر کے ساتھ کام کرنے اور محفوظ الفاظ کے ساتھ ان کے تعامل کے بارے میں مواد " جاوا میں حوالہ ڈیٹا کی اقسام " میں پڑھ سکتے ہیں۔
کال کرنے کے طریقے
لہذا، ہم نے طریقوں کی تخلیق کو ترتیب دیا ہے، اب ان کے استعمال کے بارے میں بات کرتے ہیں. جاوا میں کسی طریقہ کو کیسے کال کریں؟ جاوا میں ہر طریقہ کلاس میں ہے۔ یہ سمجھنے کے لیے کہ جاوا میں کال کرنے کے طریقے کیسے کام کرتے ہیں، آئیے ایک کلاس لیتے ہیں: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
۔ تو، کیا ہمیں اس طریقہ کار کے لیے ایک نیا نام لانے کی ضرورت ہے جو بنیادی طور پر وہی فعالیت انجام دے؟ اس سے کوئی فرق نہیں پڑتا ہے کہ یہ کیسے ہے: اس وقت طریقہ اوورلوڈنگ ہماری مدد کے لئے آتا ہے۔ طریقہ اوورلوڈنگ ایک کلاس میں اعلان کرتے وقت ایک ہی طریقہ کے نام کا ایک سے زیادہ مرتبہ استعمال ہے۔ زبان کی ترکیب کے نقطہ نظر سے، کچھ مقامی جگہ میں دو ایک جیسے نام نہیں ہو سکتے۔ لیکن یہ بھی ممکن ہے کہ ایک ہی نام کے ساتھ طریقوں کا اعلان کیا جائے لیکن مختلف دلائل۔ دوسرے الفاظ میں، ایک کلاس میں اوورلوڈ ہوتے ہیں جب ایک ہی نام کے ساتھ دو یا زیادہ طریقے ہوتے ہیں لیکن مختلف ان پٹ ڈیٹا:
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;
}
}
یہاں ہم دیکھتے ہیں کہ طریقوں میں ایک ہی رسائی موڈیفائر (نیز واپسی کی قسم) پر مشتمل ہونا ضروری نہیں ہے۔ اگر ایک اوور لوڈ شدہ طریقہ کو کال کیا جاتا ہے، تو کئی اعلان شدہ طریقوں سے کمپائلر خود بخود مطلوبہ کا تعین کرتا ہے جو کال کے دوران بتائے گئے پیرامیٹرز کی بنیاد پر کرتا ہے۔
GO TO FULL VERSION