আমার Best Practices – JavaScript

১. ক্যাশ বন্ধ করুন

Firefox:
Developer Tools খুলুন -> Settings খুলুন (F1) -> "Disable HTTP Cache (when toolbox is open)"

Chrome:
Developer Tools খুলুন -> Settings খুলুন (F1) -> "Disable cache (while DevTools is open)"

২. JS কনসোল খোলা রাখুন

Dev Tools-এ Console ট্যাবটি খুলে খোলা রাখুন, যাতে ধাপ ১ কার্যকর থাকে এবং নেটওয়ার্ক ও JS-এর ত্রুটিগুলোও চোখে পড়ে।

এই প্লাগইনটিও ব্যবহার করে দেখার মতো, যা JS-এর ত্রুটি আরও ভালোভাবে দেখায় – যখন আপনি নিজে নজর রাখতে ভুলে যান:

৩. JavaScript: অবশ্যপাঠ্য “You Don't Know JS”

৪. সেমিকোলন

// you want to return 5 and have ugly formatting:
return
5

// JavaScript Interpretation:
return;
5;

৫. লজিক্যাল অপারেটর && ও ||

এভাবে expression-ও জুড়ে দেওয়া যায়, আর তাতে পাওয়া যায় সম্ভবত সবচেয়ে ছোট if-statement – Syntax Sugar:

ডিফল্ট ভ্যালুর জন্যও এটি প্রায়ই ব্যবহার হয়:

৬. JavaScript কি pass-by-reference, নাকি pass-by-value?

JavaScript-এ ব্যাপারটা বেশ মজার। উদাহরণ:

function changeStuff(a, b, c) {
    a = a * 10;
    b.item = "changed";
    c = {item: "changed"};
}

var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};

changeStuff(num, obj1, obj2);

console.log(num);
console.log(obj1.item);
console.log(obj2.item);

এটি নিচের আউটপুট দেয়:

10
changed
unchanged

obj1 যদি আদৌ কোনো রেফারেন্স না হতো, তবে obj1.item বদলালে ফাংশনের বাইরের obj1-এর ওপর কোনো প্রভাবই পড়ত না।

আর্গুমেন্টটি যদি সত্যিকারের রেফারেন্স হতো, তবে সবকিছুই বদলে যেত: num হতো 100, আর obj2.item-এ থাকত “changed”। তার বদলে num থাকে 10 এবং obj2.item থাকে “unchanged”।

আসলে পাস করা এলিমেন্টটি ভ্যালু হিসেবেই পাস হয়। তবে যা ভ্যালু হিসেবে পাস হয়, সেটি নিজেই একটি রেফারেন্স। টেকনিক্যালি একে call-by-sharing বলা হয়।

বাস্তবে এর অর্থ: আপনি যদি প্যারামিটারটিকেই বদলান (যেমন num ও obj2-এর ক্ষেত্রে), তবে ফাংশনে পাঠানো মূল অবজেক্টের ওপর তার কোনো প্রভাব পড়ে না। কিন্তু প্যারামিটারের ভেতরের ভ্যালু বদলালে সেই পরিবর্তন থেকে যায় (যেমন obj1-এর ক্ষেত্রে)।