افوہ، میں نے اسے دوبارہ کیا: JavaScript میں عام غلطیوں کو ڈیبگ کرنا

افوہ، میں نے اسے دوبارہ کیا: JavaScript میں عام غلطیوں کو ڈیبگ کرنا

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

ہم آپ کو یاد دلاتے ہیں: "Habr" کے تمام قارئین کے لیے - "Habr" پروموشنل کوڈ کا استعمال کرتے ہوئے کسی بھی Skillbox کورس میں داخلہ لینے پر 10 rubles کی رعایت۔

Skillbox تجویز کرتا ہے: پریکٹیکل کورس "موبائل ڈویلپر پی آر او".

TypeError: پراپرٹی کی وضاحت نہیں کی گئی ہے۔

let girl = {
    name: "Lucky",
    location: "Hollywood",
    profession: "star",
    thingsMissingInHerLife: true,
    lovely: true,
    cry: function() {
        return "cry, cry, cries in her lonely heart"
    }
}
console.log(girl.named.lucky)

مندرجہ بالا مثال کوڈ غلطی کو پھینک دیتا ہے Uncaught TypeError: غیر متعینہ کی خاصیت 'لکی' کو نہیں پڑھ سکتا۔ مسئلہ یہ ہے کہ لڑکی آبجیکٹ کے پاس نام کی جائیداد نہیں ہے، حالانکہ اس میں نام کی جائیداد ہے۔ اور چونکہ لڑکی کے نام کی جائیداد کی وضاحت نہیں کی گئی ہے، آپ اس تک رسائی حاصل نہیں کر سکتے، کیونکہ رسمی طور پر یہ موجود نہیں ہے۔ لیکن اگر آپ girl.named.lucky کو girl.name سے بدل دیں تو سب کچھ کام کرے گا اور پروگرام Lucky کو واپس کر دے گا۔

آپ پراپرٹیز کے بارے میں مزید جان سکتے ہیں۔ یہاں پڑھیں.

TypeErrors کو کیسے حل کریں۔

TypeErrors اس وقت ہوتی ہے جب ایک پروگرامر ڈیٹا پر ایسی کارروائیاں کرنے کی کوشش کرتا ہے جو کسی مخصوص قسم سے میل نہیں کھاتا۔ مثالوں میں .bold( کا استعمال کرنا)، کسی غیر متعینہ پراپرٹی کے بارے میں پوچھنا، یا کسی ایسے فنکشن کو کال کرنا جو دراصل فنکشن نہیں ہے۔

لہذا، اگر آپ girl() کو کال کرنے کی کوشش کرتے ہیں، تو آپ کو یہ ایرر ملے گا Uncaught TypeError: yourVariable.bold کوئی فنکشن نہیں ہے اور گرل ایک فنکشن نہیں ہے، کیونکہ یہ اصل میں ایک ایسی چیز ہے جسے بلایا جا رہا ہے، فنکشن نہیں۔

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

اسٹیک اوور فلو۔

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

غلطیاں اس طرح نظر آتی ہیں:

خرابی: اسٹیک اسپیس سے باہر (Edge)
اندرونی خرابی: بہت زیادہ تکرار (فائر فاکس)
RangeError: کال اسٹیک کا زیادہ سے زیادہ سائز بڑھ گیا (Chrome)

اسٹیک اوور فلو ہوتا ہے اگر ڈویلپر تکرار میں بیس کیس پر غور نہیں کرتا ہے، یا اگر کوڈ مطلوبہ کیس کو ایڈریس نہیں کرتا ہے۔

function oneMoreTime(stillBelieve=true, loneliness=0) {
    if (!stillBelieve && loneliness < 0) return
    loneliness++
    return oneMoreTime(stillBelieve, loneliness)
}

اس صورت میں، stillBelieve کبھی بھی غلط نہیں ہو سکتا، اس لیے ہر بار OneMoreTime کو بلایا جائے گا، لیکن فنکشن کبھی مکمل نہیں ہوگا۔

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

function oneMoreTime(stillBelieve=true, loneliness=0) {
    if (!stillBelieve && loneliness < 0) return
    loneliness--
    stillBelieve = false
    return oneMoreTime(stillBelieve, loneliness)
}

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

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Keep on dancin' till the world ends")
}

آپ مندرجہ ذیل مسئلہ کو حل کر سکتے ہیں:

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Keep on dancin' till the world ends")
  worldEnded = true
}

لامحدود لوپس اور تکرار کو ڈیبگ کرنا

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

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

آپ یہاں اس سب کے بارے میں مزید پڑھ سکتے ہیں (کروم کے لیے) اور یہاں (فائر فاکس کے لیے).

نحو کی خرابی

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

تبصروں میں اشتراک کریں: آپ غلطیوں کو روکنے یا ان کا فوری پتہ لگانے اور انہیں ختم کرنے کے لیے کیا کرتے ہیں؟

Skillbox تجویز کرتا ہے:

ماخذ: www.habr.com

نیا تبصرہ شامل کریں