Tasker ڈیٹا کی بازیافت کے لیے Android WebView میں JavaScript Wait Loops کو ہینڈل کرنا

Tasker ڈیٹا کی بازیافت کے لیے Android WebView میں JavaScript Wait Loops کو ہینڈل کرنا
Tasker ڈیٹا کی بازیافت کے لیے Android WebView میں JavaScript Wait Loops کو ہینڈل کرنا

جاوا اسکرپٹ لوپس کے ساتھ ٹاسکر میں غیر مطابقت پذیر ڈیٹا کو ہینڈل کرنا

انضمام جاوا اسکرپٹ اینڈرائیڈ کی ٹاسکر ایپ کے ساتھ ایک چیلنج ہو سکتا ہے، خاص طور پر جب آپ کو غیر مطابقت پذیر ڈیٹا کا انتظار کرنے کی ضرورت ہو، جیسے کہ Google Places API. ڈویلپرز اکثر ویب ویو میں میزبان ویب پر مبنی اجزاء کے ساتھ ڈیٹا کی آمد کو ہم آہنگ کرنے کے لیے جدوجہد کرتے ہیں۔ اس سے ڈیٹا اپ ڈیٹس کو منظم کرنے کے لیے موثر انتظار کے لوپس کی ضرورت پیدا ہوتی ہے۔

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

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

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

حکم استعمال اور تفصیل کی مثال
setGlobal() یہ فنکشن کے ساتھ تعامل کرتا ہے۔ ٹاسکر ٹاسکر کے ماحول میں عالمی متغیر ترتیب دے کر۔ اسکرپٹس میں، اس کا استعمال ایک کنٹرول متغیر کو تفویض کرنے کے لیے کیا جاتا ہے جو یہ مانیٹر کرنے میں مدد کرتا ہے کہ آیا کام مکمل ہو گیا ہے۔ مثال: setGlobal('CheckNumberIn', random)؛۔
performTask() ترجیح اور کام کی تفصیلات جیسے پیرامیٹرز کے ساتھ ایک مخصوص ٹاسکر ٹاسک کو متحرک کرنے کے لیے استعمال کیا جاتا ہے۔ یہ کمانڈ سے ڈیٹا کی بازیافت کا آغاز کرتا ہے۔ Google Places API. مثال: پرفارم ٹاسک('loadingGoogle', '15', this.locationType, Data.distance)؛۔
global() عالمی ٹاسکر متغیر کی قدر بازیافت کرتا ہے۔ یہ JavaScript کو Tasker کے زیر انتظام اسٹیٹس یا ڈیٹا کو پڑھنے کی اجازت دیتا ہے۔ مثال: let answer = global('CheckNumberOut')؛۔
clearInterval() ایک وقفہ روکتا ہے جو بار بار چل رہا ہے۔ مطلوبہ شرط پوری ہونے کے بعد بے کار پھانسیوں کو روکنے کے لیے یہ ضروری ہے۔ مثال: clearInterval(myInterval)؛۔
JSON.parse() JSON سٹرنگ کو JavaScript آبجیکٹ میں تبدیل کرتا ہے، جس سے Tasker سے حاصل کردہ ڈیٹا کو فرنٹ اینڈ منطق میں استعمال کیا جا سکتا ہے۔ مثال: this.inputData = JSON.parse(retrievedData)؛۔
new Promise() Creates a Promise to handle asynchronous operations. It ensures code runs only after the data retrieval task has completed. Example: return new Promise((resolve, reject) =>غیر مطابقت پذیر کارروائیوں کو ہینڈل کرنے کا وعدہ بناتا ہے۔ یہ یقینی بناتا ہے کہ کوڈ صرف ڈیٹا کی بازیافت کا کام مکمل ہونے کے بعد چلتا ہے۔ مثال: نیا وعدہ واپس کریں((حل کریں، مسترد کریں) => {...})؛۔
setTimeout() Used inside a loop to create a delay between iterations, ensuring that the code checks for Tasker updates periodically. Example: await new Promise((resolve) =>تکرار کے درمیان تاخیر پیدا کرنے کے لیے ایک لوپ کے اندر استعمال کیا جاتا ہے، اس بات کو یقینی بناتے ہوئے کہ کوڈ ٹاسکر کو وقتاً فوقتاً اپ ڈیٹ کرتا ہے۔ مثال: نئے وعدے کا انتظار کریں((حل) => سیٹ ٹائم آؤٹ(حل، 500))؛۔
await ایک async فنکشن کے عمل کو اس وقت تک روکتا ہے جب تک کہ وعدہ حل نہ ہو جائے، اسے ترتیب وار غیر مطابقت پذیر آپریشنز کے لیے مفید بناتا ہے۔ مثال: loadContentWithPromise(); کا انتظار کریں۔
expect() ایک جیسٹ ٹیسٹنگ کمانڈ جو تصدیق کرتی ہے کہ آیا اصل آؤٹ پٹ متوقع آؤٹ پٹ سے میل کھاتا ہے۔ اس کا استعمال اسکرپٹ منطق کی درستگی کو درست کرنے کے لیے کیا جاتا ہے۔ مثال: expect(data).toHaveProperty('name')؛۔
throw جب کوئی حالت ناکام ہوجاتی ہے تو ایک غلطی پھینک دیتا ہے، جو ان معاملات کو سنبھالنے میں مدد کرتا ہے جہاں ڈیٹا کی بازیافت کا وقت ختم ہوجاتا ہے۔ مثال: نئی خرابی پھینک دیں ('ٹائم آؤٹ: ڈیٹا بازیافت کرنے میں ناکام')؛۔

ٹاسکر اور جاوا اسکرپٹ کے ساتھ غیر مطابقت پذیر ڈیٹا کی بازیافت کا انتظام کرنا

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

پہلا حل استعمال کرتا ہے۔ مقررہ وقفہ ایک لوپ بنانے کے لیے جو ہر 500ms پر چیک کرتا ہے اگر دو کنٹرول متغیرات۔چیک نمبر ان اور چیک نمبر آؤٹ- میچ جب قدریں ایک جیسی ہوتی ہیں، تو اس کا مطلب ہے کہ ٹاسکر نے ڈیٹا کی بازیافت مکمل کر لی ہے، اور JSON ڈیٹا کو استعمال کرتے ہوئے حاصل کیا جاتا ہے۔ عالمی(). اس کے بعد ویب ویو کو اپ ڈیٹ کر کے پارس کیے گئے ڈیٹا پر کارروائی کی جاتی ہے۔ fillHtmlElements() فنکشن غیر ضروری بار بار اپ ڈیٹس سے بچنے کے لیے، وقفہ کا استعمال کرتے ہوئے صاف کیا جاتا ہے۔ واضح وقفہ() ایک بار جب کام مکمل ہوجاتا ہے یا تکرار کی زیادہ سے زیادہ تعداد تک پہنچ جاتی ہے۔

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

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

Android WebView میں Asynchronous JavaScript Wait Loops کو نافذ کرنا

Google Places API سے ڈیٹا سنکرونائزیشن کے لیے Tasker کے ساتھ JavaScript کا استعمال

// Solution 1: Using setInterval with Control Variables for Tasker Data Retrieval
function loadContent() {
  const myInterval = setInterval(dataRetrieve, 500);
  let random = Math.random().toFixed(5);
  setGlobal('CheckNumberIn', random); // Set control variable in Tasker
  performTask('loadingGoogle', '15', this.locationType, Data.distance);
  let counter = 0;

  function dataRetrieve() {
    let answer = global('CheckNumberOut');
    if (answer === random) {
      let retrievedData = global('RetrievedData');
      this.inputData = JSON.parse(retrievedData);
      this.fillHtmlElements();
      clearInterval(myInterval); // Stop the loop
    } else if (counter < 30) {
      counter++; // Increment counter to prevent endless loop
    } else {
      clearInterval(myInterval); // Stop if max attempts reached
    }
  }
}

ٹاسکر کے ساتھ غیر مطابقت پذیر ڈیٹا کو ہینڈل کرنے کے وعدوں کا استعمال

Android WebView میں Tasker انٹیگریشن کے لیے JavaScript کے وعدوں کا فائدہ اٹھانا

// Solution 2: Promise-Based Approach for Improved Code Readability
function loadContentWithPromise() {
  let random = Math.random().toFixed(5);
  setGlobal('CheckNumberIn', random);
  performTask('loadingGoogle', '15', this.locationType, Data.distance);

  return new Promise((resolve, reject) => {
    const interval = setInterval(() => {
      let answer = global('CheckNumberOut');
      if (answer === random) {
        let retrievedData = global('RetrievedData');
        clearInterval(interval);
        resolve(JSON.parse(retrievedData)); // Resolve with data
      } else if (counter >= 30) {
        clearInterval(interval);
        reject('Timeout: Data retrieval failed');
      }
    }, 500);
  });
}
// Usage: loadContentWithPromise().then(data => console.log(data)).catch(err => console.error(err));

جیسٹ کے ساتھ غیر مطابقت پذیر جاوا اسکرپٹ افعال کی جانچ کرنا

جاوا اسکرپٹ فنکشنز کے غیر مطابقت پذیر رویے کی توثیق کرنے کے لیے تحریری یونٹ ٹیسٹ

// Solution 3: Jest Unit Test for Data Retrieval Function
const { loadContentWithPromise } = require('./yourScript');

test('should retrieve data from Tasker successfully', async () => {
  const data = await loadContentWithPromise();
  expect(data).toHaveProperty('name'); // Example assertion
});

test('should handle timeout correctly', async () => {
  try {
    await loadContentWithPromise();
  } catch (error) {
    expect(error).toBe('Timeout: Data retrieval failed');
  }
});

Async/انتظار اور کلیئر ٹائم آؤٹ کے ساتھ متبادل نقطہ نظر

ڈائنامک ٹائم آؤٹ کے ساتھ ٹاسکر ڈیٹا کو ہینڈل کرنے کے لیے Async/Await کا استعمال

// Solution 4: Async/Await with Timeout Handling
async function loadContentAsync() {
  let random = Math.random().toFixed(5);
  setGlobal('CheckNumberIn', random);
  performTask('loadingGoogle', '15', this.locationType, Data.distance);

  for (let i = 0; i < 30; i++) {
    let answer = global('CheckNumberOut');
    if (answer === random) {
      let retrievedData = global('RetrievedData');
      this.inputData = JSON.parse(retrievedData);
      this.fillHtmlElements();
      return; // Exit function when done
    }
    await new Promise((resolve) => setTimeout(resolve, 500));
  }
  throw new Error('Timeout: Unable to retrieve data');
}

ٹاسکر اور جاوا اسکرپٹ انٹیگریشن کو سنبھالنے کے بہترین طریقے

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

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

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

Tasker اور JavaScript انٹیگریشن کے بارے میں اکثر پوچھے گئے سوالات

  1. ٹاسکر ڈیٹا واپس کرنے تک لوپ کرنے کا بہترین طریقہ کیا ہے؟
  2. استعمال کرنا setInterval() یا Promise طریقوں کی سفارش کی جاتی ہے، کیونکہ وہ وقتاً فوقتاً جانچ پڑتال کی اجازت دیتے ہیں اور ڈیٹا کی بازیافت کے بعد روک سکتے ہیں۔
  3. لوپس کا استعمال کرتے وقت میں ایک ہی فنکشن کو متعدد بار انجام دینے سے کیسے بچ سکتا ہوں؟
  4. نافذ کرنا clearInterval() ڈیٹا کی بازیافت کی تصدیق ہونے کے بعد مزید عملدرآمد کو روکنے کے لیے لوپ کی حالت کے اندر۔
  5. کیا میں ٹاسکر ٹاسک کے ساتھ async/await استعمال کر سکتا ہوں؟
  6. ہاں، ٹاسکر کالز کو ایک میں لپیٹنا async کے ساتھ فنکشن await ترتیب وار عملدرآمد اور بہتر کوڈ پڑھنے کی اہلیت کو یقینی بناتا ہے۔
  7. اگر ٹاسکر ڈیٹا کبھی نہیں پہنچتا ہے تو کیا ہوگا؟
  8. آپ لوپ کے اندر ایک کاؤنٹر سیٹ کر سکتے ہیں اور استعمال کر سکتے ہیں۔ clearInterval() یا reject() ایک وعدہ اگر زیادہ سے زیادہ کوششیں کی جائیں۔
  9. کیا ٹاسکر اور جاوا اسکرپٹ مواصلات کے لیے عالمی متغیرات کا استعمال ضروری ہے؟
  10. ہاں، ٹاسکر پر انحصار کرتا ہے۔ global() بیرونی اسکرپٹ کے ساتھ ڈیٹا کا تبادلہ کرنے کے لیے متغیرات، اس لیے وہ اس انضمام کے لیے ضروری ہیں۔
  11. میں کیسے جانچ سکتا ہوں کہ آیا اسکرپٹ مختلف منظرناموں میں صحیح طریقے سے کام کرتا ہے؟
  12. جیسٹ یونٹ ٹیسٹ کا استعمال اس بات کو یقینی بناتا ہے کہ آپ کا کوڈ ٹاسکر کے مختلف نتائج اور جوابات کی نقل کرتے ہوئے صحیح طریقے سے برتاؤ کرتا ہے۔
  13. جاوا اسکرپٹ کے ساتھ ٹاسکر کا استعمال کرتے وقت عام نقصانات کیا ہیں؟
  14. دوڑ کے حالات، ضرورت سے زیادہ لوپس، اور گمشدہ ایرر ہینڈلنگ جیسے مسائل اکثر چیلنج ہوتے ہیں جن کو حل کرنے کے لیے آپٹمائزڈ لوپس اور ٹائم آؤٹ کی ضرورت ہوتی ہے۔
  15. کیا نیٹ ورک میں تاخیر میری لوپ منطق کو متاثر کر سکتی ہے؟
  16. ہاں، استعمال کرتے ہوئے انتظار کے مقررہ اوقات setTimeout() آپ کے اسکرپٹ کی وجہ سے آنے والے ڈیٹا سے محروم ہو سکتا ہے۔ متحرک پولنگ کا طریقہ استعمال کرنا بہتر ہے۔ setInterval().
  17. کیا ٹاسکر کے مختلف کاموں کے لیے ایک ہی اسکرپٹ کو دوبارہ استعمال کرنا ممکن ہے؟
  18. ہاں، اپنے کوڈ کو ماڈیولر رکھنے اور پیرامیٹرائزڈ فنکشنز کا استعمال مختلف ٹاسکر ٹاسکس میں آسانی سے دوبارہ استعمال کی اجازت دیتا ہے۔
  19. Tasker ڈیٹا کا انتظار کرتے ہوئے میں کارکردگی کو کیسے بہتر بنا سکتا ہوں؟
  20. لوپ وقفہ کو بہتر بنانا اور غیر ضروری DOM اپ ڈیٹس کو کم کرنا WebView ماحول میں کارکردگی کو برقرار رکھنے میں مدد کرتا ہے۔

Asynchronous JavaScript کو Tasker کے ساتھ بہتر بنانا

JavaScript میں موثر انتظار کے لوپس بنانا WebView اجزاء اور Tasker کے درمیان بغیر کسی رکاوٹ کے ڈیٹا کے تبادلے کو یقینی بناتا ہے۔ کنٹرول متغیرات کو صحیح طریقے سے لاگو کرنے سے، ہم پتہ لگا سکتے ہیں کہ بیرونی کام کب مکمل ہوتا ہے اور ضروری ڈیٹا کو موثر طریقے سے بازیافت کرتے ہیں۔ وعدوں اور async/await جیسی تکنیکوں کا استعمال اسکرپٹ کو مزید بہتر بناتا ہے، کارکردگی کے مسائل کو کم کرتا ہے۔

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