আমার 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 Don't Know JS (1st Edition)
- ব্যাখ্যা করে, কেন
thisএড়িয়ে চলা উচিত - ব্যাখ্যা করে, কেন JS-এ মাঝে মাঝে আপাতদৃষ্টিতে অদ্ভুত জিনিস ঘটে (মূল শব্দ: Lexical Scope, Closures)
৪. সেমিকোলন
- সবসময় দিন
- এটি বাধ্যতামূলক নয়, তবে উদাহরণস্বরূপ এই ফাঁদ এড়াতে সাহায্য করতে পারে: Stack Overflow
- JavaScript নিজে থেকেই সেমিকোলন বসিয়ে দেয়:
// you want to return 5 and have ugly formatting:
return
5
// JavaScript Interpretation:
return;
5;
৫. লজিক্যাল অপারেটর && ও ||
- Java-তে
a && bওa || bবুলিয়ান বীজগণিত অনুযায়ী evaluate হয়।aওb-কে অবশ্যই Boolean হতে হবে। - JavaScript-এ:
a && b-এর ক্ষেত্রেatrue হলেbরিটার্ন হয়a || b-এর ক্ষেত্রেafalse হলেbরিটার্ন হয়
এভাবে expression-ও জুড়ে দেওয়া যায়, আর তাতে পাওয়া যায় সম্ভবত সবচেয়ে ছোট if-statement – Syntax Sugar:
isAdmin && showDeleteButton();- (সঠিকভাবে বললে, এটি আর statement নয়)
ডিফল্ট ভ্যালুর জন্যও এটি প্রায়ই ব্যবহার হয়:
let sendNewsletter = form.getNewsletterOptIn() || false;
৬. 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-এর ক্ষেত্রে)।