کوٹلن بمقابلہ جاوا - دونوں میں کیا فرق ہے؟

مصنف: John Stephens
تخلیق کی تاریخ: 24 جنوری 2021
تازہ کاری کی تاریخ: 1 جولائی 2024
Anonim
کوٹلن بمقابلہ جاوا - دونوں میں کیا فرق ہے؟ - ایپس
کوٹلن بمقابلہ جاوا - دونوں میں کیا فرق ہے؟ - ایپس

مواد


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

جاوا کے بارے میں مزید جاننے کے لئے میک اینڈروئیڈ ایپ پر جاوا کورس کا ایک مفت تعارفی حاصل کریں۔

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

لیکن اگر آپ جاوا سے کوٹلن تک سوئچ کرتے ہیں تو ، آپ بالکل کیا حاصل کر رہے ہیں؟ کوٹلن میں کیا خصوصیات ہیں ، جو جاوا میں نہیں ہے ، اور اس کے برعکس؟

اس آرٹیکل میں ، ہم کوٹلن بمقابلہ جاوا کے مابین ہونے والے تمام اہم اختلافات کو دیکھیں گے۔

کوٹلن بمقابلہ جاوا ، بعد میں زیادہ مطابقت پذیر کوڈ پیش کرتا ہے - بغیر ویوڈ بائی آئڈس

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


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

اس سے پہلے کہ آپ ان ایکسٹینشنز کو استعمال کرسکیں ، آپ کو اپنی ماڈیول کی سطح کی بلڈ.gradle فائل میں ایک اضافی پلگ ان شامل کرنے کی ضرورت ہوگی (پلگ ان لاگو کریں: 'کوٹلن-android-ایکسٹینشنز') لیکن اس کے بعد آپ مناظر کی درآمد شروع کرنے کے لئے تیار ہیں ، مثال کے طور پر اگر آپ کی سرگرمی_منظور. xml فائل میں ID ٹیکسٹ ویو کے ساتھ ایک ٹیکسٹ ویو ہے ، تو آپ اپنی سرگرمی میں درج ذیل کو شامل کریں گے:

کوٹلنکس.اینڈروئیڈ.سینٹھیٹک ڈومین.اسٹیٹیویٹی_مین.ٹیکسٹ ویو درآمد کریں

اس کے بعد آپ صرف اس کی ID استعمال کرکے اس ٹیکسٹ ویو تک رسائی حاصل کرسکتے ہیں۔

ٹیکسٹ ویو ڈاٹ ٹیکسٹ ("ہیلو ورلڈ")

یہ وہ جگہ ہے زیادہ جاوا کے مساوی سے زیادہ ہم آہنگی:

ٹیکسٹ ویو ٹیکسٹ = (ٹیکسٹ ویو) FindViewById (R.id.textView)؛ Text.setText ("ہیلو ورلڈ")؛

کوٹلن ڈیفالٹ کے لحاظ سے کالعدم ہے

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


یہ بھی پڑھیں: کوٹیلن برائے Android تعارف

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

ویل نام: ڈور = null

fun getName (): سٹرنگ = کال

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

ویل نمبر: انٹ؟ = کالعدم

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

توسیع کے کام

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

یہ ’ایکسٹینشن فنکشنز‘ جاوا میں دستیاب نہیں ہیں ، حالانکہ یہ دیگر پروگرامنگ زبانوں میں دستیاب ہیں جنہیں آپ اینڈرائیڈ ڈویلپمنٹ کے لئے استعمال کرسکتے ہیں ، جیسے C #۔

اگلا پڑھیں: ابتدائیوں کے لئے جاوا ٹیوٹوریل

آپ جس کلاس کو تیار کرنا چاہتے ہیں اس کے نام کا سابقہ ​​لگا کر آپ ایکسٹینشن فنکشن تشکیل دیتے ہیں (جیسے ’اسٹرنگ‘) مثال کے طور پر آپ جس فنکشن کو تشکیل دے رہے ہیں اس کے نام سے (‘اسٹائل سٹرنگ’):

مزہ String.styleString (): سٹرنگ {// اسٹائل اسٹائل کریں اور پھر اسے واپس کریں //}

اس کے بعد آپ اس فنکشن کو توسیع کلاس کے مواقع پر ، کے ذریعے کال کرسکتے ہیں۔ اشارے ، گویا یہ اس کلاس کا حصہ ہے۔

myString.styleString ()

کورٹائن فرسٹ کلاس شہری ہیں

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

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

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

کوئی چیک شدہ استثنا نہیں ہے

کوٹلن میں مستثنیات کی جانچ پڑتال نہیں ہے ، لہذا آپ کو کسی استثنا کو پکڑنے یا اس کا اعلان کرنے کی ضرورت نہیں ہے۔

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

وفد کے لئے مقامی حمایت

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

کوٹلن کا کلاس وفد وراثت کا متبادل ہے جس سے متعدد وراثت کا استعمال ممکن ہوتا ہے۔ دریں اثنا ، کوٹلن کی نمائندہ خصوصیات کوڈ کے نقل کو روکنے میں مدد کرتی ہے ، مثال کے طور پر اگر آپ کو متعدد املاک کے حاصل کرنے والوں اور سیٹ کرنے والوں کے لئے ایک ہی کوڈ کو دوبارہ استعمال کرنے کی ضرورت ہے تو آپ اس کوڈ کو کسی مقتدرہ جائداد میں نکال سکتے ہیں۔ پراپرٹی مندوبین کو getValue آپریٹر کے کام کی وضاحت کرنے کی ضرورت ہے اور ، اختیاری طور پر ، سیٹ ویلیو آپریٹر:

کلاس ڈیلیگیٹ {آپریٹر تفریح ​​getValue (...) ... ... ...} آپریٹر تفریح ​​سیٹ ویلیو (...) ... ... ...}}

پھر ، جب آپ کوئی پراپرٹی تیار کررہے ہو تو آپ یہ اعلان کرسکتے ہیں کہ اس خاص خاصیت کے ل for حاصل کرنے والے اور سیٹٹر کے افعال کو کسی اور کلاس کے ذریعہ سنبھالا جاتا ہے۔

کلاس MyClass {var پراپرٹی: ڈیلیگیٹ کے ذریعہ سٹرنگ ()}

ڈیٹا کلاسز

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

کوٹلن میں ، اگر آپ اپنی کلاس کی تعریف میں ’’ ڈیٹا ‘‘ کی ورڈ شامل کرتے ہیں ، تو مرتب آپ کے لئے یہ سب کام انجام دے گا ، بشمول تمام ضروری حاصل کرنے والے اور سیٹٹرز تیار کرنا:

ڈیٹا کلاس کی تاریخ (ماہ مہینہ: سٹرنگ ، مختلف دن: انٹ)

اسمارٹ کاسٹس

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

کوٹلن کی ہوشیار ذاتیں آپ کو ان فالتو ذاتوں کو سنبھال سکتی ہیں ، لہذا آپ کو کسی بیان کے اندر کاسٹ کرنے کی ضرورت نہیں ہے اگر آپ نے پہلے ہی اسے کوٹلن کے ’’ آپریٹر ‘‘ کے ساتھ چیک کر لیا ہے۔ مثال کے طور پر ، مرتب جانتا ہے کہ درج ذیل کاسٹ محفوظ ہے:

اگر (ہیلو اسٹرنگ ہے) {پرنٹ اسٹریننگ (ہیلو)}

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

جاوا کے برعکس ، ایک کوٹلن کلاس میں ایک پرائمری کنسٹرکٹر اور ایک یا ایک سے زیادہ ثانوی کنسٹرکٹر ہوسکتے ہیں ، جسے آپ اپنے کلاس اعلامیہ میں شامل کرکے تیار کرتے ہیں:

کلاس مین ایکٹیویٹی کنسٹرکٹر (پہلا نام: سٹرنگ) {

واضح طور پر وسیع تر تبادلوں کے لئے کوئی تعاون نہیں ہے

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

کوٹلن کے ساتھ نوٹس پروسیسنگ لائبریریوں

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

اگر آپ جاوا لائبریری استعمال کرنا چاہتے ہیں جو تشریح پروسیسنگ پر انحصار کرتا ہے ، تو پھر اسے اپنے کوٹلن پروجیکٹ میں شامل کرنا قدرے مختلف ہے کیونکہ آپ کو انحصار کا استعمال کرتے ہوئے انحصار کی ضرورت ہوگی۔ کوٹلن پلگ ان کریں ، اور پھر تشریح پروسیسر کی بجائے کوٹلن تشریح پروسیسنگ ٹول (کیپٹ) استعمال کریں۔ مثال کے طور پر:

// پلگ ان کا اطلاق کریں // لاگو پلگ ان: کوٹلن-کپٹ // کیپٹ ترتیب // انحصار using kapt "com.google.dagger: dagger-compiler: $ dgerger-version" کا استعمال کرتے ہوئے متعلقہ انحصار شامل کریں۔ ...

جاوا کے ساتھ تبادلہ خیال

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

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

اگر آپ اپنے لئے کوٹلن کو آزمانا چاہتے ہیں تو ، اس وقت تک جب تک آپ Android اسٹوڈیو 3.0 پیش نظارہ یا اس سے زیادہ انسٹال ہوں ، کچھ طریقے موجود ہیں جن کی مدد سے آپ شروعات کرسکتے ہیں:

  • ایک نیا اینڈروئیڈ اسٹوڈیو پروجیکٹ بنائیں۔ سب سے آسان طریقہ یہ ہے کہ ایک نیا پروجیکٹ بنائیں اور پروجیکٹ تخلیق وزرڈ سے ’کوٹلن سپورٹ شامل کریں‘ چیک باکس منتخب کریں۔

  • موجودہ ڈائریکٹری میں کوٹلن کلاس شامل کریں۔ زیربحث ڈائریکٹری کو کنٹرول کریں ، پھر ‘فائل> نیا> کوٹلن فائل / کلاس منتخب کریں۔’ اینڈروئیڈ اسٹوڈیو ایک بینر دکھائے گا جس میں آپ کوٹلن کی مدد کے لئے اپنے منصوبے کی تشکیل کے لئے کہا جائے گا۔ ’کنفیگر کریں‘ لنک پر کلک کریں اور اسکرین ہدایات پر عمل کریں۔

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

ختم کرو

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

اگلا پڑھیں: اینڈروئیڈ ڈویلپمنٹ کیلئے جاوا ترکیب کا تعارف

تازہ کاری: 31 جولائی ، 2019 - ٹی موبائل نے اب فیصلہ کیا ہے کہ وہ اب سیمسنگ کہکشاں فولڈ کو فروخت نہیں کرے گا۔ کیریئر نے اپنے فیصلے کی کوئی خاص وجہ نہیں بتائی۔ کہکشاں فولڈ کی ابتدائی ریلیز میں سیمسنگ نے...

اپ ڈیٹ ، 13 فروری ، 2019 (01:54 PM ET):ایسا معلوم ہوتا ہے کہ ٹی موبائل نے سرکاری طور پر سیمسنگ گلیکسی ایس 9 اور گلیکسی ایس 9 پلس کیلئے اینڈروئیڈ 9 پائ کا رول آؤٹ دوبارہ شروع کردیا ہے۔ ریڈڈیٹ پر صارفین...

دلچسپ