 بسم اللہ الرحمن الرحیم. آج ہم موڈیول 56 دسکس کریں گے. موڈیول 56 ہے termination handlers. termination handlers جو ہے یہ بھی ایک طرح کے exception handlers یہاں کھوڑا سائن کے بیچ میں a difference ہے. کئی لحاظہ یہ بالکل exception handlers کے طور پہ کام کرتے ہیں. ان میں صرف یہ difference ہے کہ جو termination handlers ہوتا ہے وہ ہمیشہ execute کرتا ہے. جو exception handlers ہوتا ہے وہ صرف تا بہت execute ہوتا ہے جب exception نیا کرونا ہے. ان کیس کوئی abnormal operation پر فام ہوتا ہے کسی کسی کیسام کی exception ہوتی ہے تب ہی accept والا construct execute ہوتا ہے لیکن termination handlers abnormal کوئی operation ہونے کی وجہ سے بھی execute کر سکتا ہے اور otherwise normal control flow سے بھی execute کرے گا. آگے چلکے ہم دیکھتے ہیں یہ کیسے پاسبا ہے اس کا کیا فلو بلتا ہے. تو اس کے اندر accept کا clause نہیں use ہوتا ہے اس کے اندر جو clause use ہوتا ہے وہ finally clause ہے اور accept کے clause کو ایک filter کی بھی ضدوتی ہے finally clause کو filter کی ضرورت نہیں ہے. تو termination جو handler ہے وہ دو تریقوں سے یعنی کہ ایک طرح سے آپ دیکھیں استمال ہو رہا ہے آپ جو اپنے ایک program لکھتے ہیں اس کے اندر کچھ resources allocate کرتے ہیں کچھ memory allocate کی ہے کوئی اور مختلف کسم کی handles آپ نے allocate کی ہے. تو in the end آپ نے اپنے program کے اندر بھی کوئی ایسا logic بنائے ہوتا ہے جو کہ سارا garbage collection کرے ان سارے handle جو آپ نے allocate کیا ہے ان کو de allocate کریں ان کو close کریں. تو وہ سارا logic ہے وہ آپ termination handler کے اندر اکسر ہے اور in case exception اکر ہوتی ہے تو exception اکر ہونے کے case میں بھی وہی code execute ہوگی جو آپ نے resources allocate کیا ہے وہ de allocate ہو جائیں گے اور in case normal termination ہوتی ہے اس case میں بھی وہی code execute ہوگی in termination handler اور جو آپ نے resources allocate کیا ہے وہ de allocate کریں ہو جائیں گے. تو یہ programmer کی اوپر ہے کہ کیس طرح سے وہ clever تریکہ سے اپنے termination handle لکھتا ہے تو termination handle لکھے وہ دونوں کام اپنے کر سکتا ہے garbage collection normal cases کے اندر بھی اور abnormal cases کے اندر بھی garbage collection کر سکتا ہے. یہاں پہ آپ اس کا syntax دیکھ سکتے ہیں اس کے اندر پہلے try کا clause ہے try کے clause کے اندر آپ اپنی code لکھیں گے اس code کے اندر اگر کو exception اکر ہوتی ہے تو finally clause جو ہے اس execution ہو جائے گی اگر exception نہیں بھی اکر ہوتی تو جب یہ try clause کے اندر جو code ہے اس کی execution complete ہو جاتی ہے بیچ میں کسی کسم کا کوئی problem نہیں آتا execution complete ہو جاتی ہے even than اس کے بعد یہ finally clause کے اندر جو آپ نے code لکھی ہے وہ execute ہوگی. یہاں پہ آپ کو نظر آرہا ہے اس کا تھوڑا سا difference ہے with exception handler اور اس difference کو ہم مزید elaborate کرتے ہیں کہ یہ کس طرح سے different ہے. یہاں پہ جب بھی آپ جو یہ جو آپ کا finally کا جو block ہے یہ تب execute ہوتا ہے جب بھی آپ try کے block کو leave کرتے ہیں. try کے block کو leave کرنے کے کئی مختلف قسم کے a circumstance ہے. ایک سب سے پہلہ circumstance تو یہ ہے کہ سب کچھ نورملی چلا کسی کسی کسم کا آرہ نہیں آیا. پورے try کے block کی execution ہوگی جب try کے block کی execution ختم ہوئی تو سار تھی finally کے block کی execution start ہو جائی. اس کے لیوہ ہو سکتا ہے کہ try کے block کے اندر کسی کسم کا آرہ آجا ہے یا اور کسی کسم کا statement encounter ہو جائے تو اس کے result میں بھی آپ کا termination block جو ہے وہ execute ہو سکتا ہے. وہ کیا کیا possibility ہے وہ یہ ہے کہ اگر آپ return کو use کرتے ہیں try کے block اندر return کو use کرتے ہیں try کے block کی execution complete ہوتی ہے اور complete ہو سے ساتھی termination block execute ہونا شروع ہو جائے گا break کو use کرتے ہیں go to کو use کرتے ہیں continue کو use کرتے ہیں long jump کو use کرتے ہیں leave کو use کرتے ہیں and in the end of course اگر یہ سارہ کچھ نہیں ہوتا اور exception عکر ہو جاتی ہے exception کسی untoward circumstances کی وجہ سے unknown circumstances کی وجہ سے عکر ہوتی ہے اور exception عکر ہونے کے case میں بھی آپ کا finally کا block جو ہے وہ execute ہو گا اب اگر آپ finally کے block کے اندر آپ کی execution آگی ہے تو finally کے block کے اندر آپ کو یہ کیسے پتہ چلے گا کہ وہ execution کس وجہ سے آئی ہے وہ abnormal execution کی وجہ سے آئی ہے abnormal termination کی وجہ سے آئی ہے یا normal termination کی وجہ سے آئی ہے تو windows اس چیز میں آپ کو help کرنے کے لیے ایک API پروائیٹ کرتا ہے آپ اس API کو call کر کے finally کے block کے اندر یہ چیک کر سکتے ہیں جو termination ہوئی ہے وہ normal ہوئی ہے یا abnormal ہوئی ہے اور پھر وہاں پہ آپ اپنا logic device کر سکتے ہیں finally کے block کے اندر کہ abnormal اگر termination ہوئی ہے پھر آپ نے کیا operations perform کرنے ہیں اور اگر normal termination ہوئی ہے تو تب آپ نے کیا operations perform کرنے ہیں یہ جو API آپ use کریں گے یہ کلاری ہے abnormal termination اس کو کوئی value نہیں pass ہوتی اور یہ ایک Boolean value return کرتا ہے Boolean value کیا ہوسکتی ہے یا تو true ہو سکتی ہے یا false ہو سکتی ہے جب آپ اس function کو call کریں گے یا تو true return ہوگا یا false return ہوگا ان کے true return ہوتا ہے تو اس کا مدلہ باہ کہ abnormal termination ہوئی ہے ان کے false return ہوتا ہے اس کا مدلہ باہ کہ normal termination ہوئی ہے جب termination handle کو use کرے ہوتے تو لوگوں کی خیش ہوتی ہے کہ ہم کسی طرح سے except اور finally کا جو clause ہے ان دونوں کو اپس میں ملاا کے use کریں اس طرح سے use کریں گے اگر exception آئے تو وہ except کی clause کے اندر چلا جائے اور جب پوکرام سب کچھ ختم ہو جاتا ہے تو وہ فائنلی کے کلوز کے اندر تاکہ کاربیچ کلیکشن کی جا سکے فائنلی کے کلوز کے اندر چلا جائے تو اس کے لیے مختلف کسم کی دوائیس کی جا سکتی ہے ایک تو اس کا یہ سلوشن ہے کہ ہم کچھ اس طرح کی کوڑ لکھیں یا آپ کے سامنے کوڑ ہے اس کے اندر آپ نے ایک ٹرائی کا بلوگ بنائیا ایک بلوگ بنائیا اور ایکillosر초 ہی کا بلوگ بنائیا لیکن یہ كورڈورک نہیں کرے ہی ایک ٹرائی کے بلوگرے ساتھ ایک اس پر کسپت کا لوگ ہوسکتے ہے یا پھر ایک murderer find nی ایکILL same with a try کے constructs ہیں ان کی cascading کر سکتے ہیں. تو finally اور accept کو ہم اپس میں combine کر سکتے ہیں. اس کے لیے ہمیں کیا کرنا بڑے گا cascading کرنے بڑے گا. اگر آپ نے مختلف level کے پر try کو use کیا تو ایک level کے پر ہو سکتا ہے آپ accept use کرنے اور ایک level کے پر آپ ہو سکتا ہے کہ finally کو use کرنے. جس طرح سے اس example میں دیکھتے ہیں. اس example کے اندر آپ کو یہاں پر نظر آ رہا ہے کہ شروع میں آپ کے پاس ایک try کا clause ہے اس کے اندر پھر وائل loop ہے. وائل loop کے اندر again try کا clause ہے اور یہ والا جو inner try کا clause ہے اس کے اندر آپ نے ایک file open کی ہے create file سے اور اگر یہ file create نہیں ہوتی تو اس try کے clause کے اندر exception آ سکتی ہے. پھر اسی طرح سے آگے پھر if ہے اس if کے اندر آگے ایک اور مزید deep inside ایک اور try کا یہاں پہ آپ کو clause مل رہا ہے. اس try کے clause کے اندر آپ نے فرص کریں کے floating point operations پر پر فرم کرنے تو آپ کو floating point exceptions یہاں پہ آ کر ہو سکتی ہیں. اور پھر ایک جب this try کے clause سے بہار آتے ہیں تو آپ کو accept کا clause ہوتا ہے. یہ inner mode most accept کا clause ہے. یہ inner most try کے ساتھ match کر رہا. تو اگر یہ floating point exceptions جہاں پہ آ رہی ہیں اگر وہاں پہ کوئی floating point exception آتی ہے تو اس کو آپ catch کہاں کریں گے except کے اندر catch کریں گے اس inner most except کے اندر catch کریں گے اس سے بہار آتے ہیں تو ہمیں یہ finally کا یہاں ایک clause نظر آتا ہے. یہ جو inner most try تھا اس سے جو تھوڑا سے outer try ہے دوسرے لگل کے اوپر جو try ہے اس کے ساتھ match کر رہا. جہاں ہم نے file create کی تھی file کو create کرنے سے relevant اگر کو exception آتی ہے تو اس part کے اندر آئی گی یا پھر جو file create ہو گئی اور آپ نے اس کو use بھی کر لیا تو آپ اس finally کے part کے اندر اس file کو destroy کریں گے file کے hendels وغیرہ کو close کریں گے جس طرح آپ دیکھ رہے ہیں and read file ہو رہا ہے close handle ہو رہا ہے اس طرح کی چیزیں اور جو outer most try ہے اس کا except بھی outer most اس try کے اندر اگر کسی کسم کی exception آتی ہے تو اس کو آپ outer most except کے اندر hendel کریں گے