JavaScript একটি ডাইনামিক, প্রোটোটাইপ-ভিত্তিক ভাষা। এতে অল্প কিছু প্রিমিটিভ আছে, আর বাকি সবকিছুকে অবজেক্ট হিসেবে ধরা হয়।
ওয়েব পেজের স্ক্রিপ্টিং ভাষা হিসেবে এটি সবচেয়ে বেশি পরিচিত হলেও, Node.js-এর মতো অনেক নন-ব্রাউজার পরিবেশও এটি ব্যবহার করে। ভাষাটি সক্রিয়ভাবে উন্নয়ন করা হচ্ছে; আর এর মাল্টি-প্যারাডাইম বৈশিষ্ট্যের কারণে এটি নানা ধরনের প্রোগ্রামিং স্টাইল সমর্থন করে। JavaScript একটি ডাইনামিক ভাষা, যা অবজেক্ট-ওরিয়েন্টেড, ইম্পারেটিভ ও ডিক্লারেটিভ (যেমন ফাংশনাল প্রোগ্রামিং) স্টাইল সমর্থন করে।
JavaScript-এ নামের সঙ্গে মান অ্যাসাইন করার কয়েকটি প্রধান উপায় আছে: ভ্যারিয়েবল বা কনস্ট্যান্ট ব্যবহার করা। Exercism-এ ভ্যারিয়েবল সবসময় camelCase শৈলীতে লেখা হয়; আর কনস্ট্যান্ট লেখা হয় SCREAMING_SNAKE_CASE শৈলীতে। মানার মতো কোনো একক সরকারি নির্দেশিকা নেই, আর বিভিন্ন কোম্পানি ও প্রতিষ্ঠানের স্টাইল গাইডও বিভিন্ন রকম। ভ্যারিয়েবল আপনার ইচ্ছেমতো যেকোনোভাবেই লিখতে পারেন। অনুশীলনীগুলো যেভাবে তৈরি করা হয়েছে সেভাবে লিখলে সুবিধা হলো, ওয়েব ইন্টারফেস ও বেশিরভাগ IDE-তে সেগুলো আলাদাভাবে হাইলাইট হবে।
JavaScript-এ ভ্যারিয়েবল const, let বা var কিওয়ার্ড দিয়ে ডিফাইন করা যায়।
let বা var ব্যবহার করলে একটি ভ্যারিয়েবল তার জীবনকালে বিভিন্ন মান নির্দেশ করতে পারে। উদাহরণস্বরূপ, = অ্যাসাইনমেন্ট অপারেটর দিয়ে myFirstVariable অনেকবার ডিফাইন ও পুনরায় ডিফাইন করা যায়:
let myFirstVariable = 1;
myFirstVariable = 'Some string';
myFirstVariable = new SomeComplexClass();
let ও var-এর বিপরীতে, const দিয়ে ডিফাইন করা ভ্যারিয়েবলে কেবল একবারই মান অ্যাসাইন করা যায়। JavaScript-এ এভাবেই কনস্ট্যান্ট ডিফাইন করা হয়।
const MY_FIRST_CONSTANT = 10;
// Can not be re-assigned.
MY_FIRST_CONSTANT = 20;
// => TypeError: Assignment to constant variable.
const কিওয়ার্ডের কথা ভ্যারিয়েবল ও কনস্ট্যান্ট দুটোর ক্ষেত্রেই বলা হয়। কনস্ট্যান্টের আশেপাশে প্রায়ই আরেকটি ধারণার কথা ওঠে, সেটি হলো (ইম-)মিউটেবিলিটি।
const কিওয়ার্ড কেবল বাইন্ডিংটিকে ইমিউটেবল করে, অর্থাৎ একটি const ভ্যারিয়েবলে আপনি কেবল একবারই মান অ্যাসাইন করতে পারেন। JavaScript-এ কেবল প্রিমিটিভ মানই ইমিউটেবল। তবে নন-প্রিমিটিভ মান মিউটেট করা যায়।
const MY_MUTABLE_VALUE_CONSTANT = { food: 'apple' };
// This is possible
MY_MUTABLE_VALUE_CONSTANT.food = 'pear';
MY_MUTABLE_VALUE_CONSTANT;
// => { food: "pear" }
নিয়ম হিসেবে, Exercism-এ এবং আরও অনেক প্রতিষ্ঠান ও প্রকল্পের স্টাইল গাইডে, const SCREAMING_SNAKE_CASE-এর মতো দেখতে মান মিউটেট করা হয় না। প্রযুক্তিগতভাবে মানগুলো পরিবর্তন করা যায়, তবে স্পষ্টতা ও প্রত্যাশা ঠিক রাখার জন্য Exercism-এ এটি নিরুৎসাহিত করা হয়। এটি অবশ্যই কার্যকর করতে হলে Object.freeze(value) ব্যবহার করুন।
const MY_VALUE_CONSTANT = Object.freeze({ food: 'apple' });
// This silently fails
MY_VALUE_CONSTANT.food = 'pear';
MY_VALUE_CONSTANT;
// => { food: "apple" }
বাস্তব কোডবেজে সর্বত্র Object.freeze দেখা যাওয়ার সম্ভাবনা কম, তবে SCREAMING_SNAKE_CASE মান কখনও মিউটেট না করার নিয়মটি ভালোই; প্রায়শই লিন্টারের মতো স্বয়ংক্রিয় বিশ্লেষণ দিয়ে এটি কার্যকর করা হয়।
JavaScript-এ কার্যকারিতার এককগুলো ফাংশনে মোড়া থাকে; সাধারণত একসঙ্গে থাকার মতো ফাংশনগুলো একই ফাইলে একত্রে রাখা হয়। এই ফাংশনগুলো প্যারামিটার (আর্গুমেন্ট) নিতে পারে, আর return কিওয়ার্ড দিয়ে একটি মান রিটার্ন করতে পারে। ফাংশন কল করা হয় () সিনট্যাক্স দিয়ে।
function add(num1, num2) {
return num1 + num2;
}
add(1, 3);
// => 4
💡 JavaScript-এ ফাংশন ডিক্লার করার অনেক ভিন্ন উপায় আছে। এই অন্য উপায়গুলো
functionকিওয়ার্ড ব্যবহারের চেয়ে দেখতে আলাদা। ট্র্যাকটি ধীরে ধীরে সেগুলো চালু করার চেষ্টা করে, তবে আপনি যদি এগুলো সম্পর্কে আগেই জানেন, তবে যেকোনোটি ব্যবহার করতে পারেন। বেশিরভাগ ক্ষেত্রেই একটি বা অন্যটি ব্যবহার করা ভালো বা খারাপ কিছু নয়।
export ও import কিওয়ার্ড দুটি শক্তিশালী হাতিয়ার, যা একটি সাধারণ JavaScript ফাইলকে JavaScript মডিউলে পরিণত করে। ফাংশন, ক্লাস, ভ্যারিয়েবল ও কনস্ট্যান্টের মতো কম্পোনেন্ট নির্বাচিতভাবে প্রকাশ করার সুযোগ দেওয়ার পাশাপাশি এটি আরও অনেক ধরনের সুবিধা চালু করে, যেমন:
একটি বাস্তব উদাহরণ হলো Exercism-এর JavaScript ট্র্যাকে টেস্টগুলো যেভাবে কাজ করে। প্রতিটি অনুশীলনীতে অন্তত একটি ইমপ্লিমেন্টেশন ফাইল থাকে, যেমন lasagna.js, আর প্রতিটি অনুশীলনীতে অন্তত একটি টেস্ট ফাইল থাকে, যেমন lasagna.spec.js। ইমপ্লিমেন্টেশন ফাইলটি পাবলিক API প্রকাশ করতে export ব্যবহার করে, আর টেস্ট ফাইলটি সেগুলো ব্যবহার করতে import ব্যবহার করে, এভাবেই এটি ইমপ্লিমেন্টেশনের ফলাফল পরীক্ষা করতে পারে।
// file.js
export const MY_VALUE = 10;
export function add(num1, num2) {
return num1 + num2;
}
// file.spec.js
import { MY_VALUE, add } from './file';
add(MY_VALUE, 5);
// => 15