এর নাম থাকা সত্ত্বেও, জাভাস্ক্রিপ্ট শুধুমাত্র জাভার সাথে সম্পর্কিত যে দুটির মধ্যে কয়েকটি সিনট্যাটিক মিল রয়েছে। জাভাস্ক্রিপ্টের সিনট্যাক্স প্রাথমিক বিকাশে জাভা-এর সিনট্যাক্স দ্বারা অনুপ্রাণিত হয়েছিল এবং এটিকে "লাইভস্ক্রিপ্ট" বলা হয়েছিল যখন এটি 1995 সালে নেটস্কেপ নেভিগেটরের একটি বিটা সংস্করণে প্রথম পাঠানো হয়েছিল, উভয়ই নেটস্কেপের অন্যান্য নামযুক্ত অফারগুলির সাথে সারিবদ্ধ করার জন্য এবং সত্যকে সমর্থন করার জন্য। যে এটি ব্রাউজারে "লাইভ" চালায়। মাইক্রোসফ্ট ইন্টারনেট এক্সপ্লোরার 3.0 এর সাথে কিছু পরেই জাভাস্ক্রিপ্ট, "JScript" এর নিজস্ব বাস্তবায়ন প্রকাশ করে।
নেটস্কেপ এই প্রাথমিক কাজটি Ecma ইন্টারন্যাশনালের কাছে জমা দিয়েছে, একটি সংস্থা যা প্রযুক্তিগত মান তৈরি করে এবং প্রকাশ করে, যাতে এই স্ক্রিপ্টিং ভাষাটি অন্যান্য ব্রাউজারগুলির দ্বারা কীভাবে বোঝা উচিত তা আনুষ্ঠানিকভাবে এবং বিস্তারিত জানাতে। 1997 সালে, Ecma ইন্টারন্যাশনাল ECMA-262 প্রকাশ করে, ECMAScript নামক একটি স্ক্রিপ্টিং ভাষার প্রথম সংস্করণকে প্রমিত করে। ECMAScript হল এমন একটি স্ট্যান্ডার্ড যা আরও নির্দিষ্ট স্ক্রিপ্টিং ভাষা তৈরির বিষয়ে অবহিত করে, উদাহরণস্বরূপ, মাইক্রোসফ্টের পরবর্তী কাজ এখন-বিলুপ্ত JScript, Adobe's ActionScript, এবং JavaScript নিজেই।
জাভাস্ক্রিপ্টের নির্দিষ্ট দিক এবং বৈশিষ্ট্য নিয়ে আলোচনা করার সময় এই পার্থক্যটি গুরুত্বপূর্ণ। "ES5" 2009 সালে ECMAScript স্ট্যান্ডার্ডের প্রথম বড় "সংস্করণ" প্রকাশকে বোঝায়, বছরের পর বছর আরও টুকরো টুকরো বিকাশের পর। "ES6" (বা "ES2015") হল 2015 সালে প্রকাশিত ECMAScript-এর ষষ্ঠ সংস্করণ দ্বারা নির্ধারিত মানগুলির জন্য সংক্ষিপ্ত বিবরণ৷ ES6-এর পরে, ECMAScript মানকের নতুন সংস্করণগুলি বার্ষিকভাবে প্রকাশ করা হয়েছে, প্রতিটি সংস্করণের পরিবর্তন এবং সংযোজনগুলি বছরের ভিত্তিতে উল্লেখ করা হয়েছে৷ যেমন "ES2016" বা "ES2017"।
মৌলিক নিয়ম
সংকলিত ভাষার বিপরীতে, জাভাস্ক্রিপ্ট কোড থেকে অনুবাদ করা হয় না যেটি একজন ব্যক্তি এমন ফর্মে লেখেন যা ব্রাউজার বুঝতে পারে। একটি স্ক্রিপ্ট ব্রাউজারে মার্কআপ, ইমেজ এবং স্টাইলশীটের মতো সম্পদের সাথে পাঠানো হয়, ব্রাউজার এটিকে একইভাবে ব্যাখ্যা করে যেমন এটি লেখা হয়েছিল: ইউনিকোড অক্ষরগুলির একটি মানব-পাঠযোগ্য ক্রম হিসাবে, বাম থেকে ডানে এবং উপরে থেকে নীচে পার্স করা হয়েছে৷
যখন একটি জাভাস্ক্রিপ্ট দোভাষী একটি স্ক্রিপ্ট পায়, তখন এটি প্রথমে আভিধানিক বিশ্লেষণ করে, অক্ষরের দীর্ঘ স্ট্রিংকে পার্স করে যা একটি স্ক্রিপ্ট তৈরি করে এবং এটিকে নিম্নলিখিত পৃথক ইনপুট উপাদানগুলিতে রূপান্তর করে:
- টোকেন
- বিন্যাস নিয়ন্ত্রণ অক্ষর
- লাইন টার্মিনেটর
- মন্তব্য
- হোয়াইটস্পেস (প্রায় সবসময় ট্যাব এবং স্পেস মানে)।
একটি স্ক্রিপ্টের ফলাফলগুলি পুনরায় লোড করার পরে বা বর্তমান পৃষ্ঠা থেকে দূরে নেভিগেট করার পরে স্থায়ী হবে না, যদি না আপনি স্ক্রিপ্টে অন্যথা করার জন্য স্পষ্ট নির্দেশাবলী অন্তর্ভুক্ত করেন।
উচ্চ স্তরে, জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনগুলি বিবৃতি এবং অভিব্যক্তি দ্বারা গঠিত।
বিবৃতি
একটি বিবৃতি হল নির্দেশের একটি ইউনিট যা কোডের এক বা একাধিক লাইন দ্বারা গঠিত যা একটি ক্রিয়াকে উপস্থাপন করে। উদাহরণস্বরূপ, আপনি myVariable
নামের একটি ভেরিয়েবলের মান নির্ধারণ করতে নিম্নলিখিত বিবৃতিটি ব্যবহার করতে পারেন:
let myVariable = 4;
myVariable;
> 4
সঠিকভাবে ব্যাখ্যা করার জন্য, বিবৃতি একটি সেমিকোলনে শেষ হতে হবে। যাইহোক, জাভাস্ক্রিপ্ট লেখার সময় এই সেমিকোলনগুলি সবসময় প্রয়োজন হয় না। স্বয়ংক্রিয় সেমিকোলন সন্নিবেশ নামে একটি বৈশিষ্ট্য একটি সম্পূর্ণ বিবৃতি অনুসরণ করে একটি লাইন বিরতি দেয় যদি একটি অনুপস্থিত সেমিকোলন একটি ত্রুটি সৃষ্টি করে।
ASI হল ত্রুটি সংশোধন, জাভাস্ক্রিপ্টেরই একটি অনুমতিমূলক দিক নয়। কারণ এই ত্রুটি সংশোধনের উপর অত্যধিক নির্ভর করা অস্পষ্টতার দিকে নিয়ে যেতে পারে যা আপনার কোড ভঙ্গ করে, তবুও আপনার প্রতিটি বিবৃতিকে সেমিকোলন দিয়ে ম্যানুয়ালি শেষ করা উচিত।
ব্লক বিবৃতি
একটি ব্লক স্টেটমেন্ট এক জোড়া ব্রেসের মধ্যে যেকোন সংখ্যক বিবৃতি এবং ঘোষণাকে গ্রুপ করে ( {}
)। এটি আপনাকে এমন জায়গায় বিবৃতি একত্রিত করতে দেয় যেখানে জাভাস্ক্রিপ্ট শুধুমাত্র একটি আশা করে।
আপনি প্রায়শই কন্ট্রোল ফ্লো স্টেটমেন্টের পাশাপাশি ব্লক স্টেটমেন্ট দেখতে পাবেন, যেমন if
:
if ( x === 2 ) {
//some behavior;
}
অভিব্যক্তি
একটি অভিব্যক্তি হল কোডের একটি একক যা একটি মান তৈরি করে এবং তাই যেখানে একটি মান প্রত্যাশিত সেখানে ব্যবহার করা যেতে পারে। 2 + 2
হল একটি অভিব্যক্তি যার ফলাফল 4
মান হয়:
2 + 2;
> 4
"গ্রুপিং অপারেটর", আবদ্ধ বন্ধনীগুলির একটি মিলিত জোড়া, একটি অভিব্যক্তির অংশগুলিকে গোষ্ঠীভুক্ত করতে ব্যবহৃত হয় যাতে অভিব্যক্তির একটি অংশকে একক একক হিসাবে মূল্যায়ন করা হয়। উদাহরণস্বরূপ, আপনি একটি গ্রুপিং অপারেটর ব্যবহার করতে পারেন অপারেশনের গাণিতিক ক্রম ওভাররাইড করতে বা কোডের পঠনযোগ্যতা উন্নত করতে:
2 + 2 * 4;
> 10
( 2 + 2 ) * 4;
> 16
let myVariable = ( 2 + 2 );
myVariable;
> 4
দুর্বল টাইপিং
JavaScript হল একটি দুর্বলভাবে টাইপ করা ভাষা, যার মানে একটি ডেটা মানকে একটি নির্দিষ্ট ডেটা টাইপ হিসাবে স্পষ্টভাবে চিহ্নিত করার প্রয়োজন নেই। একটি দৃঢ়ভাবে টাইপ করা ভাষার বিপরীতে, জাভাস্ক্রিপ্ট একটি মানের প্রসঙ্গ থেকে উদ্দিষ্ট প্রকারের অনুমান করতে পারে এবং মানটিকে সেই প্রকারে রূপান্তর করতে পারে। এই প্রক্রিয়াটিকে টাইপ জবরদস্তি বলা হয়।
উদাহরণস্বরূপ, আপনি যদি পাইথনের মতো দৃঢ়ভাবে টাইপ করা ভাষায় একটি স্ট্রিং মানতে একটি সংখ্যা যোগ করেন, ফলাফলটি একটি ত্রুটি:
>>> "1" + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
একটি ত্রুটি ফেরত দেওয়ার পরিবর্তে, জাভাস্ক্রিপ্ট একটি স্ট্রিংয়ে সংখ্যার মানকে জোর করে এবং দুটি মানকে একত্রিত করে, একটি স্ট্রিংয়ে যেকোনো মান যোগ করার সময় সবচেয়ে সম্ভবত উদ্দেশ্যমূলক আচরণ:
"1" + 1;
> "11"
ডেটা প্রকারগুলিও স্পষ্টভাবে জোর করা যেতে পারে। নিম্নলিখিত উদাহরণটি জাভাস্ক্রিপ্টের অন্তর্নির্মিত toString
পদ্ধতি ব্যবহার করে সংখ্যাসূচক মান 100
"100"
এর একটি স্ট্রিং মানতে বাধ্য করে:
let myVariable = 100;
typeof myVariable;
> "number"
myVariable = myVariable.toString();
> "100"
typeof myVariable;
> "string"
কেস সংবেদনশীলতা
এইচটিএমএল এবং সিএসএস-এর অধিকাংশের বিপরীতে, জাভাস্ক্রিপ্ট নিজেই সম্পূর্ণ কেস সংবেদনশীল। এর মানে হল যে ভাষাতে নির্মিত বৈশিষ্ট্য এবং পদ্ধতি থেকে শুরু করে আপনি নিজেকে সংজ্ঞায়িত করেছেন এমন শনাক্তকারী পর্যন্ত আপনাকে অবশ্যই সবকিছুকে ধারাবাহিকভাবে মূলধন করতে হবে।
console.log( "Log this." );
> Log this.
console.Log( "Log this too." );
> Uncaught TypeError: console.Log is not a function
const myVariable = 2;
myvariable;
> Uncaught ReferenceError: myvariable is not defined
myVariable;
> 2
হোয়াইটস্পেস
জাভাস্ক্রিপ্ট হোয়াইটস্পেস সংবেদনশীল। এর অর্থ হল দোভাষী ব্যবহৃত হোয়াইটস্পেসের পরিমাণ এবং প্রকার (ট্যাব বা স্পেস) উপেক্ষা করে।
console.log( "Log this" );console.log("Log this too");
> "Log this."
> "Log this too."
যাইহোক, আভিধানিক টোকেনগুলির মধ্যে একটি বিভাজক হিসাবে হোয়াইটস্পেসের উপস্থিতি তাৎপর্যপূর্ণ হতে পারে:
let x;
[ টোকেন : [let]
[x]
]
letx;
> Uncaught ReferenceError: letx is not defined
[ টোকেনস : [letx]
]
যেখানে অর্থপূর্ণ আভিধানিক টোকেন আলাদা করতে হোয়াইটস্পেস ব্যবহার করা হয়, সেখানে পার্সার হোয়াইটস্পেসের পরিমাণ এবং প্রকার উপেক্ষা করে:
let x = 2;
[ টোকেন : [let]
[x]
[=]
[2]
]
লাইন ব্রেকগুলির ক্ষেত্রেও একই কথা সত্য, যদিও এমন কিছু ক্ষেত্রে রয়েছে যেখানে লাইন ব্রেকগুলি একটি বিবৃতি অকালে শেষ করে সমস্যার কারণ হতে পারে ):
let x
=
2;
[ টোকেন : [let]
[x]
[=]
[2]
]
শৈলীগতভাবে বলতে গেলে, কিছু ধরণের বিবৃতি প্রায়শই একটি একক লাইন দখল করে:
let x = 1;
let y = 2;
যদিও কিছু বিবৃতি সাধারণত একাধিক লাইন ব্যবহার করে:
if ( x == 2 ) {
//some behavior;
}
এই কনভেনশনগুলি অবশ্য পঠনযোগ্যতার জন্য কঠোরভাবে। জাভাস্ক্রিপ্ট পূর্ববর্তী উদাহরণগুলিকে নিম্নলিখিত হিসাবে একইভাবে ব্যাখ্যা করে:
let x=1;let y=2;
if(x==2){}
এই কারণে, একটি স্বয়ংক্রিয় প্রক্রিয়া যা স্ক্রিপ্ট ফাইলগুলি থেকে অপ্রয়োজনীয় হোয়াইটস্পেস ছিনিয়ে নেয় স্থানান্তরের আকার কমাতে এটি একটি প্রোডাকশন এনভায়রনমেন্টের জন্য জাভাস্ক্রিপ্ট প্রস্তুত করার একটি সাধারণ পদক্ষেপ, পাশাপাশি অন্যান্য অপ্টিমাইজেশনের একটি সংখ্যা।
জাভাস্ক্রিপ্টে হোয়াইটস্পেস অক্ষরের ব্যবহার মূলত লেখক এবং রক্ষণাবেক্ষণকারীর পছন্দের বিষয়। একাধিক ডেভেলপার অবদানকারী কোড সহ জাভাস্ক্রিপ্ট প্রকল্পগুলি প্রায়শই সুসংগত কোড বিন্যাস নিশ্চিত করতে নির্দিষ্ট হোয়াইটস্পেস কনভেনশনের পরামর্শ দেয় বা প্রয়োগ করে—উদাহরণস্বরূপ, নেস্টেড স্টেটমেন্ট ইন্ডেন্ট করতে ট্যাব বা স্পেস ব্যবহার:
let myVariable = 10;
if ( typeof myVariable === "number" ) {
console.log( "This variable is a number." );
if( myVariable > 5 ) {
console.log( "This variable is greater than five." );
}
}
> "This variable is a number."
> "This variable is greater than five."
আপনার উপলব্ধি পরীক্ষা করুন
একটি অভিব্যক্তি কি?
জাভাস্ক্রিপ্ট কেস সংবেদনশীল।