اس مضمون کی تحریر کے دوران کوئی جاوا اسکرپٹ فریم ورک نہیں بنایا گیا تھا۔
ذیل میں سرکل CI کے مضمون "یہ مستقبل ہے" سے متاثر ہے۔ آپ اصل کو یہاں پڑھ سکتے ہیں ۔ یہ ٹکڑا صرف ایک رائے ہے، اور کسی بھی JavaScript فریم ورک کی طرح، اسے زیادہ سنجیدگی سے نہیں لیا جانا چاہیے۔
ارے، مجھے یہ نیا ویب پروجیکٹ مل گیا ہے، لیکن سچ پوچھیں تو میں نے چند سالوں میں زیادہ ویب کوڈ نہیں کیا ہے اور میں نے سنا ہے کہ زمین کی تزئین میں تھوڑا سا بدلا ہوا ہے۔ آپ یہاں کے آس پاس کے سب سے تازہ ترین ویب ڈیو ہیں؟
-اصل اصطلاح فرنٹ اینڈ انجینئر ہے، لیکن ہاں، میں صحیح آدمی ہوں۔ میں 2016 میں ویب کرتا ہوں۔ ویژولائزیشنز، میوزک پلیئرز، فلائنگ ڈرون جو فٹ بال کھیلتے ہیں، آپ اسے نام دیں۔ میں ابھی JsConf اور ReactConf سے واپس آیا ہوں، اس لیے میں ویب ایپس بنانے کے لیے جدید ترین ٹیکنالوجیز جانتا ہوں۔
ٹھنڈا مجھے ایک ایسا صفحہ بنانے کی ضرورت ہے جو صارفین کی تازہ ترین سرگرمی دکھائے، اس لیے مجھے صرف REST اینڈ پوائنٹ سے ڈیٹا حاصل کرنے اور اسے کسی قسم کے فلٹر ایبل ٹیبل میں ڈسپلے کرنے کی ضرورت ہے، اور اگر سرور میں کوئی تبدیلی آتی ہے تو اسے اپ ڈیٹ کرنا ہے۔ میں سوچ رہا تھا کہ شاید ڈیٹا لانے اور ڈسپلے کرنے کے لیے jQuery استعمال کر رہا ہوں؟
-اوہ میرے خدا نہیں، اب کوئی بھی jQuery استعمال نہیں کرتا ہے۔ آپ کو React سیکھنے کی کوشش کرنی چاہیے، یہ 2016 ہے۔
اوہ، ٹھیک ہے۔ کیا ردعمل ہے؟
-یہ فیس بک پر کچھ لوگوں کی طرف سے بنائی گئی ایک زبردست ٹھنڈی لائبریری ہے، یہ واقعی آپ کی ایپلیکیشن پر کنٹرول اور کارکردگی لاتی ہے، جس سے آپ کسی بھی منظر کی تبدیلی کو بہت آسانی سے سنبھال سکتے ہیں۔
یہ صاف لگتا ہے۔ کیا میں سرور سے ڈیٹا ظاہر کرنے کے لیے React کا استعمال کر سکتا ہوں؟
-ہاں، لیکن پہلے آپ کو اپنے ویب پیج میں ایک لائبریری کے طور پر React اور React DOM کو شامل کرنے کی ضرورت ہے۔
رکو، دو لائبریریاں کیوں؟
-تو ایک اصل لائبریری ہے اور دوسری DOM میں ہیرا پھیری کے لیے ہے، جسے اب آپ JSX میں بیان کر سکتے ہیں۔
جے ایس ایکس؟ JSX کیا ہے؟
-JSX صرف ایک JavaScript نحوی توسیع ہے جو کہ XML کی طرح نظر آتی ہے۔ یہ DOM کو بیان کرنے کا ایک اور طریقہ ہے، اسے ایک بہتر HTML سمجھیں۔
HTML میں کیا خرابی ہے؟
-یہ 2016 ہے۔ اب کوئی بھی HTML کو براہ راست کوڈ نہیں کرتا ہے۔
ٹھیک ہے۔ ویسے بھی، اگر میں ان دو لائبریریوں کو شامل کرتا ہوں تو میں React استعمال کر سکتا ہوں؟
- بالکل نہیں. آپ کو بابل کو شامل کرنے کی ضرورت ہے، اور پھر آپ React استعمال کرنے کے قابل ہو جائیں گے۔
ایک اور لائبریری؟ بابل کیا ہے؟
-اوہ، بابل ایک ٹرانسپلر ہے جو آپ کو JavaScript کے مخصوص ورژن کو نشانہ بنانے کی اجازت دیتا ہے، جب کہ آپ JavaScript کے کسی بھی ورژن میں کوڈ کرتے ہیں۔ آپ کو ReactJS استعمال کرنے کے لیے Babel کو شامل کرنے کی ضرورت نہیں ہے، لیکن جب تک آپ ایسا نہیں کرتے، آپ ES5 کو استعمال کرنے میں پھنس گئے ہیں، اور آئیے حقیقی بنیں، یہ 2016 ہے، آپ کو ES2016+ میں کوڈنگ کرنا چاہیے جیسے باقی اچھے بچے کرتے ہیں۔
ES5؟ ES2016+؟ میں یہاں گم ہو رہا ہوں۔ ES5 اور ES2016+ کیا ہے؟
-ES5 کا مطلب ہے ECMAScript 5۔ یہ وہ ایڈیشن ہے جسے زیادہ تر لوگ ہدف بناتے ہیں کیونکہ آج کل اسے زیادہ تر براؤزرز نے لاگو کیا ہے۔
ECMAScript؟
-ہاں، آپ جانتے ہیں، اسکرپٹنگ معیاری جاوا اسکرپٹ کی بنیاد 1999 میں اس کی ابتدائی ریلیز کے بعد 1995 میں تھی، اس وقت جب JavaScript کا نام Livescript تھا اور صرف Netscape Navigator میں چلتا تھا۔ اس وقت یہ بہت گندا تھا، لیکن شکر ہے کہ اب چیزیں بہت واضح ہیں اور ہمارے پاس اس عمل درآمد کے 7 ایڈیشنز ہیں۔
7 ایڈیشن۔ حقیقی کے لیے۔ اور ES5 اور ES2016+ ہیں؟
-بالترتیب پانچواں اور ساتواں ایڈیشن۔
رکو، چھٹے کے ساتھ کیا ہوا؟
-آپ کا مطلب ES6 ہے؟ ہاں، میرا مطلب ہے، ہر ایڈیشن پچھلے ایڈیشن کا سپر سیٹ ہے، لہذا اگر آپ ES2016+ استعمال کر رہے ہیں، تو آپ پچھلے ورژن کی تمام خصوصیات استعمال کر رہے ہیں۔
ٹھیک ہے۔ اور پھر ES6 پر ES2016+ کیوں استعمال کریں؟
-ٹھیک ہے، آپ ES6 استعمال کر سکتے ہیں، لیکن async اور await جیسی عمدہ خصوصیات کو استعمال کرنے کے لیے، آپ کو ES2016+ استعمال کرنے کی ضرورت ہے۔ بصورت دیگر آپ مناسب کنٹرول کے بہاؤ کے لیے غیر مطابقت پذیر کالوں کو روکنے کے لیے کوروٹینز کے ساتھ ES6 جنریٹرز کے ساتھ پھنس گئے ہیں۔
مجھے نہیں معلوم کہ آپ نے ابھی کیا کہا ہے، اور یہ تمام نام الجھا رہے ہیں۔ دیکھو، میں صرف ایک سرور سے ڈیٹا کا ایک گروپ لوڈ کر رہا ہوں، میں صرف CDN سے jQuery شامل کرنے اور AJAX کالز کے ساتھ ڈیٹا حاصل کرنے کے قابل ہوتا تھا، میں ایسا کیوں نہیں کر سکتا؟
-یہ 2016 کا آدمی ہے، اب کوئی jQuery استعمال نہیں کرتا، یہ سپتیٹی کوڈ کے ایک گروپ میں ختم ہوتا ہے۔ یہ سب جانتے ہیں۔
ٹھیک ہے۔ تو میرا متبادل یہ ہے کہ ڈیٹا لانے اور HTML ٹیبل کو ڈسپلے کرنے کے لیے تین لائبریریاں لوڈ کی جائیں۔
-ٹھیک ہے، آپ ان تینوں لائبریریوں کو شامل کرتے ہیں لیکن صرف ایک فائل لوڈ کرنے کے لیے ان کو ماڈیول مینیجر کے ساتھ بنڈل کریں۔
میں دیکھتا ہوں۔ اور ماڈیول مینیجر کیا ہے؟
-تعریف کا انحصار ماحول پر ہے، لیکن ویب میں ہمارا مطلب عام طور پر ایسی کوئی بھی چیز ہے جو AMD یا CommonJS ماڈیولز کو سپورٹ کرتی ہو۔
Riiight. اور AMD اور CommonJS ہیں…؟
- تعریفیں یہ بیان کرنے کے طریقے ہیں کہ متعدد JavaScript لائبریریوں اور کلاسوں کو کس طرح تعامل کرنا چاہیے۔ آپ جانتے ہیں، برآمدات اور ضروریات؟ آپ AMD یا CommonJS API کی وضاحت کرنے والی متعدد JavaScript فائلیں لکھ سکتے ہیں اور آپ ان کو بنڈل کرنے کے لیے Browserify جیسی کوئی چیز استعمال کر سکتے ہیں۔
ٹھیک ہے، یہ سمجھ میں آتا ہے… میرے خیال میں۔ Browserify کیا ہے؟
-یہ ایک ایسا ٹول ہے جو آپ کو CommonJS بیان کردہ انحصار کو ان فائلوں پر بنڈل کرنے کی اجازت دیتا ہے جو براؤزر میں چلائی جا سکتی ہیں۔ یہ اس لیے بنایا گیا تھا کہ زیادہ تر لوگ ان انحصاروں کو npm رجسٹری میں شائع کرتے ہیں۔
این پی ایم رجسٹری؟
-یہ ایک بہت بڑا عوامی ذخیرہ ہے جہاں ہوشیار لوگ کوڈ اور انحصار کو ماڈیول کے طور پر رکھتے ہیں۔
سی ڈی این کی طرح؟
- واقعی نہیں. یہ ایک مرکزی ڈیٹا بیس کی طرح ہے جہاں کوئی بھی لائبریریوں کو شائع اور ڈاؤن لوڈ کرسکتا ہے، لہذا آپ انہیں مقامی طور پر ترقی کے لیے استعمال کرسکتے ہیں اور پھر اگر آپ چاہیں تو انہیں CDN پر اپ لوڈ کرسکتے ہیں۔
اوہ، بوور کی طرح!
-ہاں، لیکن اب یہ 2016 ہے، اب کوئی بھی بوور کا استعمال نہیں کرتا ہے۔
اوہ، میں دیکھ رہا ہوں… تو پھر مجھے npm سے لائبریریاں ڈاؤن لوڈ کرنے کی ضرورت ہے؟
-جی ہاں لہذا مثال کے طور پر، اگر آپ React استعمال کرنا چاہتے ہیں، تو آپ React ماڈیول کو ڈاؤن لوڈ کرتے ہیں اور اسے اپنے کوڈ میں درآمد کرتے ہیں۔ آپ یہ تقریباً ہر مشہور جاوا اسکرپٹ لائبریری کے لیے کر سکتے ہیں۔
اوہ، کونیی کی طرح!
-Angular تو 2015 ہے۔ لیکن ہاں۔ VueJS یا RxJS اور دیگر ٹھنڈی 2016 لائبریریوں کے ساتھ، کونیی موجود ہوگا۔ ان کے بارے میں جاننا چاہتے ہیں؟
آئیے React پر قائم رہیں، میں اب بہت سی چیزیں سیکھ رہا ہوں۔ تو، اگر مجھے React استعمال کرنے کی ضرورت ہو تو میں اسے اس npm سے لاتا ہوں اور پھر اس Browserify چیز کو استعمال کرتا ہوں؟
-جی ہاں
یہ صرف انحصار کے ایک گروپ کو پکڑنے اور انہیں ایک ساتھ باندھنے کے لئے حد سے زیادہ پیچیدہ لگتا ہے۔
-یہی وجہ ہے کہ آپ براؤزرائف کو چلانے کے لیے خودکار کرنے کے لیے ٹاسک مینیجر جیسے گرنٹ یا گلپ یا بروکولی کا استعمال کرتے ہیں۔ ہیک، آپ میموسا بھی استعمال کر سکتے ہیں۔
گرنٹ گلپ۔ بروکولی؟ Mimosa؟ کیا ہم ابھی بات کر رہے ہیں؟
- ٹاسک مینیجرز۔ لیکن وہ اب ٹھنڈے نہیں ہیں۔ ہم نے انہیں 2015 کی طرح استعمال کیا، پھر ہم نے میک فائلز کا استعمال کیا، لیکن اب ہم ہر چیز کو Webpack کے ساتھ لپیٹ دیتے ہیں۔
میک فائلز؟ میں نے سوچا کہ یہ زیادہ تر C یا C++ پروجیکٹس پر استعمال ہوتا ہے۔
-ہاں، لیکن بظاہر ویب میں ہمیں چیزوں کو پیچیدہ بنانا اور پھر بنیادی باتوں پر واپس جانا پسند ہے۔ ہم ہر سال ایسا کرتے ہیں، بس اس کا انتظار کریں، ہم ایک یا دو سال میں ویب میں اسمبلی کرنے جا رہے ہیں۔
آہیں آپ نے Webpack نامی کسی چیز کا ذکر کیا؟
-یہ براؤزر کے لیے ایک اور ماڈیول مینیجر ہے جبکہ ٹاسک رنر بھی ہے۔ یہ Browserify کے بہتر ورژن کی طرح ہے۔
اوہ، ٹھیک ہے۔ یہ کیوں بہتر ہے؟
-ٹھیک ہے، شاید بہتر نہ ہو، یہ صرف اس بات پر زیادہ رائے رکھتا ہے کہ آپ کے انحصار کو کس طرح باندھنا چاہیے۔ Webpack آپ کو مختلف ماڈیول مینیجر استعمال کرنے کی اجازت دیتا ہے، اور نہ صرف CommonJS والے، اس لیے مثال کے طور پر مقامی ES6 سپورٹ شدہ ماڈیولز۔
میں اس پوری CommonJS/ES6 چیز سے انتہائی الجھن میں ہوں۔
-ہر کوئی ہے، لیکن آپ کو سسٹم جے ایس کی مزید پرواہ نہیں کرنی چاہیے۔
یسوع مسیح، ایک اور اسم js۔ ٹھیک ہے، اور یہ سسٹم جے ایس کیا ہے؟
- ٹھیک ہے، براؤزریفائی اور ویب پیک 1.x کے برعکس، SystemJS ایک ڈائنامک ماڈیول لوڈر ہے جو آپ کو ایک سے زیادہ فائلوں میں ایک سے زیادہ ماڈیولز کو ایک بڑی فائل میں باندھنے کے بجائے باندھنے کی اجازت دیتا ہے۔
رکو، لیکن میں نے سوچا کہ ہم اپنی لائبریریوں کو ایک بڑی فائل میں بنانا چاہتے ہیں اور اسے لوڈ کرنا چاہتے ہیں!
-ہاں، لیکن چونکہ HTTP/2 آرہا ہے اب متعدد HTTP درخواستیں درحقیقت بہتر ہیں۔
انتظار کریں، تو کیا ہم صرف رد عمل کے لیے تین اصل لائبریریاں شامل نہیں کر سکتے؟
- واقعی نہیں. میرا مطلب ہے، آپ انہیں CDN سے بیرونی اسکرپٹ کے طور پر شامل کر سکتے ہیں، لیکن پھر بھی آپ کو Babel کو شامل کرنے کی ضرورت ہوگی۔
آہیں اور یہ برا ہے نا؟
-ہاں، آپ پورے بابل کور کو شامل کریں گے، اور یہ پیداوار کے لیے کارآمد نہیں ہوگا۔ پروڈکشن پر آپ کو اپنے پروجیکٹ کو تیار کرنے کے لیے پہلے سے کاموں کی ایک سیریز کو انجام دینے کی ضرورت ہے جس سے شیطان کو بلانے کی رسم ابلے ہوئے انڈوں کی ترکیب کی طرح دکھائی دیتی ہے۔ آپ کو اثاثوں کو کم کرنے، ان کو بدصورت بنانے، فولڈ کے اوپر ان لائن سی ایس ایس، اسکرپٹس کو موخر کرنے کے ساتھ ساتھ-
میں سمجھ گیا، میں سمجھ گیا۔ لہذا اگر آپ لائبریریوں کو براہ راست CDN میں شامل نہیں کریں گے، تو آپ یہ کیسے کریں گے؟
-میں اسے Webpack + SystemJS + Babel کومبو کا استعمال کرتے ہوئے Typescript سے منتقل کروں گا۔
ٹائپ اسکرپٹ؟ میں نے سوچا کہ ہم جاوا اسکرپٹ میں کوڈنگ کر رہے ہیں!
-Typescript JavaScript ہے، یا بہتر طور پر، JavaScript کا ایک سپر سیٹ، خاص طور پر جاوا اسکرپٹ ورژن ES6 پر۔ آپ جانتے ہیں، اس چھٹے ورژن کے بارے میں ہم نے پہلے بات کی تھی؟
میں نے سوچا کہ ES2016+ پہلے ہی ES6 کا ایک سپر سیٹ ہے! اب ہمیں ٹائپ اسکرپٹ نامی اس چیز کی ضرورت کیوں ہے؟
-اوہ، کیونکہ یہ ہمیں جاوا اسکرپٹ کو ٹائپ شدہ زبان کے طور پر استعمال کرنے اور رن ٹائم غلطیوں کو کم کرنے کی اجازت دیتا ہے۔ یہ 2016 ہے، آپ کو اپنے JavaScript کوڈ میں کچھ قسمیں شامل کرنی چاہئیں۔
اور ٹائپ اسکرپٹ واضح طور پر ایسا کرتا ہے۔
فلو بھی، حالانکہ یہ صرف ٹائپنگ کی جانچ کرتا ہے جبکہ ٹائپ اسکرپٹ جاوا اسکرپٹ کا ایک سپر سیٹ ہے جسے مرتب کرنے کی ضرورت ہے۔
آہیں… اور بہاؤ ہے؟
-یہ ایک جامد قسم کا چیکر ہے جسے فیس بک پر کچھ لڑکوں نے بنایا ہے۔ انہوں نے اسے OCaml میں کوڈ کیا، کیونکہ فنکشنل پروگرامنگ لاجواب ہے۔
OCaml؟ فنکشنل پروگرامنگ؟
-یہ وہی ہے جو آج کل کے بچے استعمال کرتے ہیں یار، تم جانتے ہو، 2016؟ فنکشنل پروگرامنگ؟ اعلی آرڈر کے افعال؟ کرینگ۔ خالص افعال؟
مجھے نہیں معلوم کہ آپ نے ابھی کیا کہا۔
-شروع میں کوئی نہیں کرتا۔ دیکھو، آپ کو صرف یہ جاننے کی ضرورت ہے کہ فنکشنل پروگرامنگ OOP سے بہتر ہے اور یہی چیز ہمیں 2016 میں استعمال کرنی چاہیے۔
رکو، میں نے کالج میں OOP سیکھا، میں نے سوچا کہ یہ اچھا تھا؟
-اوریکل کے ذریعہ خریدے جانے سے پہلے جاوا تھا۔ میرا مطلب ہے، OOP پہلے کے دنوں میں اچھا تھا، اور آج بھی اس کے استعمال ہیں، لیکن اب ہر کوئی یہ سمجھ رہا ہے کہ ریاستوں میں ترمیم کرنا بچوں کو لات مارنے کے مترادف ہے، اس لیے اب ہر کوئی ناقابل تغیر اشیاء اور فنکشنل پروگرامنگ کی طرف بڑھ رہا ہے۔ ہاسکل لڑکے اسے برسوں سے کال کر رہے تھے، - اور مجھے ایلم لڑکوں کے ساتھ شروع نہ کریں- لیکن خوش قسمتی سے اب ویب میں ہمارے پاس رمڈا جیسی لائبریریاں ہیں جو ہمیں سادہ جاوا اسکرپٹ میں فنکشنل پروگرامنگ استعمال کرنے کی اجازت دیتی ہیں۔
کیا آپ صرف اس کی خاطر نام چھوڑ رہے ہیں؟ کیا بکواس ہے رامندا؟
-نہیں رمدا۔ لیمبڈا کی طرح۔ آپ جانتے ہیں کہ ڈیوڈ چیمبرز کی لائبریری؟
ڈیوڈ کون؟
- ڈیوڈ چیمبرز۔ ٹھنڈا آدمی۔ ایک مطلب بغاوت کا کھیل کھیلتا ہے۔ رمدا کے لیے تعاون کرنے والوں میں سے ایک۔ اگر آپ فنکشنل پروگرامنگ سیکھنے میں سنجیدہ ہیں تو آپ کو ایرک میجر کو بھی چیک کرنا چاہیے۔
اور ایرک میجر ہے…؟
- فنکشنل پروگرامنگ لڑکا بھی۔ بہت اچھا آدمی اس کے پاس پریزنٹیشنز کا ایک گروپ ہے جہاں وہ اس عجیب و غریب رنگ کی قمیض کا استعمال کرتے ہوئے چست کو کچل دیتا ہے۔ آپ کو Tj، Jash Kenas، Sindre Sorhus، Paul Irish، Addy Osmani سے بھی کچھ چیزیں چیک کرنی چاہئیں۔
ٹھیک ہے میں تمہیں وہاں روکنے جا رہا ہوں۔ یہ سب اچھا اور ٹھیک ہے، لیکن مجھے لگتا ہے کہ صرف ڈیٹا لانے اور اسے ظاہر کرنے کے لیے یہ سب کچھ اتنا پیچیدہ اور غیر ضروری ہے۔ مجھے پورا یقین ہے کہ مجھے ڈائنامک ڈیٹا کے ساتھ ٹیبل بنانے کے لیے ان لوگوں کو جاننے یا ان تمام چیزوں کو سیکھنے کی ضرورت نہیں ہے۔ آئیے React پر واپس آتے ہیں۔ میں React کے ساتھ سرور سے ڈیٹا کیسے لا سکتا ہوں؟
ٹھیک ہے، آپ اصل میں React کے ساتھ ڈیٹا نہیں لاتے، آپ صرف React کے ساتھ ڈیٹا ڈسپلے کرتے ہیں۔
اوہ، مجھے لعنت ہے. تو آپ ڈیٹا لانے کے لیے کیا استعمال کرتے ہیں؟
-آپ سرور سے ڈیٹا حاصل کرنے کے لیے بازیافت کا استعمال کرتے ہیں۔
میں معافی چاہتا ہوں؟ آپ ڈیٹا لانے کے لیے بازیافت کا استعمال کرتے ہیں؟ جو بھی ان چیزوں کا نام دے رہا ہے اسے تھیسورس کی ضرورت ہے۔
-میں جانتا ہوں نا؟ اسے کسی سرور کے خلاف XMLHttpRequests انجام دینے کے لیے مقامی نفاذ کا نام بازیافت کریں۔
اوہ، تو AJAX.
-AJAX صرف XMLHttpRequests کا استعمال ہے۔ لیکن ضرور۔ Fetch آپ کو وعدوں کی بنیاد پر AJAX کرنے کی اجازت دیتا ہے، جس کے بعد آپ کال بیک ہیل سے بچنے کے لیے حل کر سکتے ہیں۔
کال بیک جہنم؟
-ہاں ہر بار جب آپ سرور کے خلاف ایک غیر مطابقت پذیر درخواست کرتے ہیں، آپ کو اس کے جواب کا انتظار کرنے کی ضرورت ہوتی ہے، جو آپ کو ایک فنکشن کے اندر ایک فنکشن شامل کرنے پر مجبور کرتا ہے، جسے جہنم سے کال بیک پیرامڈ کہا جاتا ہے۔
اوہ، ٹھیک ہے۔ اور یہ وعدہ چیز اسے حل کرتی ہے؟
-بے شک. وعدوں کے ذریعے اپنے کال بیکس میں ہیرا پھیری کرکے، آپ کوڈ کو سمجھنے، ان کا مذاق اڑانے اور جانچنے میں آسانی سے لکھ سکتے ہیں، ساتھ ہی بیک وقت درخواستیں انجام دے سکتے ہیں اور ان سب کے لوڈ ہونے تک انتظار کر سکتے ہیں۔
اور یہ Fetch کے ساتھ کیا جا سکتا ہے؟
-ہاں، لیکن صرف اس صورت میں جب آپ کا صارف سدابہار براؤزر استعمال کرتا ہے، بصورت دیگر آپ کو Fetch پولی فل شامل کرنے یا Request، Bluebird یا Axios استعمال کرنے کی ضرورت ہے۔
خدا کے واسطے مجھے کتنی لائبریریوں کی ضرورت ہے؟ ان میں سے کتنے ہیں؟
-یہ جاوا اسکرپٹ ہے۔ ہزاروں لائبریریاں ہونی چاہئیں جو سب ایک ہی کام کرتی ہیں۔ ہم لائبریریوں کو جانتے ہیں، حقیقت میں، ہمارے پاس بہترین لائبریریاں ہیں۔ ہماری لائبریریاں بہت زیادہ ہیں، اور بعض اوقات ہم ان میں گائے فیری کی تصاویر بھی شامل کرتے ہیں۔
کیا آپ نے صرف گائے فیری کہا؟ چلو اس کے ساتھ ختم ہو جاؤ. یہ بلیو برڈ، درخواست، ایکسیوس لائبریریاں کیا کرتی ہیں؟
-یہ XMLHttpRequests انجام دینے کے لیے لائبریریاں ہیں جو وعدے واپس کرتی ہیں۔
کیا jQuery کے AJAX طریقہ نے بھی وعدوں کو واپس کرنا شروع نہیں کیا؟
-ہم اب 2016 میں "J" لفظ استعمال نہیں کرتے۔ بس Fetch کا استعمال کریں، اور اسے پولی فل کریں جب یہ براؤزر میں نہ ہو یا اس کے بجائے بلیو برڈ، درخواست یا Axios استعمال کریں۔ پھر async فنکشن اور بوم کے اندر انتظار کے ساتھ وعدے کا انتظام کریں، آپ کے پاس مناسب کنٹرول فلو ہے۔
یہ تیسری بار ہے جب آپ نے انتظار کا ذکر کیا ہے لیکن مجھے نہیں معلوم کہ یہ کیا ہے۔
-Await آپ کو ایک غیر مطابقت پذیر کال کو بلاک کرنے کی اجازت دیتا ہے، جس سے آپ کو ڈیٹا کی بازیافت اور مجموعی طور پر کوڈ پڑھنے کی اہلیت پر بہتر کنٹرول حاصل کرنے کی اجازت دیتا ہے۔ یہ بہت اچھا ہے، آپ کو صرف اس بات کو یقینی بنانا ہوگا کہ آپ Babel میں اسٹیج-3 پیش سیٹ شامل کرتے ہیں، یا syntax-async-functions اور transform-async-to-generator پلگ ان استعمال کرتے ہیں۔
یہ پاگل پن ہے۔
-نہیں، پاگل حقیقت یہ ہے کہ آپ کو ٹائپ اسکرپٹ کوڈ کو پہلے سے مرتب کرنے کی ضرورت ہے اور پھر انتظار کو استعمال کرنے کے لیے اسے بابل کے ساتھ منتقل کرنا ہے۔
کیا؟ کیا یہ ٹائپ اسکرپٹ میں شامل نہیں ہے؟
-یہ اگلے ورژن میں کرتا ہے، لیکن ورژن 1.7 کے مطابق یہ صرف ES6 کو نشانہ بناتا ہے، لہذا اگر آپ براؤزر میں await استعمال کرنا چاہتے ہیں، تو پہلے آپ کو اپنا Typescript کوڈ مرتب کرنا ہوگا جو ES6 کو نشانہ بناتا ہے اور پھر Babel جو کہ ES5 کو نشانہ بناتا ہے۔
اس وقت مجھے نہیں معلوم کہ میں کیا کہوں۔
- دیکھو، یہ آسان ہے. ہر چیز کو ٹائپ اسکرپٹ میں کوڈ کریں۔ تمام ماڈیولز جو Fetch کا استعمال کرتے ہیں انہیں ES6 کو نشانہ بنانے کے لیے مرتب کرتے ہیں، انہیں Babel کے ساتھ اسٹیج-3 کے پیش سیٹ پر منتقل کرتے ہیں، اور انہیں SystemJS کے ساتھ لوڈ کرتے ہیں۔ اگر آپ کے پاس Fetch نہیں ہے تو اسے پولی فل کریں، یا بلیو برڈ، درخواست یا Axios استعمال کریں، اور انتظار کے ساتھ اپنے تمام وعدوں کو سنبھالیں۔
ہمارے پاس آسان کی بہت مختلف تعریفیں ہیں۔ تو، اس رسم کے ساتھ میں نے آخر کار ڈیٹا حاصل کر لیا اور اب میں اسے React کے ساتھ ڈسپلے کر سکتا ہوں نا؟
-کیا آپ کی درخواست ریاستی تبدیلیوں کو سنبھالے گی؟
ایرر، مجھے ایسا نہیں لگتا۔ مجھے صرف ڈیٹا ظاہر کرنے کی ضرورت ہے۔
- اوہ، خدا کا شکر ہے. بصورت دیگر مجھے آپ کو Flux، اور Flummox، Alt، Fluxible جیسے نفاذ کی وضاحت کرنی پڑتی۔ اگرچہ ایماندار ہونے کے لیے آپ کو Redux استعمال کرنا چاہیے۔
میں صرف ان ناموں پر پرواز کرنے جا رہا ہوں۔ ایک بار پھر، مجھے صرف ڈیٹا ڈسپلے کرنے کی ضرورت ہے۔
-اوہ، اگر آپ صرف وہ ڈیٹا دکھا رہے ہیں جس کے ساتھ شروع کرنے کے لیے آپ کو رد عمل کی ضرورت نہیں تھی۔ آپ ٹیمپلیٹنگ انجن کے ساتھ ٹھیک ہوتے۔
کیا تم مجھ سے مذاق کر رہے ہو؟ کیا آپ کو لگتا ہے کہ یہ مضحکہ خیز ہے؟ کیا آپ اپنے پیاروں کے ساتھ ایسا سلوک کرتے ہیں؟
-میں صرف یہ بتا رہا تھا کہ آپ کیا استعمال کرسکتے ہیں۔
رک جاؤ۔ بس رک جاؤ۔
-میرا مطلب ہے، یہاں تک کہ اگر یہ صرف ٹیمپلیٹنگ انجن استعمال کر رہا ہے، تب بھی میں ٹائپ اسکرپٹ + SystemJS + Babel کومبو استعمال کروں گا اگر میں آپ ہوتے۔
مجھے ایک صفحہ پر ڈیٹا ڈسپلے کرنے کی ضرورت ہے، سب زیرو کی اصل MK ہلاکت کو انجام دینے کی ضرورت نہیں۔ بس مجھے بتائیں کہ کون سا ٹمپلیٹنگ انجن استعمال کرنا ہے اور میں اسے وہاں سے لے جاؤں گا۔
-بہت کچھ ہے، آپ کس سے واقف ہیں؟
اوہ، نام یاد نہیں آ رہا۔ یہ بہت عرصہ پہلے کی بات ہے۔
-jTemplates؟ jQote؟ خالص؟
غلطی، گھنٹی نہیں بجتی۔ ایک اور؟
- شفافیت؟ JSRender؟ مارک اپ جے ایس؟ KnockoutJS؟ اس میں دو طرفہ پابندی تھی۔
ایک اور؟
-PlatesJS؟ jQuery-tmpl؟ ہینڈل بار؟ کچھ لوگ اب بھی استعمال کرتے ہیں۔
ہو سکتا ہے۔ کیا اس آخری سے ملتے جلتے ہیں؟
-مونچھیں، انڈر سکور؟ میرے خیال میں اب لوڈاش کے پاس بھی ایماندار ہونا ہے، لیکن وہ 2014 کی طرح ہیں۔
غلطی.. شاید یہ نیا تھا.
-جیڈ؟ ڈسٹ جے ایس؟
نہیں
-DotJS؟ EJS؟
نہیں
-ننجکس؟ ای سی ٹی؟
نہیں
-ماہ، ویسے بھی کسی کو کافی اسکرپٹ نحو پسند نہیں ہے۔ جیڈ۔
نہیں، آپ نے پہلے ہی کہا ہے جیڈ۔
-میرا مطلب پگ تھا۔ میرا مطلب جیڈ تھا۔ میرا مطلب ہے، جیڈ اب پگ ہے۔
آہیں نہیں یاد نہیں۔ آپ کون سا استعمال کریں گے؟
-شاید صرف ES6 مقامی ٹیمپلیٹ کے تار۔
مجھے اندازہ لگانے دو۔ اور اس کے لیے ES6 کی ضرورت ہے۔
- درست۔
جس میں، اس بات پر منحصر ہے کہ میں کون سا براؤزر استعمال کر رہا ہوں اسے بابل کی ضرورت ہے۔
- درست۔
جسے، اگر میں پوری کور لائبریری کو شامل کیے بغیر شامل کرنا چاہتا ہوں، تو مجھے اسے npm سے ماڈیول کے طور پر لوڈ کرنے کی ضرورت ہے۔
- درست۔
جس کے لیے، براؤزریفائی، یا ویپ بیک، یا غالباً دوسری چیز جسے SystemJS کہتے ہیں۔
- درست۔
جسے، جب تک کہ یہ Webpack نہ ہو، مثالی طور پر ایک ٹاسک رنر کے ذریعے منظم کیا جانا چاہیے۔
- درست۔
لیکن، چونکہ مجھے فنکشنل پروگرامنگ اور ٹائپ شدہ زبانیں استعمال کرنی چاہئیں، مجھے پہلے ٹائپ اسکرپٹ کو پہلے سے مرتب کرنے یا اس Flow چیز کو شامل کرنے کی ضرورت ہے۔
- درست۔
اور پھر اسے بابل کو بھیج دیں اگر میں await استعمال کرنا چاہتا ہوں۔
- درست۔
لہذا میں پھر بازیافت، وعدے، اور کنٹرول بہاؤ اور وہ تمام جادو استعمال کرسکتا ہوں۔
-بس پولی فل فیچ کرنا نہ بھولیں اگر یہ تعاون یافتہ نہیں ہے، سفاری پھر بھی اسے سنبھال نہیں سکتی۔
تم جانتے ہو کیا. مجھے لگتا ہے کہ ہم یہاں ہو چکے ہیں۔ دراصل، مجھے لگتا ہے کہ میرا کام ہو گیا ہے۔ میں ویب کے ساتھ کام کر چکا ہوں، میں نے جاوا اسکرپٹ کے ساتھ مکمل طور پر کام کر لیا ہے۔
-یہ ٹھیک ہے، چند سالوں میں ہم سب Elm یا WebAssembly میں کوڈنگ کرنے جا رہے ہیں۔
میں صرف بیک اینڈ پر واپس جا رہا ہوں۔ میں صرف ان بہت سی تبدیلیوں اور ورژنز اور ایڈیشنز اور کمپائلرز اور ٹرانسپلرز کو نہیں سنبھال سکتا۔ JavaScript کمیونٹی پاگل ہے اگر اسے لگتا ہے کہ کوئی بھی اس کو برقرار رکھ سکتا ہے۔
- میں آپ کو سن رہا ہوں. پھر آپ کو ازگر کی کمیونٹی کو آزمانا چاہئے۔
کیوں؟
-کبھی Python 3 کے بارے میں سنا ہے؟
اپ ڈیٹ: ٹائپنگ کی غلطیوں اور غلطیوں کی نشاندہی کرنے کا شکریہ، میں مضمون کو اپ ڈیٹ کروں گا جیسا کہ نوٹ کیا گیا ہے۔ HackerNews اور Reddit میں بحث ۔