JavaScript Strict Mode

JavaScript Strict Mode

Strict Mode কী?

জাভাস্ক্রিপ্টের strict mode বলতে আসলে কী বোঝায়? ধরেন আপনার স্কুলের একজন শিক্ষক খুবই ভাল, লিবারেল। আপনি ক্লাসে দোষ করলে বা চিৎকার, চেঁচামেচি করলেও কিছু বলেন না। আরেকজন শিক্ষক আছেন যিনি কোনো খারাপ আচরণ বরদাস্ত করেন না। তো আমরা এমন শিক্ষকদের কী বলি? উনি অনেক স্ট্রিক্ট। জাভাস্ক্রিপ্টে এমন কিছু বাজে বা ব্যাড কোড আছে যা কোনো এরর প্রদর্শন করে না। সেগুলো এক্সিকিউট হয়ে যায় ঠিকই, কিন্তু ব্যাড প্র্যাকটিস হিসেবে গণ্য করা হয়। স্ট্রিক্ট মুড এনেবল করা মানে হলো কোনো বাজে কোড আমি বরদাস্ত করবো না আমার কোডবেজে। বাজে কোড লিখলেই সেটা এক্সিকিউট হবে না। উপরন্তু এরর প্রদর্শন করবে। এই strict mode ECMAScript 5 এ introduce করা হয়েছে।

জাভাস্ক্রিপ্টে কিভাবে strict mode ব্যবহার করবো?

জাভাস্ক্রিপ্টে strict mode দুইভাবে এনেবল করা যায়।

  • আপনি যদি পুরো জাভাস্ক্রিপ্ট ফাইলের জন্য strict mode এনেবল করতে চান তাহলে জাভাস্ক্রিপ্ট ফাইলের একদম উপরে "use strict"; এই ডিরেক্টিভটি লিখে দিতে হবে।

      "use strict";
    
      // Your codes
    
  • আপনি যদি শুধু নির্দিষ্ট কোনো ফাংশনের জন্য এটি এনেবল করতে চান তবে ফাংশন বডির একদম উপরে "use strict" ডিরেক্টিভ লিখে দিতে হবে। এক্ষেত্রে শুধুমাত্র ঐ নির্দিষ্ট ফাংশন strict mode এর আওতায় পড়বে। অন্য কোনো কোড এর আওতায় পড়বে না।

      // Other codes
    
      function demo() {
          "use strict";
    
          // function body
      }
    
      // Another codes
    

Strict Mode এবং রেগুলার জাভাস্ক্রিপ্টের মধ্যে পার্থক্য

আমরা যে বলেছিলাম কোনো বাজে কোড আমাদের কোডবেজে আমরা বরদাস্ত করবো না strict mode এনেবল করার মাধ্যমে, এখন দেখবো কি কি বাজে কোড strict mode এর মাধ্যমে আমরা এক্সিকিউট করা থেকে বিরত থাকতে পারি।

Declare করার পূর্বে কোনো ভ্যারিয়েবল ব্যবহার করা

কোনো ভ্যারিয়েবল বা অবজেক্ট ব্যবহার করার পূর্বে অবশ্যই তা ডিক্লেয়ার করতে হবে, যদি আমরা strict mode ব্যবহার করি। অর্থাৎ কোনো undeclared ভ্যারিয়েবল ব্যবহার করা যাবে না। এটা আমাদের ভুলবশত গ্লোবাল ভ্যারিয়েবল ক্রিয়েট করা থেকে বাঁচিয়ে দেয়।

রেগুলার জাভাস্ক্রিপ্টে নিচের কোডটি এক্সিকিউট হয়ে যাবে।

user = 'Aditya';
console.log(user); // Aditya

কিন্তু স্ট্রিক্ট মুডে এটি এক্সিকিউট তো হবেই না, উপরন্তু এরর শো করবে।

'use strict';

user = 'Aditya';
console.log(user); // Aditya

ফাংশনে ডুপ্লিকেট প্যারামিটার ব্যবহার করা

Strict Mode এ ফাংশনে ডুপ্লিকেট প্যারামিটার ব্যবহার করতে পারবো না আমরা। যেমন রেগুলার জাভাস্ক্রিপ্টে নিচের কোডটি খুব সুন্দরভাবে কাজ করবে।

function sum(param1, param1) {
    return param1 + param1;
}

console.log(sum(3, 2));

কিন্তু strict mode এ এটি এরর শো করবে।

function sum(param1, param1) {
    'use strict';

    return param1 + param1;
}

console.log(sum(3, 2));

Reserved Keywords ব্যবহার করা

Strict Mode এ আমরা জাভাস্ক্রিপ্টের reserved keywords যেমন: public, static , yield , interface , protected , private , arguments ব্যবহার করতে পারবো না।

const private = 'This is a private variable.';
console.log(private);

এখন যদি strict mode এনেবল করি তাহলে আমাদের একটা এরর দিবে।

'use strict';

const private = 'This is a private variable.';
console.log(private);

Read-Only প্রোপার্টিতে নতুন ভ্যালু অ্যাসাইন করা

Non-strict mode এ যখন আমরা read-only প্রোপার্টিতে নতুন ভ্যালু অ্যাসাইন করতে যাই, প্রোপার্টির ভ্যালু মডিফাই হবে না। সেই সাথে কোনো এররও থ্রো করবে না। সাইলেন্টলি এই অ্যাসাইনমেন্ট ফেইল করবে এবং আগের ভ্যালুই থেকে যাবে।

const obj = {};

Object.defineProperty(obj, 'x', { value: 10, writable: false });

obj.x = 20;

console.log(obj.x);

কিন্তু যখন আমরা strict mode এনেবল করবো তখন এটি একটা এরর থ্রো করবে।

'use strict';

const obj = {};

Object.defineProperty(obj, 'x', { value: 10, writable: false });

obj.x = 20;

console.log(obj.x);

যেসব জাভাস্ক্রিপ্ট ফিচারে Strict Mode ব্যবহার করার প্রয়োজন নেই

কিছু কিছু জাভাস্ক্রিপ্ট ফিচার আছে যেগুলো by default strict mode ব্যবহার করে। এসব ফিচারগুলোর মধ্যে কয়েকটি হলো:

  • ES6 classes

  • ES6 modules

  • Arrow Function

  • Tagged template literals

Conclusion

মোটামুটি এই হলো strict mode। জাভাস্ক্রিপ্ট একটি ফরগিভিং ল্যাঙ্গুয়েজ। কিন্তু এর ফরগিভিং ন্যাচার মাঝে মাঝে আমাদের জন্য অনেক বড় সমস্যা বয়ে নিয়ে আসে। তার জন্য এই strict mode এসেছে। আশা করি এই আর্টিকেল থেকে আপনারা strict mode এর ব্যবহার ভালভাবে বুঝতে পেরেছেন।