জাভাস্ক্রিপ্ট ওভারভিউ

Did you know that you can read content offline by using one of these tools? If you would like to read offline MDN content in another format, let us know by commenting on Bug 665750.

Dash App
  • Tags
  • Files

এই অধ্যায়ে আমরা জাভাস্ক্রিপ্টের সঙ্গে পরিচয় করিয়ে দেব এবং এর মৌলিক ধারণাগুলো নিয়ে আলোচনা করব।

জাভাস্ক্রিপ্ট কী?

জাভাস্ক্রিপ্ট একটি ক্রস-প্লাটফর্ম, অবজেক্ট ওরিয়েন্টেড স্ক্রিপ্টিং ভাষা। জাভাস্ক্রিপ্ট ছোট, হালকা একটি ভাষা; এটি নিজে নিজে কারও সাহায্য ছাড়া খুব উপকারী না হলেও অন্যান্য প্রোডাক্ট ও এ্যাপ্লিকেশনে সংযুক্ত করে দেওয়া যায় (যেমন ধরুন ওয়েব ব্রাউজার, কোন হোস্ট পরিবেশে)। জাভাস্ক্রিপ্টকে উক্ত পরিবেশের অবজেক্টগুলো সঙ্গে সংযুক্ত করে ফাটাফাটি কোডিং করা সম্ভব।

জাভাস্ক্রিপ্ট কোরে (মূল অংশে) মৌলিক কিছু অবজেক্ট আছে, যেমন Array, Date আর Math, আছে কিছু কোর প্রোগ্রামিং এলিমেন্ট যেমন ওপারেটর, কন্ট্রোল স্ট্রাকচার (ইফ-এলস লজিল লেখা, লুপিং করা) আর আছে স্টেটমেন্ট। বাড়তি অবজেক্ট সরবরাহ করে কোর জাভাস্কিপ্টকে মন-মত কাজ করানোর জন্য এক্সটেন্ড করে নেওয়া যায়। যেমনঃ

ক্লায়েন্ট-সাইডে চলে এমন জাভাস্ক্রিপ্টগুলো করেছে কীঃ ব্রাউজারের ওপর ছড়ি ঘোরানোর জন্য কিছু অবজেক্ট নিয়ে এসেছে (Navigator অথবা অন্যান্য ওয়েব ব্রাউজার) আর এনেছে ডকুমেন্ট-অবজেক্ট-মডেল (DOM)। উদাহরণ হিসেবে বলা যায়, ক্লায়েন্ট সাইডে চলে এমন জাভাস্ক্রিপ্ট যেকোন এপ্লিকেশনকে HTML ফরমে এলিমেন্ট যোগ-বিয়োগ করার সুবিধা দেয় কিংবা ব্যবহারকারী কোন কিছু করলে যেমন মাউস ক্লিক, ফর্মের ইনপুট কিংবা এক পেইজ থেকে অন্য পেইজে গেলে যেসব ইভেন্ট হয় সেগুলোতে রেস্পন্ড করার সুযোগ দেয়। আবার সার্ভারে যেসব জাভাস্ক্রিপ্ট চলে সেগুলো কোর অবজেক্টের পাশাপাশি সার্ভার-সম্পর্কিত অবজেক্টগুলো সরবরাহ করে। এইসব বাড়তি অবজেক্ট ব্যবহার করে কোন সার্ভার এপ্লিকেশন রিলেশনাল ডেটাবেইজের সাথে আদান-প্রদান করতে পারবেন, এপ্লিকেশনের এক জায়গা থেকে অন্যখানে তথ্যপ্রবাহ ঠিকমত করা অথবা সার্ভারের ফাইল নিয়ে নাড়াচাড়া করতে পারবেন।

জাভাস্ক্রিপ্টের LiveConnect সুবিধা ব্যবহার করে জাভা আর জাভাস্ক্রিপ্ট পরস্পরের সাথে যোগাযোগ করতে পারে। জাভা অবজেক্ট instantiate করা অথবা এদের পাবলিক মেথড/ফিল্ড এক্সেস করুন জাভাস্ক্রিপ্ট দিয়ে। আবার জাভা থেকে পারবেন জাভাস্ক্রিপ্ট অবজেক্ট, এদের প্রোপারররটি, মেথড এক্সেস করতে।

জাভাস্ক্রিপ্ট প্রথম নিয়ে এসেছে নেটস্কেপ। জাভাস্ক্রিপ্টের প্রথম ব্যবহার-ও হয় নেটস্কেপ ব্রাউজারে।

জাভাস্ক্রিপ্ট এবং জাভা

জাভাস্ক্রিপ্ট আর জাভার মধ্যে মিল - অমিল দুই-ই আছে। জাভাস্ক্রিপ্ট জাভার "মতই" কিন্তু জাভার স্ট্যাটিক টাইপিং (যেমন ভ্যারিয়েবলের টাইপ যেভাবে ডিক্লেয়ার করেছেন - পুরো প্রোগ্রামে তাই থাকবে) আর শক্ত-পোক্ত টাইপ-চেকিং ইত্যাদি জাভাস্ক্রিপ্টে নাই। জাভার অনেক এক্সপ্রেশন সিন্ট্যাক্স, নামকরণের রীতিনীতি (naming conventions) আর বেসিক কন্ট্রোল-ফ্লো স্ট্রাকচার ইত্যাদি জাভাস্ক্রিপ্টেও একইরকম - যেকারণে শুরুতে এর নাম LiveScript থাকলেও পরে হয়ে যায় JavaScript।

জাভায় ক্লাসগুলো কম্পাইল হওয়ার সময়তেই declare হয়ে যায়, কিন্তু জাভাস্ক্রিপ্ট নাম্বার, বুলিয়ান, স্ট্রিং ভ্যালু এসবের মত অল্প কিছু ডেটা-টাইপ ভিত্তিক রান-টাইম সিস্টেম দেয় আমাদের। আমরা ক্লাস-ভিত্তিক অবজেক্ট মডেলে কাজ করে এসেছি c++/Java এসব ভাষায়, কিন্তু জাভাস্ক্রিপ্ট হচ্ছে প্রটোটাইপ ভিত্তিক অবজেক্ট মডেল। এই প্রটোটাইপ ভিত্তিক মডেলের জন্য রানটাইমে inheritence অর্জন করা সম্ভব - মানে ভিন্ন ভিন্ন অবজেক্ট বিভিন্ন ভাবে ইনহেরিটেড হতে পারে। (যারা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এর সাথে অভ্যস্ত না তারা এই বিষয়গুলো পরে শিখে নিতে পারেন।) জাভাস্ক্রিপ্টে ফাংশন তৈরি করাও অনেক সহজ। জাভা-সি এর মত সিগনেচার ম্যাচ করার বালাই নেই। ফাংশন কে যেকোন অবজেক্টের প্রোপার্টি হিসেবে ব্যবহার করা যায় - এদের execute করা যায় দুর্বল-ভাবে টাইপড (loosely typed) মেথডের মত।

জাভার সাথে আরো পার্থক্য হল জাভাস্ক্রিপ্টে অনেকটাই ফ্রি-ফর্ম। সব ভ্যারিয়েবল, ক্লাস, মেথড কে ডিক্লেয়ার করতে হবে না। পাব্লিক-প্রাইভেট-প্রোটেকটেড এক্সেস এর বালাই নেই। ইন্টারফেস ইমপ্লিমেন্ট বলে কিছু নেই জাভাস্ক্রিপ্টে। আরো পার্থক্য হল ভ্যারিয়েবল, প্যারামিটার আর ফাংশনের রিটার্ন টাইপ ও শক্ত-পোক্ত না, যেকোন টাইপের ভ্যালু দিতে পারেন - বা আদৌ না-ও দিতে পারেন।

জাভা ক্লাস-ভিত্তিক প্রোগ্রামিং ভাষা - দ্রুত যেনো চলে এভাবেই ডিজাইন করা হয়েছে একে। জাভা টাইপ সেইফ - মানে হচ্ছে আপনি জাভা'র integer কে কোন অবজেক্ট রেফারেন্সে টাইপ কাস্ট করতে পারবেন  না অথবা জাভার বাইটকোড নষ্ট করে প্রাইভেট মেমরিতে হাত দিতে পারবেন না। জাভা'র ক্লাস-ভিত্তিক মডেলের জন্য কোডে শুধুই ক্লাস আর তাদের মেথডের ব্যবহার দেখা যায়। জাভার ক্লাস ইনহেরিট করার সুবিধা আর শক্তপোক্ত টাইপিং এর জন্যে অবজেক্টগুলো একে অপরের সাথে ঘনিষ্টভাবে সম্পর্কিত থাকে - তার মানে জাভাস্ক্রিপ্ট থেকে জাভায় কোড করা একটু জটিল-ই বটে!

পক্ষান্তরে জাভাস্ক্রিপ্ট ছোট-খাট, ডায়নামিক টাইপ প্রোগ্রামিং ভাষা - HyperTalk, dBASE এদের মত। এই স্ক্রিপ্টিং ভাষাগুলোর সিন্ট্যাক্স সহজ, অনেক কাজ-ই বিল্ট-ইন হিসেবে আসে আর এগুলোতে অবজেক্ট তৈরি করাও অনেক সহজ - তাই তুলনামূলক ভাবে অনেক বেশি লোক বেসিক জাভাস্ক্রিপ্ট নিয়ে কাজ করতে পারে।

সারণী ১.১ জাভা'র সাথে জাভাস্ক্রিপ্টের তুলনা
জাভাস্ক্রিপ্ট জাভা
অবজেক্ট-ওরিয়েন্টেড। অবজেক্টের টাইপের মাঝে কোন পার্থক্য নাই। প্রোটোটাইপ পদ্ধতির মাধ্যমে ইনহেরিটেন্স অর্জন করা হয়। যেকোন অবজেক্টে যেকোন সময় প্রোপার্টি আর মেথড যোগ বিয়োগ করা যায়! ক্লাস-ভিত্তিক। ক্লাস আর ক্লাসের ইন্সট্যান্স এর মাঝে স্পষ্ট পার্থক্য আছে। ক্লাস hierarchy এর মাধ্যমে ইনহেরিটেন্স অর্জন করা হয়। ক্লাস বা ক্লাসের ইন্সট্যান্সে যেকোন সময় প্রোপার্টি বা মেথড যোগ-বিয়োগ করা যায় না।
ভ্যারিয়েবলের ডেটা টাইপ ডিক্লেয়ার করার প্রয়োজন নাই (ডায়নামিক টাইপ) ভ্যারিয়েবলের ডেটা টাইপ অবশ্যই ডিক্লেয়ার করতে হবে (static টাইপ)
হার্ডডিস্কে সরাসরি লিখতে পারে না। ডিস্কে সরাসরি লিখতে পারে।

জাভা আর জাভাস্ক্রিপ্টের পার্থক্য নিয়ে আরো বিশদ বর্ণনার জন্য অবজেক্ট মডেলের বিস্তারিত বিবরণ দেখুন।

জাভাস্ক্রিপ্ট এবং ECMAScript নির্দেশিকা

নেটস্কেপ জাভাস্ক্রিপ্ট প্রথম নিয়ে আসে, আর জাভাস্ক্রিপ্ট-ও প্রথম ব্যবহৃত হয় নেটস্কেপ ব্রাউজারগুলোতে। তবে, নেটস্কেপ, কোর জাভাস্ক্রিপ্টের ওপর ভিত্তি করে আন্তর্জাতিক মানের একটি স্ট্যান্ডার্ড প্রোগ্রামিং ভাষা উপহার দেওয়ার জন্য Ecma International (European Computer Manufacturers Association এর সংক্ষিপ্ত রূপ) - তথ্য আর যোগাযোগ স্ট্যান্ডার্ড করার একটি ইউরোপীয় সংস্থা'র সাথে কাজ করছে।  জাভাস্ক্রিপ্টের এই স্ট্যান্ডার্ড সংস্করণের নাম হল ECMAScript - স্ট্যান্ডার্ড মেনে চলে এমন সব এপ্লিকেশনে যাতে একইরকম আচরণ করে। কোম্পানিগুলো চাইলেই এই মুক্ত স্ট্যান্ডার্ড অনুসরণ করে জাভাস্ক্রিপ্ট ইমপ্লিমেন্ট করতে পারে। ECMA-262 নির্দেশিকায় ECMAScript স্ট্যান্ডার্ডের বিবরণ দেওয়া আছে।

এছাড়া ECMA-262 স্ট্যান্ডার্ডটি ISO-16262 হিসেবে ISO (International Organization for Standardization) অনুমোদিত। মজিলা ওয়েবসাইটে এর একটি পুরোনো PDF ভার্সন পাওয়া যাবে। এছাড়াও the Ecma International ওয়েবসাইটে আপনি এবিষয়ে তথ্য পাবেন। ECMAScript নির্দেশিকায় অবশ্য ডকুমেন্ট অবজেক্ট মডেল (DOM) নিয়ে কোন আলোচনা নেই, কারণ এর স্ট্যান্ডার্ড নিয়ে কাজ করে আবার World Wide Web Consortium (W3C)। DOM এ যেভাবে বিবরণ আছে ঠিক একইভাবে আপনার লেখা জাভাস্ক্রিপ্ট কোডে অবজেক্ট হিসেবে HTML কে পেয়ে যাবেন।

জাভাস্ক্রিপ্ট ভার্সন আর ECMAScript সংস্করণের মধ্যে সম্পর্ক

ECMAScript নির্দেশিকা (ECMA-262) তৈরির পেছনে নেটস্কেপ আর Ecma International খুবই ঘনিষ্টভাবে কাজ করেছে। নিচের সারণিতে জাভাস্ক্রিপ্ট আর ECMAScript সংস্করণের মাঝে সম্পর্ক তুলে ধরলামঃ

 

সারণী ১.২ জাভাস্ক্রিপ্ট আর ECMAScript সংস্করণের সম্পর্ক
জাভাস্ক্রিপ্ট ভার্সন ECMAScript সংস্করণের সাথে সম্পর্ক
জাভাস্ক্রিপ্ট ১.১ ECMA-262, Edition 1 - JavaScript 1.1 এর ওপর ভিত্তি করে তৈরি।
JavaScript 1.2 ECMA-262 was not complete when JavaScript 1.2 was released. JavaScript 1.2 is not fully compatible with ECMA-262, Edition 1, for the following reasons:
  • Netscape developed additional features in JavaScript 1.2 that were not considered for ECMA-262.
  • ECMA-262 adds two new features: internationalization using Unicode, and uniform behavior across all platforms. Several features of JavaScript 1.2, such as the Date object, were platform-dependent and used platform-specific behavior.
JavaScript 1.3 JavaScript 1.3 is fully compatible with ECMA-262, Edition 1.
JavaScript 1.3 resolved the inconsistencies that JavaScript 1.2 had with ECMA-262, while keeping all the additional features of JavaScript 1.2 except == and !=, which were changed to conform with ECMA-262.
JavaScript 1.4 ECMA-262, Edition 1 এর সাথে জাভাস্ক্রিপ্ট 1.4 পুরোপুরি সামঞ্জস্যপূর্ণ। তবে ECMAScript নির্দেশিকার ৩ সংস্করণের সম্পূর্ণ হয়নি জাভাস্ক্রিপ্ট 1.4 প্রকাশিত হওয়ার সময়।
JavaScript 1.5 ECMA-262, সংস্করণ ৩ এর সাথে জাভাস্ক্রিপ্ট 1.5 পুরোপুরি সামঞ্জস্যপূর্ণ।
Note: ECMA-262, Edition 2 consisted of minor editorial changes and bug fixes to the Edition 1 specification. The current release by the TC39 working group of Ecma International is ECMAScript Edition 5.1

The JavaScript Reference indicates which features of the language are ECMAScript-compliant.

JavaScript will always include features that are not part of the ECMAScript Specification; JavaScript is compatible with ECMAScript, while providing additional features.

JavaScript Documentation versus the ECMAScript Specification

The ECMAScript specification is a set of requirements for implementing ECMAScript; it is useful if you want to determine whether a JavaScript feature is supported in other ECMAScript implementations. If you plan to write JavaScript code that uses only features supported by ECMAScript, then you may need to review the ECMAScript specification.

The ECMAScript document is not intended to help script programmers; use the JavaScript documentation for information on writing scripts.

জাভাস্ক্রিপ্ট আর ECMAScript টার্মিনলজি

ECMAScript নির্দেশিকায় এমন কিছু নামকরণ (terminology) ব্যবহৃত হয়ে থাকতে পারে যেগুলো জাভাস্ক্রিপ্ট প্রোগ্রামারের কাছে পরিচিত নয়। ভাষার বর্ণনা একটু অন্যরকম লাগলেও, আসল কাজ একই। ECMAScript নির্দেশিকায় যা বলা হয়েছে জাভাস্ক্রিপ্টে তার সব-ই আছে।

একজন জাভাস্ক্রিপ্ট প্রোগ্রামারের যা প্রয়োজন, সেই আঙ্গিকেই জাভাস্ক্রিপ্ট ডকুমেন্ট তৈরি করা হয়েছে। যেমনঃ

  • গ্লোবাল অবজেক্ট নিয়ে আমরা আলোচনা ক্রিনি কারণ আপনি সরাসরি এটি কখনোই ব্যবহার করেন না। গ্লোবাল অবজেক্টের যেই মেথড আর প্রোপার্টি নিয়ে আপনি কাজ করবেন, সেগুলোই শুধু টপ-লেভেল ফাংশন/প্রোপার্টি হিসেবে ডকুমেন্টে রাখা হয়েছে।
  •  Number আর String অবজেক্টের প্যারামিটার-বিহীন কন্সট্রাক্টরের ব্যবহার দেখানো হয়নি - কারণ আসলে এটি তেমন কোন কাজে লাগে না বললেই চলে। কোন আর্গুমেন্ট ছাড়া Number constructor ব্যবহার করলে +0 রিটার্ন করে, আর আর্গুমেন্ট ছাড়া String constructor রিটার্ন করে "" (ফাকা স্ট্রিং)।