CS101 – Lecture 44

لیکچر 43

السلام و علیکم کیسے ہیں آپ

ہمارا پچھلا ویب ڈیویلیپمںٹ کا جو لیکچر تھا وہ تھا گرافکس کے بارے میں اور اینیمیشن کے بارے میں ہم نے دیکھا تھا کہ ایچ ٹی ایم ایل میں ہم گرافکس کس طرح استعمال کرتے ہیںتاکہ وہ آپ کے ویب پیج پر نظر آئیں اور اس کے علاوہ جاوا سکرپٹ کے ذریعے ہم نے کچھ اینیمیشن بھی آپ کو کر کے دکھائی تھیں۔جہاں تک ایچ ٹی ایم ایل کا تعلق ہے اس میں کسی گرافک کو اس کے ذریعے کسی پیج پر دکھانا کوئی اتنا مشکل نہیں ۔آپ امیج کا ٹیگ یوز کرتے ہیں اور امیج کے ٹیگ کا جو سب سے امپارٹنٹ ایٹریبیوٹ ہے وہ ہے سورس  والا ایٹریبیوٹ ہے،۔ تو جو امیج کا یو آر ایل ہوتا ہے وہ سورس والے ایٹریبیوٹ کے آپ ایکیویٹ کر دیتے ہیں تو وہ امیج جو ہے آپ کے ایچ ٹی ایم ایل پیج پر نظر آنا شروع ہو جاتا ہے ۔ لیکن اگر آپ نے ذرا کچھ انٹرسٹنگ کام کرنے ہیں امیجز کے ساتھ تو اس کے لئے آپ کو جاوا سکرپٹ کی ضرورت پڑتی ہے اور جاوا سکرپٹ میں خاص طور پر جو ایک بلٹ ان ایک آبجیکٹ ہے جس کا نام ہے دا امیج آبجیکٹ اس کے ذریعے آپ انٹرسٹنگ افیکٹس دکھا سکتے ہیں مختلف امیجز کے بارے میں ۔یہ جو امیج کا آبجیکٹ ہے اس کے مختلف پراپرٹیز ہیں اس میں نیم کی پراپڑتی ہے ، بارڈر کی ہے ، کمپلیٹ کی اور کئی پراپرٹیز ہیں لیکن ہم نے ان میں شاید ایک بھی یوز نہیں تھی سوائے سورس والی پراپرٹی کے ۔امیج والا آبجیکٹ جو ہے اس کے میتھڈز تو ہم نے کوئی ڈسکس نہیں کئے لیکن اس کے ایوینٹ ہینڈلرز بعض بڑے انٹرسٹنگ ہیں اس آن ابارٹ کا ہینڈلر ہے آن ایرر کا ہے اور آن لوڈ کا ہے ایون ایونٹ ہینڈلر ہے ۔

اس امیج آبجیکٹ کا جو سب سے انٹرسٹنگ ہم نے استعمال کیا تھا وہ استعمال تھا امیجز کی پری لوڈنگ کے لئے یعنی ایسے امیجز جن کو آپ نے بعد میں دکھانا ہے اس کو آپ بیک گراؤنڈ میں ڈاؤن لوڈ کر لیتے ہیں وہ جو آپ کے کیش میں آجاتے ہیں اس کے بعد آپ انہیں جلدی جلدی اپنے پیج پر دکھا سکتے ہیں ۔آپ بڑی سمودھ اینی میشن کر سکتے ہیں آپ کو ویٹ نہیں کرنا پڑتا کہ امیج آئے گا تب میں اپنا کام شروع کروں گا تو آپ یعنی امیجز کو پری لوڈ کر سکتے ہیں یوزنگ جاوا سکرپٹ اور جاوا سکرپٹ میں جو امیج آبجیکٹ ہے اس کو یوز کرتے ہوئے ۔،

اگر آپ نے پر لوڈنگ کرنی اس کے لئے سب سے پہلے تو آپ نیو والا جو کی ورڈ ہے اس کے ذریعے جو امیج آبجیکٹ ہے اس کا ایک نیا انسٹینس کری ایٹ کرتے ہیں اس کے بعد اس انسٹنس کی جو سورس پراپرٹی ہے نا اس کو آپ ایکیویٹ کر دیتے ہیں جو امیج آپ کو چاہئے اس کے یو آر ایل سے تو جونہی آپ یوں کرتے ہیں جاوا سکرپٹ فوراً اس امیج کو ڈاؤن کرنا شروع کر دیتی ہے  فوراً بیک گراؤنڈ میں ۔ وہ ڈسپلے نہیں کرتی بیک کیش میں اسے رکھ دیتی ہے ۔ اس کے بعد جب آپ کو اس امیج کو دکھانے کی ضرورت پڑتی ہے اہنے ویب پیج پر تو آپ کو اپنے ویب پیج پر جہاں اسے دکھانا ہے اس امیج کے سورس والی جو پراپرٹی ہے اس کو ایکیویٹ کر دیتے ہیں پری لوڈ امیج کی پراپرٹی سے جونہی آپ یہ کرتے ہیں فٹ سے آپ کو وہ امیج اپنے ویب پیج پر نظر آ سکتا ہے ۔ اس طرح ہم بڑی انٹرسٹنگ چیزیں کر سکتے ہیں ہم نے دو چار چیزیں دیکھی تھیں۔ شاید اس سے کم ۔

ہم نے کچھ اینی میشنز کر کے دکھائی تھیں یعنی امیجز کو جلدی جلدی چینج کر کے دکھائیں تو لگتا ہے کہ یہ ایک سٹیٹک امیج نہیں بلکہ ایک موونگ امیج ہے اس کے علاوہ ہم نے یہ بھی کیا تھا کہ چھوٹے چھوٹے تھمب نیلز رکھے تھے کہ جس بھی تھمب نیل پر ہم جاتے تھے اس کی ایک بڑی ورژن نظر آنی شروع ہو جاتی تھی ویب پیج پر تو وہ ہم نے اسی طریقے سے یعنی پر لوڈنگ کے ذریعے کیا تھا اور یہ جو امیج آبجیکٹ ہے اس کی جو سورس پراپرٹی ہے اس کو یوز کرتے ہوئے کیا تھا۔

ہم نے جو اینی میشن آپ کو کر کے دکھائی تھی اس میں یہ کہا تھا کہ یہ اینی میشن جو ہے شاید جو اینی میٹڈ جپس ہوتی ہیں اس کے ذریعے بھی کر سکتے ہیں لیکن جاوا سکرپٹ کے ذریعے ہمیں اس اینی میشن پر بہتر کنٹرول حاصل ہوتا ہے اور ہم نے آپ کو یہ بھی کر کے دکھایا تھا کہ کس طرح ہم اس اینی میشن کو سلوڈاؤن اور سپیڈ اپ کر سکتے ہیں جاوا سکرپٹ کی مدد سے ۔ جو اینی میٹڈ جپس ہیں ان میں یہ کنٹرول ہمیں حاصل نہیں ہو سکتا۔

یہ تو بات تھی ۔ پچھلی دفعہ کی ، آج ہم بات کریں گے پروگرامنگ میتھا ڈالوجی کی

یعنی ہم یہ بات کریں گے کی کہ ایک اچھا پروگرام آپ لکھنا چاہتے ہیں تو افیکٹیو طریقہ کیا ہے جس کی مدد سے وہ مناسب طور پر کام کریں نا صرف یہ کہ وہ مناسب طریقے سے کام کرے بلکہ ان کو بنانے پر جتنی ایفرٹ لگتی ہے جتنا پیسہ اور ٹائم لگتا ہے وہ بھی کسی طریقے سے منی مائز ہو، اگر ہم ایسا کر سکیں ، ہم کہیں گے جناب یہ پروگرام کا میتھڈ جو ہے نا اچھا ہےتو آج ہم ویسے میتھڈز کی بات کریں گے۔

اس کے علاوہ ایک اور چیز جو آج ہم دیکھیں گے وہ یہ کہ ٹیسٹنگ کیا بلا ہے ؟

اور ڈی بگنگ کیا چیز ہوتی ہے ؟ اس کے بارے میں بھی آپ کو ہم تھوڑی سی انٹروڈکشن دیں گے۔ لیکن پہلے پروگرامنگ میتھاڈالوجی، پروگرام میتھاڈالوجی وہ پراسیسس ہے جس کو انڈیویژیولز فالو کرتے ہیں یا پھر ٹیمز آف انڈیویژیولز فالو کرتے ہیں جس پراسیس کے ذریعے وہ کوئی پروگرام ڈیویلپ کرتے ہیں سو جو طریقہ جو سٹیپس وہ فالو کرتے ہیں اس کو ہم کہتے ہیں کہ یہ ان کہ پروگرامنگ میتھاڈالوجی ہے ۔ اب یہ ہے کہ اچھی پروگرامنگ میتھاڈالوجی کیا ہوتی ہے ؟

اس کے جناب خاص بات یہ ہونی چاہیے کہ جب آپ وہ میتھاڈولوجی آپ یوز کریں آپ کا خرچہ زیادہ نہیں ہونا چاہیے۔ آپ کا ٹائم زیادہ کنزیوم نہیں ہونا چاہئے اور وہ پروگرام جو ہے وہ ٹھیک ہو بلکہ وہ مینٹین اور انہانس کرنابھی آسان ہو۔ اس میں کئی چیزیں ہیں ایک تو یہ کہ پیسے زیادہ نہ لگے ، ٹائم کم لگے اور پروگرام ٹھیک بنے، ایسے کسی میتھاڈولوجی کے ذریعے اگر پروگرام بن رہے ہیں تو اسے ہم کہیں گے کہ یہ گڈ میتھاڈولوجی ہے ۔

یہاں پر ہم نے تذکرہ کیا ہے گڈ پروگرامز کا ، یہ کیا بلا ہیں ؟

آپ کو یاد ہو گا ، جب ایلگوریدھم کی ہم بات کر رہے تھے وہاں ہم نے کریکٹ ایلگوریدھمز کا تذکرہ کیا تھا تو وہاں اب ہم نے یہ کہا تھا کہ کریکٹ ایلگوریدھم وہ ہوتا ہے کہ جس کا سینٹیکس بھی درست ہو جس کی سمینٹکس بھی درست ہو۔ یعنی جس طرح اس کو لکھا گیا ہے اس میں کوئی گڑ بڑ نہ ہو اور جو لکھا گیا ہے یا جو ہم کرنا چاہ رہے ہیں اس میں بھی کوئی گڑ بڑ نہ ہو ۔ ہم نے سنٹیکس کے بارے میں کہا تھا کہ اٹس دا باڈی سمینٹکس از دا سول آف دا ایلگرادھم۔

سو پروگرام کیا ہے ؟

وہ کوڈ کی صورت میں ایک ایلگوردھم ہی لکھا ہوتا ہے تو یہاں بھی ہم وہی بات کہیں گے جو ہم نے ایلگوریدھم کے بارے میں کہی تھی یعنی آ پروگرام ودھ کریکٹ سنٹیکسٹ اینڈ کریکٹ سمینٹکس اسے ہم کہتے ہیں کہ اٹس آ کریکٹ پروگرام اور پروگرام جو ہوتے ہیں ان کا صرف کریکٹ ہونا کافی نہیں ہے یعنی اچھا پروگرام صرف وہ نہیں ہوتا جو وہ کر رہا ہو جو کہ وہ کرنا چاہتا ہواس میں ایک دو خوبیاں اور بھی ہونی چاہیئیں ان میں سے اکثر خوبیوں کو آپ ایک دو لفظوں میں جمع کر سکتے ہیں آپ کہہ سکتے ہیں اٹس اے گڈ پروگرام اف اٹ از کریکٹ اینڈ اٹس ریڈ ایبل ۔ یعنی کریکٹ اینڈ ریڈ ایبل۔تو ریڈایبل پروگرام کون سے ہوتے ہیں جن کو پڑھنا آسان ہو جن کو سمجھنا آسان ہو۔ اس کا فائدہ کیا ہوتا ہے ؟ اس کا فائدہ یہ ہوتا ہے کہ وہ پروگرام آسانی سے مینٹین کئے جا سکتے ہیں ۔ جو پروگرام اچھے ہوتے ہیں ان کو آپ پڑھیں آپ کو سمجھ آ رہی ہوتی ہے اور اگر آپ ان میں کچھ چینج کرنا چاہیں تو بڑا آسان ہو کسی چیزکو چینج کرنا اوراس میں اگر کچھ نئی چیز ڈال کر اسے انہانس کرنا ہو تو وہ بھی بہت آسان اور آسانی سے سمجھ آجائے ۔ کیونکہ وہ پروگرام بڑا آسان طریقے سے لکھا ہوا ہے اٹ از ویری ایزی ٹو انڈرسٹینڈ۔

آج ہم ریڈ ایبل پروگرامز کی خاصی باتیں کریں ۔آج ہم کئی پروگرامز کی بات کریں گے کہ یہ پروگرام جو ہیں یہ ریڈ ایبل  ہیں بکاز آف دس آر دیٹ، لیکن اس سے پہلے ایک ہم ایسے پروگرام کو دیکھتے ہیں جس کو میں اتناریڈ ایبل نہیں کہوں گا۔ اس وقت آُپ کو جو کوڈ نظر آ رہا ہے ٹھیک ہے وہ مناسب ہے ۔ یہ آپ نے پہلے دیکھا ہوا ہے بلکہ اسے آپ نے ایک اسائنمنٹ میں لکھا ہوا ہے جب آپ نے ببل سالٹ کا کوڈ لکھا تھا تو یہ ببل سالٹ کا کوڈ پے ۔ اس میں میرے خیال میں اس کوڈ کو اس سے بہتر لکھنا جیسا یہ لکھا ہوا ہے شاید ممکن نہ ہو لیکن مجھے اس میں ایک پرابلم نظر آتی ہے،

اس میں جب میں اس کوڈ کو لکھتا ہوں مجھے جو پرابلم ہوتی ہے جب میں سوافٹ فلیگ کی بات کرتا ہوں تو مجھ سے گڑ بڑ ہو جاتی ہے ۔ میں اسے جب لکھتا ہوں تو ٹرو کے بجائے فالس اور فالس کی بجائے ٹرو لکھا جاتا ہے ۔ ایک دو الٹریشنز کر کے میں اس کو دیکھتا ہوں اسے چیک کرتا ہوں اسے ٹھیک کرتا ہوں پھر جا کر پروگرام ٹھیک ہوتا ہے تو اس کی لاجک اس وقت تو ٹھیک ہے لیکن یہ لاجک تھوڑی سی کمپلیکس ہے کیونکہ لاجکس تھوڑی سی کمپلیکس ہے اس لئے اس کی ریڈ ایبلٹی بھی اچھی نہیں ہے تو اگر ہم اس کی ریڈ ایبلٹی بڑھانا چاہتے ہیں تو ہمیں اس کی کمپلیسکٹی کم کرنا پڑے گی میں اس کی ایگزامپل یوں دیتا ہوں کہ میں اس کو ایسے طریقے سے لکھنے کی کوشش کروں گا کہ جہاں جہاں سواپ فلیگ کا ذکر ہے وہ ختم ہو جائے کیوں کہ یہیں سے تو گڑ بڑ ہوتی ہے اسی سے تو پرابلم آتی ہے آئی وانٹ ٹو گٹ رڈ آف دیٹ، تو اس پروگرام کی ریڈ ایبلٹی بڑھانے کے لئے میں سواپ فلیگ کی  اس کی کمپلیکسٹی کم کرنے کے لئے میں سواپ فلیگ کی چھٹی کرنے  کی کوشش کرتا ہوں جب میں ایسا کرتا ہوں تو جو کوڈ بنتا ہے وہ اس وقت آپ کو نظر آ رہا ہے ۔ آپ دیکھ رہے ہیں یہ کوڈ نسبتاً سمپل نظر آ رہا یے کیوں کہ اس میں اس سواپ فلیگ کا تذکرہ ہی نہیں ہے تین چار لائنیں غائب ہو گئی ہیں کوئی نئی لائن ایڈ نہیں ہوئی، نہ صرف یہ بلکہ وہ جو وائل والا لوپ تھا دیٹ ہیز بین ریپلیسڈ ود دا فار لوپ ۔عموماً وائل والے لوپ کو ٹریک کرنا نسبتاً مشکل ہوتا ہے کیونکہ کنڈیشن ہوتی ہے اس کو آپ کو چیک کرنا ہوتا ہے ۔ فار لوپ کے بارے میں تو آپ کو پتہ ہوتا ہے کہ اس نے اتنی بار چلنا ہے وائل لوپ کے بارے میں یہ ہوتا ہے کہ آپ کو یہ نہیں پتہ ہوتا کہ اس نے کتنی بار چلنا ہے ۔ بفور اینڈ تو نہیں پتہ ہوتا ہم صرف ویٹ کرتے ہیں کہ کنڈیشن ٹرو ہو تاکہ وائل لوپ جو ہے وہ سٹاپ ہو یا وائل لوپ چلتا رہے سارا کا سارا اس سچوئشن پر ڈیپنڈ کرتا ہے۔ فار لوپ کا سارا ہمیں پتہ ہوتا کہ وہ سو دفعہ یا پچاس دفعہ یا دس دفعہ چلنا ہے یا پھر جیسا کہ اس کوڈ میں ہے ایک لاکھ دفعہ ۔یہ والا کوڈ جو آپ کو نظر آرہا ہے یہ تقریباً وہی کام کرے گا جو پچھلا کوڈ کرتا تھا ، ازمپشن ہماری یہ ہے کہ فرض کریں کہ صرف وہ جو ارے ہے جسے ہم سارٹ کر رہے وہ صرف دس پندرہ ایلیمنمٹ ہیں یا ایون ہزار ہیں یہ دونوں پیسز آف کوڈ ایگزیکلٹی ایک جیسا ہی کام کر کے دیں گے یعنی اینڈ ریزلٹ ایک ہی ہو گا، لیکن دوسرا جو کوڈ ہے جو میں آپ دکھا رہا ہوں یہ نسبتاً آسان ہے انڈرسٹینڈ کرنا۔

پہلے والا جو کوڈ تھا وہ یہ تھا اس میں آپ کو پاس کرنا پڑتا تھا سارے کے سارے ایلیمنٹس کو اور پھر چیک کرنا پڑتا تھا کہ سارے کے سارے ایلیمںٹ چیک ہو گئے ہیں یا نہیں اور اس کے مطابق پھر آپ سواپ فلیگ کو ایڈجسٹ کرتے تھے اس کو ٹرو کرتے تھے یا فالس کرتے تھے اس کو بلکہ میں کچھ الٹا بول گیا اس کو ہم یوں بھی کہہ سکتے ہیں کہ سواپ فلیگ اگر چینج ہوتا تھااس کا مطلب تھا کچھ چینج آئی ہے اس کا مطلب تھا ہمیں کچھ چینج کرنا پڑے گی یہ سوچ کے ہم مزید الٹریشن کیا کرتے تھے لیکن دوسرے کوڈ میں ایسا کوئی چکر نہیں ہے اس میں ہم فکس نمبر آف الٹریشنز کرتے ہیں اس میں ہو کیا رہا ہے اس میں ہم اوور ریٹریٹ کر رہے ہیں اس میں ہم ضرورت سے لوپنگ کر رہے ہیں اس کا نقصان ہو رہا ہے یہاں پر میرا خیال ہے یہ کوڈ جو ہے ذرا ان ایفیشنٹ ہے کمپیئر ٹو دا کوڈ آئی ہیو شوڈ ارلئیر۔لیکن آل دواٹس ان ایفیشنٹ، اٹس ریڈ ایبل

میرے خیال میں اٹس آ ریزن ایبل فیڈ آف ۔

اگر میں اپنے کوڈ کی تھوڑی سی ایفیشنسی کم کر دوں لیکن اس کی ریڈ ایبلٹی بڑھ جائے اس کو مینٹین کرنا اس کو انہانس کرنا آسان ہو جائے آئی تھنک اٹس آ ریزن ایبل ٹریڈ آف۔ اور آپ دیکھ رہے ہیں یہاں پر میں نے لکھا تا 100،000 ہے لیکن یہ ہنڈرڈ تھاؤزنڈ ہونا یہاں پر ضروری نہیں ہے ۔ اگر ارے میں صرف پہلے ایلیمنٹس ہیں جن کو سارٹ کر رہا ہوں تو شاید یہ ایک لاکھ سے کہیں کم ہو سکتا ہے ، شاید صرف اگر دس ایلیمنٹ ہوں تو صرف دس ہو سکتا ہے ، یا شاید 9 ہو سکتا ہے ،

اگر اس کے میں سوچیں کہ مجھے کتنے دفعہ آئبریڈ کرنا پڑے گا تو اٹ از باؤنڈ ٹو اٹ ۔ ذرا اس کے بارے میں سوچیں ۔ کہ آپ کو اتنی دفعہ ہائٹریٹ کرنا پڑے گا جتنی دفعہ ہائیٹریٹ کرنا پڑتا ہے اس کا تعلق ڈائریکٹلی ٹوٹل نمبر آف ایلیمںٹس کتنے ہیں جن کو آپ سارٹ کر رہے ہیں ۔ تو یہ تو میں نے بہت بڑا نمبر لکھ دیا لیکن اس سے کوئی فرق مجھے اس لئے نہیں پڑتا کہ میرے پاس کمپیوٹر بڑا تیز ہے یہ اس بات کی پرواہ نہیں کرتا کہ اسے کتنی ہائیٹریٹ کرنا پڑتا ہے مجھے جواب آدھے سیکنڈ میں چاہیے اگر ایک ہائٹریشنز کر کے مجھے آدھے سیکنڈ میں جواب مل جاتا ہے تو آئی ڈونٹ کئیر ۔ آئی ڈونٹ کئیر اف اٹس ان افیشنٹ ۔تو اینڈ ریزلٹ کیا ہوا ، اینڈ ریزلٹ یہ ہوا کہ ریڈ ایبل پروگرامز یہ ہوتے ہیں کہ ایک تو یہ کہ وہ عام پروگرامز سے زیادہ ریڈ ایبل ہوتے ہیں دوسرے یہ کہ دے آر ایفیشنٹ انف۔

وہ سپر ایفیشنٹ نہیں ہوتے تو میں یہ کہہ رہا ہوں کہ کئی بار ریڈایبلٹی حاصل کرنے کے لئے کمپلیکسٹی کو کم کرنے میں کوئی مضائقہ نہیں ہے ۔ اسی طرح ایفی شنسی کو ریڈایبلٹی بڑھانے کے لئے کم کرنے میں بھی کوئی مسئلہ نہیں  ہے ۔ کہ اگر آپ کمپلیکسٹی کم کر کے ریڈ ایبل بنا سکتے ہیں اس سے ایفی شنسی تھوڑی کم ہو جاتی ہے تو اٹ از فائن۔

تو جناب جب بھی آپ پروگرام لکھیں کوشش کریں کہ اس کی ریڈ ایبلٹی زیادہ سے زیادہ ہو۔ یعنی اس کو پڑھ کے سمجھنا زیادہ سے زیادہ آسان ہو۔ تو اگر آپ ایسے کام کرنا چاہتے ہیں ریڈ ایبل کوڈ لکھنا چاہتے ہیں اچھے پروگرام لکھنا چاہتے ہیں  تو ظاہر ہے کہ ہم میتھاڈالوجی کی بات کر رہے ہیں تو اس کے بارے میں کچھ گائیڈ لائنز ہم آپ کو بتاتے ہیں کہ جب آپ پروگرام لکھنا شروع کر یں تو کون سی گائیڈ لائنز آپ کو فالو کرنا چاہئیں۔

سب سے پہلے تو ہم ڈیزائن گائیڈ لائنز کے بارے میں بات کرتے ہیں اس میں ایک موٹی سی چیز یہ ہے کہ جب بھی کوئی کمپلیکس کام کر رہے ہیں بریک اٹ ان ٹو سمال پیسز۔

کمپلیکس کام کرنا ہے تو اسے چھوٹے چھوٹے سمپل فنکشنز میں اسے تقسیم کر دیں۔ جاوا سکرپٹ میں آپ کے پاس یہ سہولت ہے کہ جب آپ کوئی کمپلیکس کام کر رہے ہیں تو اس کو چھوٹے چھوٹے فنکشنز کی مدد سے کریں ۔ تو میں نے جب کوئی بڑا کام کرنا ہوتا تو میں ایسا ہی کرتا ہوں ، میں سوچتا ہوں کہ اس کو کس طرح میں بریک ڈاؤن کرسکتا ہوں پھر میں ہر انڈیویژیول فنکشن کو ڈیفائن کرتا ہوں لیکن پہلے آئی بریک اٹ ڈاؤن، یہ جو پہلے آپ نے کوڈ دیکھا ببل سارٹ کا اس میں وہ جو سٹیٹمنٹس تھیں نا جن میں ہم سواپ کر رہے تھے ویری ایبل کے ذریعے کہ ادھر کا مال ادھر کر رہے تھے۔ تو وہاں پہ بجائے اس کے کہ تین سٹیٹمنٹس ہم لکھیں اس کے لئے ہم ایک الگ سے فنکشن بھی ڈیفائن کر سکتے تھے اور میرے خیال سے ہمیں یہ کرنا بھی چاہیے تھا کیونکہ اس سے پروگرام کی ریڈ ایبلٹی بڑھ جاتی تھی تو جہاں موقع ملے اور جہاں آپ کو لگے کہ یہ تھوڑا سا حصہ اس کے انڈیویژویلز کی اپنی پرسنیلٹی بنتی ہے اس کو الگ کر کے اس کو ایز آ فنکشن ڈیفائن کر دیں ۔ دوسری چیز ڈیزائن کے بارے میں یہ کہ آپ نے ایک پروگرام لکھنا ہے اس میں بہت سے فنکشن ہونے ہیں تو کوشش کریں کہ اس میں جو زیادہ تر ویری ایبلز ہوں وہ لوکل ویری ایبل ہوں ۔ گلوبل ویری ایبل سے آپ جتنا دور ہوں گے آپ کا پروگرام اتنا ہی آسان، ریڈا یبل ہوگا، تو کوشش کریں کہ گلوبل ویری ایبلز سے دور رہیں اور اپنے لوکل ویری ایبلز کے اندر رہتے ہوئے وار کا کی ورڈ یوز کرتے ہوئے زیادہ ویری ایبلز کو فنکشن کے اندر ہی ڈیفائن کریں لوکل ویری ایبلز آر آلویز پریفرڈ اوور گلوبل ونز۔

تو یہ تو دو موٹی موٹی ڈیزائن گائیڈ لائنز تھی ۔

اب کوڈنگ کے بارے میں میں کچھ چیزیں بتانا چاہوں گا ایک تو یہ کہ آپ کو پتہ ہے جاوا سکرپٹ میں یہ جوہر سٹیٹ منٹ کے اینڈ میں ہم سیمی کولن لگا دیتے ہیں یہ اتنا ضروری نہیں  ہے لیکن میں ریکمنڈ کروں گا آپ ہمیشہ اسے یوز کریں اس سے ریڈ ایبلٹی بڑھتی ہے اور بعض عجیب و غریب سچویشنز  ایسی ہوتی ہیں پروگرامز کے اندر جہاں پر سیمی کولن کا تھوڑا سا فائدہ بھی ہو جاتا ہے۔ سو میک اٹ آ ہیبٹ۔ جب بھی آپ یہ والا کوڈ، جاوا سکرپٹ والا کوڈ لکھیں تو آلویز ٹرمینیٹ آل دا سٹیٹمنٹس ود آ سیمی کولن ۔  دوسری چیز جس سے آپ ریڈ ایبیلٹی بڑھا سکتے ہیں وہ ایک انڈیٹیشن کہ جب بھی بلاک ہو انڈویویژول سا تو انڈینٹ کر کے لکھیں ۔اف سٹیٹمنٹ آپ نے لکھنی ہے اس کے بعد جو بلاک سٹیٹمنٹ لکھنی ہے اس کو تھوڑا انڈینٹ کریں۔ دو سے پانچ سپیس ، بعض  لوگ دو کرتے ہیں تین کرتے ہیں چار کرتے ہیں پانچ کرتے ہیں ۔ اس کو انڈینٹ کر کے لکھیں ۔ فار لوپ ہے اس کو بھی ایسا۔ اس طرح کیا ہوتا ہے ؟ یہ چھوٹے چھوٹے بلاکس جو انڈینٹ ہوتے ہیں ان کو پڑھنا آسان ہوتا ہے ۔ اور ایک اور بڑا فائدہ یہ ہوتا ہے کہ وہ جو اف سٹیٹمنٹ ہے یا وہ جو لوپ ہے اس کی کرلی بیس ہے اس کو میچ کرنا بھی آسان ہو تا ہے ۔ اوپر اور نیچے والی۔ آئڈنٹی فائرز کا جہاں تک تعلق ہے ۔ اس میں جو کیمل بیک سکیم جو ہم یوز کرتے آرہے ہیں میں وہی ریکمنڈ کروں گا ، یعنی جب بھی آپ دو ورڈز پر مشتمل کوئی نام رکھیں تو دوسرا جو ورڈ ہے اس کا پہلا لیٹر آپ کیپٹل کر دیں اس کو کیمل بیک سکیم کہتے ہیں۔ اور یہ جو آپ نام چوز کریں تو دے شوڈ بھی ڈسکرپٹیو۔ ان سے پتہ لگنا چاہئے کہ اندر کیا ہے ۔اگر آپ بہت سارے نیمز اکٹھے کر رہے ہیں اور ایک اررے میں ڈال رہے ہیں تو اس کا نام نیمز ہی ہونا چاہیئے۔ اگر لوگوں کی ہائیٹس اس میں ڈال رہے ہیں تو اس میں لوگوں کی ہائٹس ہی ہونی چاہئیں۔ ویٹس ڈال رہیے ہیں تو اس کا نام ویٹس ہی ہونا چاہئے۔ اور بعض لوگ اتنے پارٹیکلر ہوتے ہیں ناموں کے بارے میں کہ وہ لمبے سے لمبے نام لکھتے چلے جاتے ہیں۔ ایسا نہیں کرنا چاہیئے۔ یہ نام جو ہیں کنسائز ہونا چاہئیں۔ اگر آپ پچاس کیریکٹر ایک نام یوز کر رہے ہیں ہو سکتا ہے اس سے کو کوڈ کو انڈرسٹینڈ کرنا مشکل ہو لیکن وہی وہ اتنے پچاس کیریکٹرز کون پڑھے گا اس کو ٹایپ کون کرے گا سو ایسا نہ کریں زیادہ اتنے زیادہ بھی کیریکٹرز نہیں ہوتے ہیں ۔ عموماً آپ کے ویری ایبل نام جو ہیں ان کے کیریکٹرز دس بارہ سے زیادہ نہیں ہونے چاہئیں۔

جہاں تک ویری ایبلز کے آئی ڈنٹی فائیرز کی بات ہے تو زیادہ تر لوگ وہ چوز کرتے ہیں جو ناؤنز پر مشتمل ہوتے ہیں اور جہاں تک فنکشنز کے آئی ڈینٹی فائرز کا تعلق ہے وہ عموماً وربز پر مشتمل ہوتے ہیں ۔ مثلاً یہ کہ گٹ ڈیٹا یا پھر سارٹ دس اور وٹ ایور۔

تو ویری ایبلز ناؤنز، فنکشنز وربز ، اور آخر میں یہ آخری کوڈنگ گائیڈ لائن میں آپ کو بتانا چاہوں گا وہ یہ کہ کمنٹس جو ہیں دے آر کوائٹ انٹرسٹنگ۔ ان سے بہت فائدہ اٹھایا جا سکتا ہے تو اپنے کوڈ میں کمنٹس لبرلی یوز کریں ۔جو ہم نے کافی عرصہ پہلے کہا تھا کہ کمنٹس لٹ دا کوڈ سپیک فار اٹ سیلف، کمنٹس کا فائدہ ہوتا ہے کہ اس کے بعد کوڈ کسی کو سمجھانا نہیں پڑتا کہ اب میں یہ کر رہا ہوں یا وہ کر رہا ہوں بلکہ سب کچھ کوڈ کے اندر لکھا ہوتا ہے ۔ پڑھنے والا کوڈ پڑھے اور اس کے بعد کمنٹ پڑھے اور پڑھنا والا اس قابل ہو جائے کہ اس کو کوڈ کے بارے میں ساری باتیں معلوم ہو جائیں ۔ا یک زمانے میں میرا خیال تھا کہ کمنٹس بڑی اچھی چیز ہے ، تو میں شروع میں بہت سارے کمنٹس لکھتا تھا ڈسکرائب کرتا تھا کہ نیچے کیا کچھ ہونا ہے اس کے بعد میں کمنٹس دیکھتا تھا سارے کے سارے کمنٹس لکھ دیتا تھا پھر اس کے بعد میں کوڈ ایڈ کرنا شروع کر دیتا تھا یعنی پہلے میں کمنٹس کے ذریعے کوڈ لکھتا تھا، انگریزی میں کوڈ لکھتا تھا اس کے بعد ایکچوئیل جو سنٹکیسٹ ہے اس میں کوڈ لکھتا تھا۔ اور وہ بڑے مزے دار پروگرام ہوتے تھے۔ لیکن بعد میں میرا آئیڈیا تھوڑا سا چینج ہو گیا مجھے لگا یہ کہ میں کمنٹس کو ایک بیساکھی کی طرح یوز کر رہا ہوں کہ ایک اچھا کوڈ لکھنے کی بجائے میں کمنٹس کی مدد سے لوگوں کو اپنا کوڈ سمجھانے کی کوشش کررہا ہوں ۔ تو میرا خیال ہے آئی ایم ناٹ شیور اباؤٹ دس، کہ بہت اچھے جو کوڈرز ہیں وہ اتنے زیادہ کمنٹس اپنے کوڈز میں نہیں ڈالتے ۔ ان کا کوڈ ہی کچھ ایسا ہوتا ہے کہ اس کو سمجھننے کے لئے آپ کو کمنٹس کی زیادہ ضرورت نہیں ہوتی ۔ شروع میں آپ ضرور لکھیں۔ شروع میں آپ یہ ضرور لکھیں کہ جو کوڈ آپ لکھنے جا رہے ہیں اس میں کیا چیز موجود ہے ، یہ دونوں سٹریٹجیز میں موجود ہے لیکن اس کے بعد تھوڑے تھوڑے کمنٹس لکھے جاتے ہین اس کے معاملے میںرا آئیڈیا اب چینج ہوتا جا رہا ہے میرا خیال ہے کہ کوڈ ہی کچھ ایسا ہونا چاہئے کہ کمنٹس کی ضرورت کم سے کم پڑے مشکل کام ہے ویسے یہ ۔ پہلے والی چیز کرنا نسبتاً آسان ہے ۔

تو جناب ڈیزائن اور کوڈ کی گائیڈ لائنز ہم نے آپ نے گوش گزار کر دیں ۔ اب ذرا بات کرتے ہیں ایک چھوٹے سے پروگرام کی جو ہم لکھنا چاہ رہے اور وہ کون کون سے سٹیپس ہیں جن کو فالو کر کے وہ پروگرام جو ہے وہ اچھا ڈیویلپ ہو گا یعنی اب شارٹ پروگرامز کو لکھنے کے لئے جو گائیڈ لائنز ہوتی ہیں ان کا ہم آپ سے تذکرہ کرنے جارہے ہیں۔، شارٹ کی ڈیفینیشن یہاں پر کیا۔ شارٹ کی ڈیفینیشن یہاں پہ یہ ہے کہ ایک سے ڈیڑھ صحفے پر اگر یہ پروگرام آجاتا ہے تو اسے شارٹ کہیں گے۔ مزے کی بات ہے کہ اگر آپ کو شارٹ پروگرام اچھے طریقے سے لکھنے آجائیں تو آُپ بڑے پروگرام اچھے طریقے سے لکھ سکتے ہیں کیونکہ بڑے پروگرام جو ہیں وہ کیا ہوتے ہیں ؟ دے آر بیسکلی آ کلیکشن آف شارٹ پروگرامز۔

ٹھیک ہے جناب ۔ پہلا سٹٰیپ۔گائیڈ لائنز فار ڈیویلپنگ شارٹ پروگرامز۔ اس کا پہلا سٹیپ یہ ہے کہ گائیڈ لائنز جو آپ کو دی گئی ہیں اس کو پڑھیں اور اس کو انڈرسٹینڈ کریں ۔ بعض اوقات جو پرابلم آپ کی دی جاتی ہے وہ زبانی دی جاتی ہے اس سے ایسے ہی کام کبھی شروع نہ کریں ۔اگر آپ کو لکھ کر نہیں دیا جاتا تو خود لکھیں۔ خود لکھ کر انہیں دکھائیں کہ یہ آپ چاہتے اور اگر آپ کو اوکے کرتے ہیں تو پھر کام سٹارٹ کریں سو آلویز یو ہیو ٹو سٹارٹ ود رائٹنگ ۔

اسے لکھیں اور اسے سمجھٰیں اس کے بعد آپ نے اپنے آپ سے ایک سوال پوچھنا ہے کہ ڈو آئی ہیو آل دا ریکوائرڈ انفارمیشن ؟

ڈو آئی ہیو آل دا ریکوائرڈ ڈیٹا ؟

یعنی جو پرابلم ابھی میں نے لکھا ہے اس کے لئے جن جن چیزوں اور معلومات کی ضرورت ہے وہ سب ہیں میرے پاس ؟

تو اگر آپ کا جواب نفی میں ہے ، تو اس کے بارے میں انفارمیشن لیں اور کسمٹر سے انفارمیشن لے کر کام شروع کریں ، بعض اوقات پرابلم دینے والے کے پاس بھی وہ جواب نہیں ہوتا تو اس کا یہ مطلب نہیں کہ آپ کام چھوڑ کر بیٹھ جائیں ہوتا یہ ہے کہ آپ کچھ ازمپشنز کے بارے میں سوچتے ہیں ۔ آپ کچھ ویلیوز کے بارے میں سوچیں۔ اور جب بھی آپ ایسا کچھ سوچیں انہیں آپ پرابلم سٹیٹمنٹ میں لکھ دیں ۔ آپ جو کوڈ ہے اس کے اندر بھی کمنٹس کی صورت میں لکھ دیں کہ جناب یہ کرتے کرتے میں نے یہ ازمپشنز رکھی ہیں۔ مثلاً تھوڑی دیر پہلے جو ببل سارٹ کا کوڈ میں نے آپ کو دکھایاتھا جس میں ہم ببل سارٹ کر رہے اور جس کی آسان فارم ہم نے آپ کو دی تھی۔ اس میں آپ کو یاد ہو گا کہ جو آؤٹر لک تھا وہ صرف ایک لاکھ دفعہ جاتا تھا  وہ جو ایک لاکھ دفعہ جاتا تھا اس کی وجہ سے کجھ لمیٹیشنز آ جاتی ہیں یہ کتنے نمبرز کو سارٹ کر سکتا ہے ۔ تو اس میں لکھ دیں کہ یہ جو کوٹ میں نے لکھا ہے یہ صرف اتنے نمبرز کو سارٹ کر سکتا ہے اور اگر اس سے زیادہ نمبرز کو سارٹ کرنا ہے تو فلاں جگہ پر جا کر اس کو تبدیل کر لیں ۔ سو رائٹ اٹ ڈاؤن رائٹ آل یور ازمپشنز ڈاؤن۔

یہی جو پہلے دو سٹیپس میں نے آپ کو بتائے کہ پرابلم کو پڑھنا، اس کو انڈرسٹیڈ کرنا اور اس کے بعد سوال پوچھنا کہ سارے کا سارا ڈیٹا ہے کہاں ؟ اس کی انفارمیشن ہمارے پاس ہے یا نہیں ۔

یہ ایک چھوٹی سی ایگزیمپل جو آپ نے کی ہوئی  ہے اس کے بارے میں ہم سوچتے ہیں کہ یہاں پر اس کو کیسے کریں گے۔ مثال بہت سادہ سی ہے کہ ایک ویب پیج آپ نے ڈیزائن کرنا ہے جس میں آپ کو ایک آرڈر ٹیکنگ فارم دکھانا ہے ۔ اس آرڈر ٹیکنگ فارم میں کچھ آئٹمز ہیں ، ان کی مقدار ہے اور ان  کی پرائسز بھی ہیں تو مقدار کو پرائسز سے ملٹی پلائی کر کے آپ ٹوٹل کاسٹ فائنڈ کرتے ہیں اور اس کے بعد سارے کے سارے ٹوٹل کاسٹ کو ایڈ کر کے آپ ایک ٹوٹل فائنڈ کرتے ہیں اس میں آپ جی ایس ٹی ایڈ کرتےہیں اس کے بعد آپ کو گرینڈ ٹوٹل مل جاتا ہے ۔

تو اگر آپ نے یہ پرابلم کرنی ہے تو اس کے لئے آپ کو کون کون سی انفارمیشن کی ضرورت ہے ؟

سب سے پہلے تو یہ کہ آئٹم کون کون سے ؟ اور ان کی انڈیویژیول پرائسس کیا ہیں ؟ ایک چیز اور دوسرا یہ کہ جی ایس ٹی کیا ہے اورآج کل کتنے فیصد ہے ؟ پندرہ فیصد ہے بیس یا دس فیصد ہے ؟

کیونکہ دیکھئے وہ جو آئٹمز ہیں نا ان کے نام آپ کو کسٹمر دے گا۔ ان کی یونٹ پرائس آپ کو کسٹمر دے گا جی ایس ٹی کی ویلیو آپ کو کسٹمر دےگا لیکن یہ ٹوٹل بل کتنا بننا ہے یہ تو جب یہ ویب بن جائے گا اور جب اس میں ویلیوز ایڈ کریں گے تو ہی معلوم ہو گا تو اس کے معلوم کرنے کی ضرورت نہیں ہے آپ کو آئٹمز کے نام چاہئیں۔ آپ کو اس کی انفرادی قیمیتیں چاہیں۔ آپ کی جی ایس ٹی چاہئیں۔ اگر آپ کا کسٹمر آپ کو ان کا جواب دے دیتا ہے ، تو پھر اب آپ تیسرے سٹیپ کے لئے تیار ہیں۔ لیکن اگر ان کا جواب نہیں ملتا، آپ تیسرے سٹیپ پر نہیں جا سکتے تو یہکہ پرابلم پکڑیں۔ اس کو پڑھیں اس کے بارے میں تمام انفارمیشن چائیے وہ آپ جو حاصل کریں یا اس کو ایزیوم کریں اس کو انڈرسٹینڈ کریں ۔

اس کے بعد تیسرا سٹیپ کیا ہے ، تیسرا سٹیپ  ہے ڈیزائن کا۔ یہ جو کوڈ میں نے آپ کو دکھایا ہے اس میں کوئی اتنا لمبا چوڑا ڈیزائن تو ہے نہیں لیکن ایک چیز ضرور ہے ۔ ایک فارم نے ایک ویب پیج پر ڈسپلے ہونا ہے تو آپ کو چاہئے یہ کہ اس فارم کا ایک چھوٹا سا سکیچ بنا کراس میں جتنی بھی چیزیں ہیں اس میں جتنی بھی جگہ پر ڈیٹا ڈسپلے اور ان پٹ ہونا ہے اور بٹن وغیرہ وہ سارا کچھ ایک سکیچ بنا کر کلائنٹ کو دکھا دیں ۔

تو یہ بڑی سادی سی پرابلم ہے اس کا حل بھی بڑا سادہ سا ہے جو کوڈ میں نے بنایا یے وہ میں آپ کو دکھا رہا ہوں۔ اس میں آپ دیکھ رہے ہیں کہ صرف تین آئٹمز ہیں تینوں کی کوانٹٹیز ہیں وہ اینڈ یوزر جو ہے وہ ڈیفائن کر سکتا ہے ، یہاں پر نظر تو ایک آ رہی ہے لیکن وہ اس کو تبدیل کر سکتا ہے، یہاں  پر جو یونٹ کاسٹ ہے وہ فکس ہے اور جو ٹوٹل کاسٹ ہے وہ ہر آئٹم اور یونٹ کی ، وہ نظر تو آرہی ہے لیکن یہ فیلڈ کلک ایبل نہیں ہے اور یہاں پر یوزر جو ہے وہ اس میں کوئی تبدیلی نہیں کر سکتا ۔اس کو ہم نے کسی طریقے سے یوزر کو روکا ہوا ہے۔

وہ اس کے اندر کچھ نہیں کر سکتا سو تین فیلڈز ہیں جس میں یوزر کچھ انٹر کر سکتا ہے اور اس کے علاوہ ایک بٹن ہے ، تو تین فیلڈز ہیں اور ایک بٹن یے یعنی یہاں سے ساری کی ساری آپ کی انٹر ایکٹیویٹی آتی ہےتو میں نے یہ ایک پیج ڈیویلپ کرنا تھا اس پر ایک فارم دکھانا تھا میں نے پنسل سے ایک سکیچ ڈرا کر کے کسٹمر کو دکھا دیا اس کے بعد اگلا سٹیپ۔

نیکسٹ اینڈ دا فورتھ سٹیپ ۔

چوتھا سٹیپ جو ہے یہ بالکل نیا ہے اس سے پہلے ہم نے کبھی اس کے بارے میں آپ سے بات نہیں کی۔ یہ چوتھا سٹیپ ہے رائٹ ٹیسٹ کیسز۔ جو آپ نے ڈیزائن کر لیا ابھی امپلیمنٹ کرنا شروع نہیں کیا آپ نے سوچنا یہ ہے کہ جب یہ امپلیمنٹ ہو جائے گا جب یہ بن جائے گا تو اسے میں ٹیسٹ کیسے کروں گا ؟ یہ ٹھیک ہے یا نہیں ؟

تو ٹیسٹ کیسز کس بلا کا نام ہے۔ آپ مختلف سنیریوز دیکھ لیتے ہیں۔ آپ مختلف ممکنات دیکھ لیتے ہیں کہ جہاں جہاں کلائنٹ کو اجازت ہے ان پٹ کرنے کی میں ان پٹ کر کے دیکھوں گا کہ کام صحیح ہو رہا ہے یا نہیں ہو رہا مثال کے طور پر کسی آئٹم کی تعداد پازیٹیو  ہی ہو گی، نیگیٹیو تو نہیں ہو سکتی ، زیرو ہو سکتی ہے لیکن نیگیٹیو تو نہیں ہو سکتی نا، تو میں ایک نیگیٹیو ویلیو ڈال کر چیک کروں گا کہ آیا میرا پروگرام اس کے ساتھ کیا کرتا ہے ، فارم کو اس پر کیا کرنا چاہئے، فارم کو ایسی حالت میں ایرر دینا چاہیئے اسے کسٹمر کو کہنا چاہئے کہ دوبارہ ڈیٹا انٹر کرے۔نیگیٹیو ویلیوز آر ناٹ الاؤڈ۔

دوسری چیز یہ کہ ہو سکتا ہے یہاں پر یہ حد ہو کہ کل بل کتنا بڑا ہو سکتا ہے۔  عام طور پر دواؤں کے بل پچاس ہزار ، پچاس لاکھ اتنے بڑے تونہیں ہوا کرتے نا، تو ہم تھوڑا سا ایک سینیٹی چیک ڈال دیتے ہیں کہ یہ نمبر آف آئٹمز جو ہیں ان کی جتنی بھی مقدار ہے اس پر کوئی لمٹ ہو ۔ یہ نہ ہو کہ میں وہاں سے ایک چھوٹی سی اینٹی بائیوٹک کی ہزار شیشیاں خریدنے کی کوشش کروں ۔ عموماً ہو گا یہ کہ وہ غلطی سے ہزار انٹر ہوا ہو گا ، اصل میں کسٹمر کی نیت یہ نہیں ہو گی۔ تو اس پر بھی میں تھوڑے سے چیکس ڈال سکتا ہوں اور ان کو چیک کرنے لئے لئے بھی میںں ایک ٹیسٹ کیس بناؤں گا کہ جب یہ پروگرام بن جائے گا تو میں اس میں کسی ایک آئٹم میں ہزار آئٹم ایڈ کروں گا تو ہو گا یہ کہ مجھے ایک ایرر ملنا چاہیے کہ ہزار الاؤڈ نہیں ہے ۔

اس کے علاوہ میں یہ بھی کروں گا کہ جیسے میں آپ کو بعض فیلڈز دکھائے تھبے کہ جہاں پر ٹوٹل کاسٹ ڈسپلے ہونی ہے وہ ایڈیٹ ایبل نہیں ہونی چاہئے ، یعنی آپ کا جو اینڈ یوزر ہے وہ اس میں چیزیں ایڈ نہ کر سکے تو ایک ٹیسٹ کیس میں یہ بھی  بناؤں گا کہ ٹوٹل کاسٹ جو ہے اس میں ایڈیٹ کرنے کی کوشش کروں گا ۔ اور دیکھوں گا کیا ہوتا ہے ، ہونا یہ چاہئے کہ میں ان چینجز کو نہیں کر سکوں گا ۔ تو ٹیسٹ کیس بنانے کا مقصد یہ ہوتا ہے کہ میں ایسے بعض ممکنات اپنے ہاس لکھ کے رکھ لوں گا کہ جب یہ پروگرام بن جائے تو میں ان کو چیک کر لوں گا کہ پروگرام صحیح کام کر رہا ہے یا نہیں۔

تو جناب یہ تھا چوتھا سٹیپ اور اب ہم بڑھیں گے پانچویں سٹیپ کی جانب۔

اگلاسٹیپ جو ہے وہ یہ ہے کہ ہم نے کوڈ لکھنا ہے ۔ کوڈ کیسے لکھنا ہے کوڈ کمپیوٹر پر لکھتے ہیں۔ نہیں، کوڈ آپ نے کاغذ پنسل کے ذریعے لکھنا ہے ، یعنی آپ کاغذ پکڑیں اور شروع ہو جائیں ، ایک ربر اپنے پاس رکھیں کہ جب کوئی غلطی ہو جائے تو اسے ٹھیک کریں ،جب یہ سارا کا سارا کام ہو جائے تو اب ہم نیکسٹ سٹیپ کی جانب بڑھیں گے۔ اگلا قدم ہینڈ چیکنگ کا ہے ۔ یعنی آپ نے کوڈ لکھ تو لیا، اسے پڑھ بھی لیا اور مختلف چیکنگز بھی کر لیں ۔ اب آپ اس میں مختلف ویری ایبلز میں ایک دو ویلیوز ڈالنی ہے اور پھر اس کوڈ کو فالو کرنا کہ ان ویلیوز کے ساتھ کیا ہوتا ہے آیا وہی ریزلٹ آتا ہے جو آنا چاہئے، اس طرح ہمیں بعض اوقات ہو سکتا ہے اپنے کوڈ میں کچھ فالٹس بھی نظر آ جائیں یہ بھی ہو سکتا ہے کہ یہ آپ نے زیادہ دفعہ نہیں کرنا، کیوں کہ آپ اسے ہاتھ سے کر رہے ہیں یہ سلو پراسیس ہے لیکن یہ میس فری پراسیس ہے اس طرح آپ کو اپنے کوڈ کو سمجھنے میں خاصی مدد ملے گی ، اس طرح آپ نے کوڈ کو ہینڈ چیک کر لیا اب آپ کا کوڈ تیار ہے ۔ اب آپ یہ کریں کہ اس کوڈ کو کمپیوٹر کے اندر ٹائپ کر دیں۔ ٹائپ کرنے کے بعد اس کو رن کر کے دیکھیں ہو سکتا ہے کہ اس کے اندر ایک آدھا سائنٹیکسٹ ایرر ہو اس کو ختم کریں اور جب آپ مطمئن ہو جائیں تو پھر اب وقت ہے کہ آپ ٹیسٹنگ کریں۔ تو وہ جو آپ نے چوتھے سٹیپ میں ٹیسٹ کیسز بنائے تھے اب کو رن کرنے کا وقت آ گیا ہے ۔ لہذا ان ٹیسٹ کیسز کی مدد سے آپ اس کوڈ کو ٹیسٹ کر سکتے ہیں۔ کیا یہ اسی طرح کام کر رہا ہے جس طرح اسے کرنا چاہئے۔ اس طرح ہو سکتا ہے آپ کو ایک دو اور فالٹس کا بھی پتہ لگے آپ ان فالٹس کو فکس کرنے کے بعد دوبارہ سارے کے سارے ٹیسٹ کیسز کو رن کرتے ہیں اور دیکھتے ہیں کہ مزید تو کوئی فالٹ نہیں آتی ، اور اگر نہیں آتی تو پھر آپ کہہ سکتے ہیں کہ ٹھیک ہے اب حالات خاصے بہتر ہو گئے ہیں ۔ تو جناب یہ نواں سٹیپ تھا ایررز کو فکس کرنے کا ، اب آپ کا کوڈ تیار ہے آپ کا کام ختم ہو جکا ہے اب آپ وہ پروگرام اپنے کلائنٹ کو پیش کر دیتے ہیں۔

میں کہنا یہاں پر یہ چاہتا ہوں کہ اگر آپ کو ایک چھوٹا پروجیکٹ ملے ایک چھوٹا سا پروگرام لکھنے کو ملے ، ایک ڈیڑھ صفحے کا، زیادہ نہیں اس میں بھی آپ کو ان سٹیپس کو فالو کرنے کی ضرورت ہے۔ ان نو سٹیپس کو فالو کریں ، یہ طریقہ کار اگر آپ فالو کریں گے آُپ دیکھیں گے آپ کا کوڈ عموماً اچھا بنے گا اس کو ڈیویلپ کرنے میں عموماً آپ کا وقت کم لگے گا۔ بعض لوگ ایسا کرتے ہیں کہ ان کو ایک کام ملتا ہے وہ زبانی سنتے ہیں کہ اچھا یہ کرنا ہے اور ٹائپنگ شروع کر دیتے ہیں ۔ آدھے گھنٹے میں ان کا پروگرام تیار ہو جاتا ہے لیکن وہ جب کلائنٹ کے پاس جاتاہے تو وہاں پر پھر مسائل ہوتے ہیں وہ دوبارہ سے واپس آتا ہے یہ آنے جانے میں ہو سکتا ہے آپ کو ایک ہفتہ لگ جائے لیکن اگر آپ اس کو کسی اچھے پراسیس اور میتھاڈالوجی کے مطابق کریں تو ہو سکتا ہے کہ آپ کا سارے کا سارا ایک دن میں ہی ہو جائے۔ تو جناب یہ نو سٹیپس ایسے ہیں کہ جن کی مدد سے چھوٹے پروگرامز کو ڈیویلیپ کرنا آسان ہے ۔

ایک اور چیز جس کے ذریعے سے آپ اپنے پروگرامز کر بہتر بنا سکتے ہیں ان کو کریکٹ اور ریڈ ایبل بنا سکتے ہیں وہ ہے ڈیزائن اور کوڈ ریویو۔

یہ میرے خیال میں سب سے ایفی شنٹ طریقہ ہے اپنے پروگرام کی کوالٹی کو بہترا بنانے کا اس کی کریکٹنس کو بہتر کرنے کا میرے خیال میں اس سے بہتر طریقہ شاید نہ ہو۔ ہوتا یہ ہے کہ میں جب خود کوئی چیز ڈیزائن کرتا ہوں خود کچھ کوڈ لکھتا ہوں تو اس میں بعض چیزیں ایسی ہوتی ہیں جو ہوتی کچھ ہیں اور مجھے نظر کچھ آ رہی ہوتی ہے کیونکہ ہم انسان ہیں ہم بعض اوقات ایسی غلطیاں کرتے ہیں کہ ہم یہ سمجھتے ہیں وہ کچھ چیزیں موجود ہیں لیکن اصل میں وہ وہاں پر ہوتی نہیں ہیں۔ تو ایسے مسائل سے نمٹنے کے لئے آپ کوڈ ریویوز اور ڈیزائن ریویوز کا سہارا لیتے ہیں آپ ایسے لوگوں کو اپنا ڈیزائن دکھاتے ہیں ایسے لوگوں کو اپنا کوڈ دکھاتے ہیں جو اس کی ڈیویلپمنٹ میں شامل نہ ہوں تو ان کے ذہن میں وہ باتیں نہیں ہوں گی جو آپ کے ذہن میں ہیں تو ان کو وہ فالٹس فوراً سے نظر آجائیں گی جو آپ کو نظر نہیں آ رہی ہوتیں ۔

کوڈ اینڈ ڈیزائن ریویو کے دو طریقے مروج ہیں۔ ایک تو یہ کہ آپ اپنے کوڈ اور ڈیزائن کسی اور کو پکڑا دیتے ہیں کہ بھائی جان یہ کر دیں ذرا۔ دوسرا طریقہ واک تھرو کا ہے اس میں آپ یہ کرتے ہیں کہ آپ کچھ لوگوں کو کہتے ہیں کہ آپ آئیں میرے پاس بیٹھیں (ایک دو تین یا اس سے زیادہ اشخاص ہو سکتے ہیں) ان کے سامنے پھر آپ پریزنٹ کرتے ہیں جو آپ نے تیار کیا ہے انہیں پھر آپ اپنے ڈیزائن کو دکھاتے ہیں ، یہ اب میں یہ کر رہا ہوں ، یہ سٹیپس لے رہا ہوں ، یہ ایکشن اور ان پٹ دے رہا ہے جس کا یہ ریزلٹ لینا چاہ رہا ہوں ۔ یہ دو طریقے ہیں کہ سارے کا سارا سامان انہیں دے دیں کہ وہ خود ہی کرتے رہیں اور دوسرا طریقہ یہ ہے کہ آپ انہیں پورے ڈیزائن کےبارے میں واک تھرو کروائیں اور اوور ویو دیں۔

ان دونوں میں کچھ فائدے اور نقصانات ہیں ، میرے خیال میں ان مین سے پہلا طریقہ جو ہے اگر وہ صحیح طریقے سے کیا جائے تو اس سے بہتر طریقہ نہیں ہو سکتا لیکن اف ڈن ویل والا مسئلہ جو ہے وہ عموماً صحیح طریقے سے ہوتا نہیں ہے ، عموماً آپ کسی کو اپنا سارا سامان دیتے ہیں وہ رکھ کے بھول جاتے ہیں اور ڈیڈ لائن سے تھوڑا سا پہلے دیکھتے ہیں اور جلدی جلدہ میں ریویو کرکے آپ کو بتا دیتے ہیں۔یہ  جو ساتھ بٹھا کر کوڈ ریویو والا جو طریقہ ہے میرے خیال یہ زیادہ بہتر ہے کیونکہ ایک تو اس میں وقت کم لگتا ہے دوسرا یہ کہ اس دوران جب آپ لوگوں کو واک تھرو کروا رہے ہوتے ہیں اپنے پراجیکٹ کے بارے میں ان کی پوری توجہ آپ کی جانب ہوتی ہے۔ تو میرے خیال میں اگر مجھے چوائس ملے تو میں دوسرا میتھڈ کوڈ اور ڈیزائن ریویو کے لئے استعمال کروں گا ۔ پہلے پر پریکٹیکلی اس طرح اچھے طریقے سے کام نہیں کرتا ۔

تو جناب وہ جو نو سٹیپس ہیں انہیں فالو کریں اور اس کے علاوہ کوڈ ریویو کروائیں اپنے پییرز کے ذریعے، اپنے برابر کے جو لوگ ہیں ان کو دکھائیں جن کا نالج کا لیول آپ جیسا ہے ان کو دکھائیں اور ان کے ویویز حاصل کریں ، اس سے جو آپ کا پروگرام ہو گا اس میں میرے خیال میں جو نمبر آف ڈیفیکٹس ہیں وہ کم سے کم ہو جائیں ۔ اب میں آپ سے ایک سوال پوچھنا چاہتا ہوں۔ کیا ایسا ممکن ہے کہ ایک ایسا پروگرام لکھا جائے جس میں کوئی ڈیفیکٹس یا نقص نہ ہوں ؟ کیا ایسی سافٹ وئیر بنانا ممکن ہے جس میں کوئی بگ یا ایرر نہ ہو؟ اس کا جواب سوچیں میں آپ سے ایک اور سوال پوچھتا ہوں، کیا ہمیں کوشش کرنا چاہئے ایسا پروگرام بنانے کی جس میں کوئی ڈیفیکٹس نہ ہوں ؟ تو اس کے بارے میں سوچیں اور ہمیں اس کا جواب ذرا میسج بورڈ پر لکھیں ۔

اور میں چھوٹے چھوٹے پروگرام کی بات نہیں کر رہا ، میں ذرا لارج سکیل پروگرامز کی بات کر رہا ہوں۔ اس کے بارے میں سوچیں میرا جواب بائی دا وے ہے نہیں، ایسا ممکن نہیں ہے کہ ایسا پروگرام لکھا جائے جو بگ فری ہو اور جس میں کوئی نقص نہ ہو ۔ کیونکہ جوں جوں آپ بگز کی تعداد کسی پروگرام میں سے کم کرتے جاتے ہیں میرے خیال سے اس کی کاسٹ بڑھتی جاتی ہے اور اس کو ڈیویلپ کرنے میں وقت زیادہ لگنا شروع ہو جاتا ہے ، تو اکثر ہوں ہوتا ہے کہ ایسے پروگرام لکھے جاتے ہیں کہ اس میں بگز ہوتے ہیں اٹس ویل کنون کہ اس میں بگز ہیں ، لیکن یہ ضرور ہے کہ وہ بگز ایسے نہ ہوں کے جس سے بالکل ہی پروگرام کا بیڑہ غرق ہو جائے یعنی ایسا بگ نہ ہو کہ جیسا مثلاً سپیس شٹل کا جو ڈرائیں کرنے والا پروگرام ہے اس میں بگ ڈالا اور وہ کام ہی نہ کرے ۔ لہذا خطرناک یا کریٹیکل بگ نہیں ہونا چاہیے ۔

اور چھوٹے موٹے ڈیفیکٹس تو ہر پروگرام میں ہوتے ہیں ۔ اگر آپ بات کرتے ہیں کہ یہ بگز تلاش کیسے کئے جاتے ہیں ؟ تو اس کو بگز فائںڈ کرنے کے لئے جو طریقہ استعمال کیا جاتا ہے اس کام کو ٹیسٹنگ کہتے ہیں ۔ سو ٹیسٹنگ کے ذریعے ہم یہ فائنڈ کرتے ہیں کہ کوئی بگ تو نہیں ہے، ڈی بگنگ تھوڑی سی مختلف چیز ہے۔ ڈی بگنگ اور ٹیسٹنگ دو الگ چیزیں ہیں ۔ ڈی بگنگ جو ہے اس میں ہمیں پتہ ہوتا ہے کہ یہ بگز ہیں اور انہیں ہمیں کلئیرکرنا ہے۔ ہمارا کام ڈی بگنگ کے دوران یہ ہوتا ہے کہ ہمیں ایگزیٹ لوکیشن تلاش کرنا ہوتی ہے جہاں پر ایرر یا فالٹ ایگسٹ کررہا ہوتا ہے۔ لہذا ٹیسٹنگ ہوتی ہے پرابلم فائنڈ کرنا، ڈی بگنگ ہوتی اس پروگرام کا اوریجن یا وجہ تلاش کرنا۔ ظاہر ہے وجہ مل جائے تو آپ اس کو حل بھی کر سکتے ہیں  ٹیسٹنگ عموماً ڈیویلپرز بھی کرتے ہیں اور کوالٹی اشورینس والے لوگ بھی کرتے ہیں ، ڈی بگنگ صرف ڈیویلپرز ہی کرتے ہیں۔

یہ ڈی فیکٹس جن کا میں بار بار تذکرہ کر رہا ہوں ان کے ایک دو اور نام بھی ہیں انہیں بگز بھی کہا جاتا ہے ان کو ایررز بھی کہا جاتا ہے اب میں آپ کو یہ بتاؤں گا کہ یہ جو بگز یا ایررز ہیں ان کو ہم کلاسیفائی کیسے کرتے ہیں ؟

تو ان میں ایک کلاسیفیکیشن آپ کے سامنے پیش کرتا ہوں ۔ اس کلاسیفکیشن میں ان بگز یا ایررز کو تین کلاسز میں ڈالا جاتا ہے یا تو سینٹکسٹ ایررز ہوتے ہیں، یا سمینٹک ایررز ہوتے ہیں یا رن ٹائم ایررز ہوتے ہیں بعض اوقات یہ رن ٹائم ایررز اور سمینٹک ایررز کو لوگ اکٹھا کر کے لاجک ایررز بھی کہہ دیتے ہیں لیکن میرے خیال میں بہتر طریقہ ان کو کلاسیفائی کرنے کا ان تین کیٹیگریز میں ڈیوائیڈ کرنا ہے ۔ سینٹیکسٹ، سمینٹک اینڈ رن ٹائم ایررز۔

سینٹیکسٹ ایررز جو ہوتے ہیں یہ سب سے آسان ایررز ہوتے ہیں جہاں تک بات کی جائے ان کو ٹھیک کرنے کے حوالے سے اور انہیں تلاش کرنے کے حوالے سے ۔ یہ اس وجہ سے ہوتے ہیں کہ جو آپ کا کوڈ ہوتا ہے یا جو لینگوئیج آپ اس کوڈ کو لکھنے کے لئے استعمال کر رہے ہوتے ہیں اس کے رولز کو کہیں نہ کہیں یہ وائولیٹ کر رہا ہوتا ہے تو عموماً آپ کا انٹرپریٹر آپ کو اس کے بارے میں آگاہ کر دیتا ہے اور ایرر کو پکڑ کر کہہ دیتا ہے کہ جناب یہ اس جگہ پر ایرر ہے میں یہاں سے آگے نہیں جا سکتا جب تک اس ایرر کو کلئیر نہیں کیا جائے گا۔  اس کی مثال ایسے دی جا سکتی ہے کہ فرض کریں کہ جیسے نظر آرہا ہے کہ اے برابر ہے ب  پلس سٹار سی یعنی یہاں پہ دو میتھیمیٹکل آپریٹر اکٹھے ہم نے لکھ دیئے ہیں جو کہ غلط ہے ۔ اس کو انٹرپریٹر فوراً پکڑ لے گا ۔ رک جائے گا کہ جناب پہلے اسے ٹھیک کرو پھر میں آگے چلوں گا۔ اس سے اگلی مثال جو ہے بعض لوگ اس کو شاید سینٹکسٹ ایرر نہ کہیں لیکن یہ قابل بحث ہے ۔ اس میں ہم یہ کہہ رہے ہیں کہ ریسیور از ایکیول ٹو ریسیور پلس 2۔ یہاں پر کیا مسئلہ ہے ؟

یہاں پر اگر آپ دوسری دفعہ جو ریسور لکھا گیا ہے اس کو کا سپیلنگ ٹھیک نہیں یعنی دوسری جانب جو ہم نے ویری ایبل کا آئڈنٹی فائر لکھا ہے اس کا سپیلنگ ٹھیک نہیں ہے ۔ بعض لوگ اسے سینٹکسٹ ایرر نہیں سمجھتے وہ اسے کچھ اور سمجھتے ہیں لیکن میں اس کو سینٹیکسٹ ایرر ہی کہوں گا ۔ لیکن ایک بات اور ہے کہ آپ کا انٹرپریٹر جو ہے وہ اسے کیچ نہیں کرے گا بلکہ اسے خود کسی نہ کسی طریقے سے کیچ کرنا پڑے گا۔

تو یہ تو سینٹیکسٹ ایررز ہوگئے اب بات کریں گے سائمنٹک ایررز کی ۔ اس میں ہوتا یہ ہے کہ آپ کوڈ لکھتے ہیں ، ایک سٹیمنٹ ہے اس کا آپ کے خیال میں کام کچھ اور ہوتا ہے لیکن وہ کرتی کچھ اور ہے۔ ڈیویلپر کے ذہن میں کچھ ہوتا لیکن اصل میں کچھ اور ہو رہا ہوتا ہے ۔ کوئی سینٹیکسٹ کی پرابلم نہیں ہے وہاں پر ، ساری چیزیں صحیح لکھی ہیں ، انٹر پریٹر کوئی چیز نہیں پکڑتا ، وہ چلتا جائے گا اس پر لیکن وہاں پر جو ہو رہا ہو گا وہ وہ ہو گا جو آپ نہیں چاہتے ۔ یہ سائمنٹک ایرر کہلاتا ہے ، یہ عموماً بہت معمول سے ہٹ کر بہت کم مواقع پر ایسا ہوتا ہے اور اس کے ایسے ریزلٹ نظر آتے ہیں ۔ لیکن زیادہ تر جو سمینٹک ایررز میں نے دیکھے ہیں وہ پلس اور گریٹر دن کی وجہ سے ہوتے ہیں ۔ اکثر اوقات ایسا ہوتا کہ ہم پلس سائن کو ایس پلس یعنی سم  کے طور پر استعمال کرنا چاہتے ہیں لیکن بعض اوقات ہوتا ایسا ہے کہ جو اس کے اردگرد چیزیں ہوتی یا نمبرز ہوتے ہیں سٹرنگز ہوتا ہے تو یہ ٹل گیٹٰ نیشن کا آپریٹر بن جاتا ہے جس سے گڑ بڑ ہوجاتی ہے۔ یعنی ہم نے پلس کا سائن لکھا یہ سوچ کر کے سم فنکشن ہو گا لیکن ہوتا یہ ہے کہ وہاں پر کری کیلیکیشن ہورہی ہوتی ہے ۔ تو ہم نے جو سوچا تھا وہ نہیں ہو رہا اور انٹر پریٹر جو ہے وہ اس پرابلم کو کیچ نہیں کر سکتا ۔ اس کا حل یہ ہے کہ جب بھی آپ کو ایسا کچھ کنفیوژن والی صورت ہو تو اس میں پارس ہنٹ یار پارس فلوٹ کر کے اس نمبر کو باقی نمبر میں کنورٹ کر دیں اس سے یہ گڑ بڑ نہیں ہو گی ۔ اس طرح پلس کے اردگرد جو چیزیں ہیں ان پر پارس ہنٹ یا پارس فلوٹ لگا دیں اس سے حالات ذرا بہتر ہو جائیں یو ول نو وچ یو وانٹ۔

رن ٹائم ایرر کی اگر ہم بات کریں یہ انٹرسٹنگ ہیں ، ان آ سینس کہ پروگرام آپ کا چل جاتا ہے لیکن بیچ میں کہیں یہ رک جاتا ہے ، یعنی پروگرام رن کرتے ہوئے بیچ میں کہیں رک جاتا ہے ۔اس میں مثال کچھ ایسے ہے کہ آپ کوئی ایسے ویری ایبلز کی بات وہاں پر شروع کر دیتے ہیں جو موجود ہی نہیں ، جیسے میں بات کی تھی کہ ریسیور کے غلط سپیلنگ کے ساتھ لکھ دیا تھا فرض کریں میں اس ریسیور کوپرنٹ کرنا چاہوں تو کیا آئے گا ؟

کچھ نہیں ، کیونکہ وہ ایگزسٹ ہی نہیں کرتا ہو سکتا ہے کوئی ایرر کوڈ پرنٹ ہو جائے یا خالی پرنٹ مل جائے ۔ یہ تو سادہ سا ایک رن ٹائم ایرر ہے ۔ بعض اوقات کچھ ایسا ہوتا ہے کہ میں ایک ایسا میتھڈ استعمال کر لیتا ہوں جس کے سپینلگ غلط لکھ دیتا ہوں تو رن ٹائم پر ایسا ہو گا کہ میرا انٹر پریٹر وہاں پر رک جائے گا وہ کہے گا جناب اس میتھڈ کا تو ہمیں پتہ ہی نہیں ہے ۔ یہ ایک ایسی سیچوایشن ہے کہ جو شروع میں، یعنی پروگرام کو پڑھ کر شاید اس چیز کو پکڑنا ذرا مشکل ہو اور آپ کا انٹر پریٹر بھی اس کو کیچ نہیں کرے گا لیکن جب پروگرام کو رن کریں گے اور میتھڈ کو یوز کرنے کی باری آئے گی تو پروگرام رک جائے گا۔ اسی طرح بعض اوقات یہ ہوتا ہے کہ کہ اریز جو ہیں ان کا ہم کوئی ایسا ایلیمنٹ یوز کرنے کی کوشش کرتے ہیں جو ایگزیسٹ نہ کرتا ہو۔ اس سے بھی پرابلم ہوتی ہے کیوںکہ وہ ایک ایسا ویری ایبل ہے جو موجود ہی نہیں تو ان آئیڈنٹیفائی ایبل پرابلم آ جاتی ہے اور رن ٹائم پر یہ پرابلم آپ کو نظر آجاتی ہے ۔ویسے یہ پرابلم آپ کو نظر نہیں آئے گی ۔

عموماً ایسے ایررز جو ہیں یہ پکڑے جا سکتے ہیں کہ اگر آپ کوڈ اچھے طریقے سے کریں لیکن بعض اوقات نہیں بھی پکڑے جاتے ۔

نیکسٹ جناب ہم بات کرتے ہیں ڈی بگنگ کی ۔

ڈی بگنگ کرنے کے لئے ایک بڑا انٹرسٹنگ سا بلٹ ان ٹول ہر انٹرنیٹ ایکسپلورر، براؤرز ہو اس کے اندر لکھا ہوتا ہے اور موجود ہوتا ، اس کے لئے آپ یہ کرتے ہیں کہ ٹولز میں جاتے ہیں وہاں انٹرنیٹ آپشنز کی ٹیب میں ایڈوانسڈ کی جو ٹیب ہوتی ہے اس میں آپ جاتے ہیں ۔ اور وہاں پر ڈسپلے آ نوٹیفیکیشن اباؤٹ ایوری سکرپٹ ایرر اس کو آپ چیک کر دیتے ہیں ۔ تو جب بھی وہ پرابلم آئے گی تو آپ کے پاس ایک ڈسکرپٹیو سی ونڈو آئے گی جس میں جو بھی ایرر آئے گا اس کے بارے میں آپ کو کچھ مناسب سی ڈسکرپشن لکھی ہو گی میں اس کی کچھ ایگزیمپلز آپ کو دکھاتا ہوں ۔

فرض کریں کہ میں کہیں ایک سٹرنگ استعمال کرتا ہوں اس کو ٹرمینیٹ کرنا بھول جاتا ہوں تو فوراً ہی آپ کو ایک ایرر مل جائے گا۔کہ ان ٹرمینیٹڈ سٹرنگ کانسٹنٹ۔

اسی طرح میں ایک ایسا فنکشن استعمال کرنے کی کوشش کرتا ہوں جو میں نے ڈیفائن ہی نہ کیا جیسا کہ میں نے یہاں میں چیک پلس لکھا ہوا تب کیا ایرر آئےگا، تب ایرر آئے گا آبجیکٹ ایکسپکٹڈ۔ جی یہ تو ہے ہی نہیں ۔ دس از رن ٹائم ایرر۔ پچھلے والا تو تھا سائنٹیکسٹ ایرر، پچھلے والے کی وجہ سے پروگرام چلا ہی نہیں تھا۔ یہ جو ہے اس میں پروگرام چل تو جائے گا لیکن رن ٹائم م یں ایرر آئے جائے گا کہ آبجکٹ موجود ہی نہیں ہےجس کو آپ کو چلانا چاہتے ہیں ۔ اسی طرح ایک اور یہ کہ ایک نمبر ہے کہ ایکس از ایکیویل ٹو ون پوائنٹ تھری اس کو میں اس پہ میتھڈ لگا رہا ہوں اپر کیس کا ، آپ کو پتہ ہے اپر کیس کا میتھڈ جو ہے وہ ایکسپکٹ کرتا ہے کہ سٹرنگ پہ لگے گا یہ تو نمبر ہے تو کیا ہو گا یہاں ؟ یہاں یہ ہو گا کہ جو نمبر ہے جو آپجیکٹ ہے وہ اس پرٹیکولر پراپرٹی کو سپورٹ نہیں کرتا وہ اپر کیس والے میتھڈ کو سپورٹ نہیں کرتا ، لہذا یہ رن ٹائم ایرر ہے ۔

تو ہم نے جو چیک کیا تھا نا انٹرنیٹ آپشنز میں اس کی وجہ سے یہ فائڈہ ہوتا ہے کہ آپ کو بڑے ڈسکرپٹیو سی ایک ایرر سٹیٹمنٹ ملنا شروع ہو جاتی ہے ۔ یہ ایک اور ایرر ہے ۔ یہ سمینٹک ہے، یہاں پر ایک گڑ بڑ ہو رہی لاسٹ والا آپریٹر کر رہا ہے ۔یہاں پر ایسا ہوا ہے کہ میں نے ایک فارم سے دو ٹیکسٹ فیلڈز سے دو چیزیں لیں ہیں اور ان کو میں ایڈ کرنے کی کوشش کر رہا ہوں لیکن ہوتا یہ ہے کہ جب فارم سے میں کوئی چیز لیتا ہوں تو وہ نمبرز نہیں ہوتے وہ تو ٹیکسٹ ہوتی ہے تو اصل میں کیا ہو گا یہاں پر سم نہیں ہو گی یہاں پر کنکیٹیگیشن ہو گا ۔ اٹس سمینٹک ایرر۔

کچھ اور کامن مسٹیکس کو دیکھ لیتے ہیں اب یہ ایسی مسٹیکس کیں جو میں اکثر کرتا ہوں یہاں پر کیا مسنگ ہے ؟ یہاں کیا پرابلم ہے ؟ یہاں پر پرابلم یہ ہے کہ میں ٹوڈے کو ہالیڈے سے کمپیئیر کرنے کی کوشش کر رہا ہوں ، یہاں پر ایکیول سائن نہیں ہونا چاہئے یہاں پر ایکیول ایکیول سائن ہونا چاہئے ۔ ایکیول تو دونوں چیزوں کو ایکویٹ کرتا ہے ۔ایکیول ایکیول جو ہے وہ دونوں کو کمپئیر کرتا ہے۔ یعنی جو میں نے یہاں پر سائن یوز کیا ہے وہ تو اسائمنٹ آپریٹر ہے مجھے تو وہاں پر ایکیول لکھنا چاہئے۔ اس کے علاوہ اف سٹیٹمنٹ کے ساتھ میں ایسا کرتا ہوں کہ میں وہاں پر دو سیمی کولن سائن ڈال دیتا ہوں۔ یہ غلط ہے ، کیوں کہ وہاں پر جو پہلے والا سیمی کولن ہے یہ درست نہیں ہے ۔ کیونکہ یہ جو اف سے چیز شروع ہو رہی ہے اس کے بعد جو کنڈیشن آئی ہے جو ایکشن آیا ہے دس از آ ون سٹیٹمنٹ اس کو آپ دو سٹیمنٹ میں ڈیوائڈ نہیں کر سکتے ۔ اسی طرح ایک اور سٹیٹمنٹ ہے جس میں ایک کنڈیشن ذرا لمبی ہو جائے تو اکثر میں دوسری پرانتھسی جو ہے وہ لگانا بھول جاتا ہوں۔

جیسا کہ یہاں پر آپ کو نظر آجاتا ہے ۔ یہ بہت عام چیز ہے بہت سارے میرے جیسے لوگ ہیں جو ایسا کرتے ہیں ۔

نیکسٹ جناب یہ فنکشن شروع ہو رہا ہے ، آپ دیکھ رہے ہیں کہ اس فنکشن کو میں نے شروع کرا دیا ہے لیکن میں نے اس کو فنش نہیں کیا۔ بائی رائٹ کرلنگ بیس۔ لہذا یہ بھی ایک ایرر ۔ اس کے علاوہ ایک اور چیز جو میرے جیسے اکثر لوگ کرتے ہیں وہ یہ ہے کہ لوگ کیپٹیلازئشین میں مسئلہ کر جاتے ہیں ۔  ایک اور چیچز جو میں اکثر کرتا ہوں وہ یہ کہ اگر کوئی اررے کا کوئی ایلیمنٹ میں لکھنے کی کوشش کرتا تو بجائے سکوئیر ایلیمنٹس کے میں سمپل پرنتھسیز لکھ دیتا ہوں ۔ یہ بہت کامن مسٹیک ہے ۔ اس کو جب آپ کا پروگرام گڑبڑ کر رہا ہو تو لک فار دیٹ ، اس میں جو میں نے ابھی آپ کو بہت سارے ایررز دکھائے ان میں سے خاص طور پر جو سینٹکسٹ ایررز ہیں وہ بہت سارے لوگ کرتے ہیں۔ سپیشنلی وہ لوگ جو صرف ٹیکسٹ ایڈیٹرز یوز کر رہے ہیں لیکن بعض ایسے سمارٹ ایڈیٹرز جو ہیں وہ آپ کو اس طرح کے ایررز سے بچا لیتے ہیں مثلاً اگر آپ ڈریم ویوور استعمال کریں یا ایک اور میں لینکیس پر یوز پر کرتا ہوں این ایڈیٹ ایک بڑا زبردست ایڈیٹر ہے وہ جو ہے وہ مجھے اکثر سینٹکیسٹ ایررز کرنے سے روک لیتے ہیں۔ وہ کرتے یہ ہیں کہ مختلف طرح کےکی ورڈز کو رن ذرا مختلف طرح سے کرتے ہیں اسی طرح جن میں کوئی بریس شروع کرتا ہوں کوئی پرنسز شروع کرتاہوں تو وہ خیال رکھتے ہیں کہ اگر میں کوئی چیز شروع کر رہا ہوں تو اس کے ختم بھی کروں۔

لہذا اس طرح کے سمارٹ ایڈیٹرز بعض جو ہیں جیسے ڈریم ویوور یا این ایڈیٹ تو ان میں سے اگر آپ کو کوئی ملے اس سے بھی آپ کو اس سنٹیکسٹ ایرر سے ذرا نجات مل سکتی ہے ۔

تو جناب ہم نے آج بات کی ایفکیٹیو کمپیوٹر پروگرامنگ پریکٹسس کی ، اس کے علاوہ ہم نے بات کی کہ اچھے کم کاسٹ اور کم ایفرٹ والے پروگرام کیسے لکھے جاتے ہیں اس میں بعض گائیڈ لائنز اور میتھڈز ہم نے آپ کے بتائے لیکن یہ بھی ہم نے آپ کو بتایا کہ سب سے افیکٹیوطریقہ کوالٹی کو بہتر بنانے کا ہے وہ ریویوز ہے آپ اپنے پیئیرز کی مدد سے اپنے دوستوں کی مدد سے  جو آپ جیسا کام کرتے ہیں ان کو آپ اپنا کوڈ اور ڈیزائن دکھا کر اپنے کام کو امپروو کروا سکتے ہیں اس کے لئے علاوہ ہم نے ٹیسٹکنگ اور ڈی بگنگ ٹیکنیکس کے بارے میں بھی تھوڑی سی بات کی

اگلی دفعہ ہمارا فائنل لیکچر ہے جس میں نے بس یہ سارے کا سارا کورس ریویو کرنا ہے اس میں دیکھنا ہم نے یہ ہے کہ اس میں امپارٹنٹ آئیڈیاز جو تھے وہ کون سے تھے ۔ نیکسٹ ٹایم تک کے لئے اپنا خیال رکھئے گا ۔خدا حافظ۔

Leave a Comment