KPI Computer Club
"Everyone should know how to program a computer because it teaches you how to think"
Steve Jobs
If you are searching for a job you can follow up those pages .
1. Career Path
Link : https://www.facebook.com/share/1A1TKKboYD/
2. atB jobs
Link : https://www.facebook.com/share/19wUNXRBJq/
3. Softvence Agency
Link : https://www.facebook.com/share/1A5apafM8q/
4. Join venture AI
Link: https://www.facebook.com/share/1BjdFCn3Ty/
5. Claystone Agency
Link : https://www.facebook.com/share/1BV16Bkqzh/
6. Sparktech Agency
Link : https://www.facebook.com/share/195m7UC7Jb/
7.SM Technology
Link : https://www.facebook.com/share/14KvaERwApP/
8. Career at bdcalling
Link : https://www.facebook.com/share/1AkK2s3QCM/
9. Brain Station 23 ( Biggest Software Company in BD)
Link : https://www.facebook.com/share/1FmyUFwuUB/
10. Qtech Solution Limited
Link : https://www.facebook.com/share/17V6PSGhrR/
11. Skills jobs
Link : https://www.facebook.com/share/16aWCbjJs5/
12. Viva soft Limited
https://www.facebook.com/share/1A3DHEDEB6/
JavaScript Loop
জাভাস্ক্রিপ্টে লুপ হলো শর্তসাপেক্ষে কোনো কোড বারবার রান করা বা কোনো কাজকে রিপিট করার জন্য ব্যবহার করা হয়। লুপ বিভিন্ন প্রকার রয়েছে, আমরা বেশ কয়েকটি লুপ নিয়ে এখন আলোচনা করব।
# # for\_loop (ফর লুপ)
নির্দিষ্ট সংখ্যক বার কোনো কোড ব্লক রান করার জন্য **for** লুপ ব্যবহার করা হয়। এটি লেখার পদ্ধতি হলো: প্রথমত `for` লেখার পর প্রথম বন্ধনীর (`()`) ভেতরে একটি ভ্যারিয়েবল ডিক্লেয়ার করা (Initialization); তারপর সেমিকোলন (`;`) দিয়ে একটি কন্ডিশন (Condition) লেখা; এবং শেষে ভেরিয়েবলের মান পরিবর্তন (Increment/Decrement) করা।
**Syntax:**
```javascript
for (initialization; condition; increment/decrement) {
// কোড এখানে লেখা হয়
}
```
**Example (উদাহরণ):**
নিচের উদাহরণে, লুপটি ১ থেকে ৫ পর্যন্ত সংখ্যা কনসোলে প্রিন্ট করবে।
```javascript
for (let i = 1; i
19/09/2025
Nobody breaks down Deep Learning concepts quite like this professor.
I went through his full playlist (26 lectures)
Here’s the roadmap of what he teaches:
→Intro: What is Deep Learning? + key prerequisites
→Neurons: what they can compute & how to train them
→Data analysis pipelines & validation techniques
→Feed-forward neural nets + backprop explained
→Smarter activation & loss functions for classification
→Speeding up models with vectorization
→Vanishing/exploding gradients & how to fix them
→Overfitting and regularization strategies
→Convolutional networks (CNNs)
→Transfer learning & data augmentation for small datasets
→Residual connections (ResNets)
→Word embeddings & NLP foundations
→RNNs, LSTMs, Transformers & self-attention
→Evaluation metrics beyond accuracy (ROC, etc.)
→The Adam optimizer
→Autoencoders & generative models (GANs)
→AlphaGo/AlphaGo Zero
→Computation graphs & automatic differentiation
Full playlist here: https://youtube.com/playlist?list=PLgPbN3w-ia_PeT1_c5jiLW3RJdR7853b9&si=GzJ4MAd5XZPYlcWn
©️
# # # জাভাস্ক্রিপ্ট অ্যারে (JavaScript Array)
**অ্যারে** হলো একটি ডেটা স্ট্রাকচার যা একাধিক মানকে (values) একটি একক ভেরিয়েবলের মধ্যে সুশৃঙ্খলভাবে সংরক্ষণ করে। অ্যারের প্রতিটি উপাদানের একটি নির্দিষ্ট অবস্থান থাকে, যাকে **ইনডেক্স** (index) বলা হয়। ইনডেক্স সবসময় শূন্য (0) থেকে শুরু হয়। আপনি যেকোনো ধরনের ডেটা (যেমন: স্ট্রিং, সংখ্যা, অবজেক্ট, এমনকি অন্য অ্যারেও) অ্যারেতে রাখতে পারেন।
* **উদাহরণ:**
```javascript
let fruits = ["Apple", "Banana", "Orange"];
// এখানে "Apple" এর ইনডেক্স 0, "Banana" এর ইনডেক্স 1, এবং "Orange" এর ইনডেক্স 2।
```
-----
# # # গুরুত্বপূর্ণ অ্যারে মেথডসমূহ
জাভাস্ক্রিপ্ট অ্যারের সাথে কাজ করার জন্য কিছু গুরুত্বপূর্ণ মেথড নিচে দেওয়া হলো।
# # # **১. অ্যারের দৈর্ঘ্য (`length`)**
`length` হলো একটি প্রপার্টি, যা অ্যারের মোট উপাদানের সংখ্যা নির্দেশ করে। এটি আপনাকে বলে দেয় অ্যারেতে কতগুলো আইটেম আছে।
* **উদাহরণ:**
```javascript
let numbers = [10, 20, 30, 40, 50];
console.log(numbers.length); // আউটপুট: 5
```
# # # **২. ইনডেক্সিং এবং মান পরিবর্তন (Accessing and Modifying)**
অ্যারের প্রতিটি উপাদানকে তার ইনডেক্স ব্যবহার করে অ্যাক্সেস করা যায়। একইভাবে, ইনডেক্স ব্যবহার করে যেকোনো উপাদানের মান পরিবর্তন করাও সম্ভব।
* **উদাহরণ:**
```javascript
let colors = ["Red", "Green", "Blue"];
console.log(colors[0]); // অ্যাক্সেস: "Red"
colors[1] = "Yellow"; // পরিবর্তন
console.log(colors); // আউটপুট: ["Red", "Yellow", "Blue"]
```
# # # **৩. নতুন উপাদান যোগ করা**
# # # # **`push()`**
`push()` মেথড অ্যারের **শেষে** নতুন উপাদান যোগ করে।
* **উদাহরণ:**
```javascript
let fruits = ["Apple", "Banana"];
fruits.push("Orange", "Grape");
console.log(fruits); // আউটপুট: ["Apple", "Banana", "Orange", "Grape"]
```
# # # # **`unshift()`**
`unshift()` মেথড অ্যারের **শুরুতে** নতুন উপাদান যোগ করে।
* **উদাহরণ:**
```javascript
let fruits = ["Banana", "Orange"];
fruits.unshift("Apple");
console.log(fruits); // আউটপুট: ["Apple", "Banana", "Orange"]
```
# # # **৪. উপাদান সরিয়ে ফেলা**
# # # # **`pop()`**
`pop()` মেথড অ্যারের **শেষের** উপাদানটি সরিয়ে ফেলে। এটি সরিয়ে ফেলা উপাদানটি রিটার্ন করে।
* **উদাহরণ:**
```javascript
let fruits = ["Apple", "Banana", "Orange"];
let removedFruit = fruits.pop();
console.log(fruits); // আউটপুট: ["Apple", "Banana"]
console.log(removedFruit); // আউটপুট: "Orange"
```
# # # # **`shift()`**
`shift()` মেথড অ্যারের **শুরুর** উপাদানটি সরিয়ে ফেলে। এটিও সরিয়ে ফেলা উপাদানটি রিটার্ন করে।
* **উদাহরণ:**
```javascript
let fruits = ["Apple", "Banana", "Orange"];
let removedFruit = fruits.shift();
console.log(fruits); // আউটপুট: ["Banana", "Orange"]
console.log(removedFruit); // আউটপুট: "Apple"
```
# # # **৫. অনুসন্ধান (Searching)**
# # # # **`includes()`**
`includes()` মেথড পরীক্ষা করে দেখে যে একটি অ্যারেতে নির্দিষ্ট কোনো উপাদান আছে কিনা। এটি একটি **বুলিয়ান** মান (`true` বা `false`) রিটার্ন করে।
* **উদাহরণ:**
```javascript
let numbers = [10, 20, 30];
console.log(numbers.includes(20)); // আউটপুট: true
console.log(numbers.includes(50)); // আউটপুট: false
```
# # # # **`indexOf()`**
`indexOf()` মেথড অ্যারের মধ্যে একটি নির্দিষ্ট উপাদানের **প্রথম ইনডেক্স নম্বর**টি খুঁজে বের করে। যদি উপাদানটি না পাওয়া যায়, তবে এটি `-1` রিটার্ন করে। অর্থাৎ ঐ ইনডেক্সের ভ্যালু যদি অ্যারের মধ্যে থাকে তাহলে ইনডেক্স সংখ্যা 0 থেকে বেশি হবে বা 0 হবে আর না থাকলে হলে -1 হবে।
* **উদাহরণ:**
```javascript
let colors = ["Red", "Green", "Blue", "Green"];
console.log(colors.indexOf("Green")); // আউটপুট: 1
console.log(colors.indexOf("Yellow")); // আউটপুট: -1
```
Write by
Md Nadim Mostofa
Jr. Web Developer
# # # JavaScript-এর Conditional Statement এর বিস্তারিত আলোচনা করা হলো।
JavaScript-এ, Conditional স্টেটমেন্টগুলো ব্যবহার করা হয় নির্দিষ্ট শর্তের উপর ভিত্তি করে কোড এক্সিকিউট করার জন্য। এই স্টেটমেন্টগুলো প্রোগ্রামকে বিভিন্ন পরিস্থিতিতে ভিন্ন ভিন্ন কাজ করার ক্ষমতা দেয়।
-----
# # # **`if` স্টেটমেন্ট**
`if` স্টেটমেন্ট একটি শর্ত সত্য হলে কোড এক্সিকিউট করে। যদি শর্তটি মিথ্যা হয়, তবে স্টেটমেন্টের ভিতরের কোড এড়িয়ে যাওয়া হয়।
* **সিনট্যাক্স:**
```javascript
if (condition) {
// যদি শর্তটি সত্য হয়, এই কোডটি চলবে।
}
```
* **উদাহরণ:**
```javascript
let score = 95;
if (score >= 90) {
console.log("You got an A!");
}
```
এই ক্ষেত্রে, যেহেতু `score` 90 বা তার বেশি, তাই "You got an A\!" মেসেজটি প্রিন্ট হবে।
-----
# # # **`if...else` স্টেটমেন্ট**
`if...else` স্টেটমেন্ট দুটি সম্ভাব্য পথ তৈরি করে। যদি `if` এর শর্ত সত্য হয়, তবে প্রথম কোড ব্লকটি চলে; অন্যথায়, `else` এর ভিতরের কোড ব্লকটি চলে।
* **সিনট্যাক্স:**
```javascript
if (condition) {
// যদি শর্তটি সত্য হয়, এই কোডটি চলবে।
} else {
// যদি শর্তটি মিথ্যা হয়, এই কোডটি চলবে।
}
```
* **উদাহরণ:**
```javascript
let age = 17;
if (age >= 18) {
console.log("You can vote.");
} else {
console.log("You cannot vote yet.");
}
```
এখানে, `age` 18-এর কম হওয়ায় `else` ব্লকটি কার্যকর হবে এবং "You cannot vote yet." প্রিন্ট হবে।
-----
# # # **`if...else if...else` স্টেটমেন্ট**
একাধিক শর্ত পরীক্ষা করার জন্য `if...else if...else` স্টেটমেন্ট ব্যবহার করা হয়। এটি প্রথম সত্য শর্তটি খুঁজে বের করে এবং তার সংশ্লিষ্ট কোড ব্লকটি চালায়। কোনো শর্তই সত্য না হলে `else` ব্লকটি (যদি থাকে) চলে।
* **সিনট্যাক্স:**
```javascript
if (condition1) {
// যদি condition1 সত্য হয়।
} else if (condition2) {
// যদি condition1 মিথ্যা এবং condition2 সত্য হয়।
} else {
// কোনো শর্তই সত্য না হলে।
}
```
* **উদাহরণ:**
```javascript
let time = 14;
if (time < 12) {
console.log("Good morning!");
} else if (time < 18) {
console.log("Good afternoon!");
} else {
console.log("Good evening!");
}
```
`time` 14 হওয়ায়, প্রথম শর্তটি মিথ্যা। দ্বিতীয় শর্তটি সত্য, তাই "Good afternoon\!" প্রিন্ট হবে।
-----
# # # **টার্নারি অপারেটর (`? :`)**
টার্নারি অপারেটর একটি সংক্ষিপ্ত উপায় যা একটি শর্তের উপর ভিত্তি করে দুটি ভিন্ন এক্সপ্রেশন থেকে একটি নির্বাচন করে। এটি `if...else` স্টেটমেন্টের একটি এক-লাইনের সংস্করণ।
* **সিনট্যাক্স:**
```javascript
condition ? trueExpression : falseExpression;
```
* **উদাহরণ:**
```javascript
let isAdult = (age >= 18) ? "Adult" : "Minor";
console.log(isAdult); // যদি age 17 হয়, "Minor" প্রিন্ট হবে।
```
এই উদাহরণটি দেখায় কিভাবে শর্তের ফলাফলের উপর ভিত্তি করে একটি ভেরিয়েবলের মান নির্ধারণ করা যায়।
-----
# # # **Logical NOT (`!`) অপারেটর**
Logical NOT (`!`) অপারেটর একটি বুলিয়ান মানকে উল্টে দেয়। অর্থাৎ, যদি কোনো মান `true` হয়, এটি তাকে `false` করে এবং `false` হলে `true` করে।
* **উদাহরণ:**
```javascript
let isLoggedIn = false;
if (!isLoggedIn) {
console.log("Please log in to continue.");
}
```
এখানে, `isLoggedIn` এর মান `false`। কিন্তু `!` অপারেটরের কারণে `!isLoggedIn` এর মান `true` হয়ে যায়, ফলে `if` স্টেটমেন্টের ভিতরের কোডটি চলে।
Write by
Md Nadim Mostofa
Jr. Web Developer
Comparison Operator নিয়ে বিস্তারিত আলোচনা করা হলো।
Comparison শব্দের অর্থ হলো তুলনা করা অর্থাৎ একটি ভেরিয়েবল এর সাথে আরেকটি ভেরিয়েবল কিংবা একটি মানের সাথে আরেকটি মান তুলনা করাকে কম্পারিজন বলে। আমরা আমাদের দৈনন্দিন জীবনে অনেকেই একে অপরের সাথে তুলনা করে থাকি আমাদের রেজাল্ট এর সাথে অন্যজনের রেজাল্ট কিংবা বিভিন্ন বিষয় তুলনা করে থাকি। Comparison এর বিভিন্ন অপারেটর নিয়ে আলোচনা করা হলো।
# # # ১. Equal Operator: `==`
এই অপারেটরটি পরীক্ষা করে যে দুটি মান সমান কিনা। এটি শুধুমাত্র মান তুলনা করে, ডাটা টাইপ নয়।
* **উদাহরণ:**
```javascript
let a = 10;
let b = "10";
console.log(a == b); // আউটপুট: true (কারণ মান উভয় ক্ষেত্রেই 10)
```
-----
# # # ২. Strict Equal Operator: `===`
এই অপারেটরটি পরীক্ষা করে যে দুটি মান এবং তাদের ডাটা টাইপ উভয়ই সমান কিনা। এটি **কঠোরভাবে** তুলনা করে।
* **উদাহরণ:**
```javascript
let a = 10;
let b = "10";
console.log(a === b); // আউটপুট: false (কারণ a হলো number এবং b হলো string)
```
-----
# # # ৩. Not Equal Operator: `!=`
এই অপারেটরটি পরীক্ষা করে যে দুটি মান সমান নয়। এটিও ডাটা টাইপ উপেক্ষা করে।
* **উদাহরণ:**
```javascript
let a = 10;
let b = 15;
console.log(a != b); // আউটপুট: true (কারণ 10 এবং 15 সমান নয়)
```
-----
# # # ৪. Strict Not Equal Operator: `!==`
এই অপারেটরটি পরীক্ষা করে যে দুটি মান অথবা তাদের ডাটা টাইপ সমান নয়। এটি কঠোরভাবে তুলনা করে।
* **উদাহরণ:**
```javascript
let a = 10;
let b = "10";
console.log(a !== b); // আউটপুট: true (কারণ তাদের ডাটা টাইপ ভিন্ন)
```
-----
# # # ৫. Greater Than Operator: `>`
এই অপারেটরটি পরীক্ষা করে যে বাম পাশের মানটি ডান পাশের মানের চেয়ে বড় কিনা।
* **উদাহরণ:**
```javascript
let a = 20;
let b = 15;
console.log(a > b); // আউটপুট: true (কারণ 20, 15 এর চেয়ে বড়)
```
-----
# # # ৬. Less Than Operator: `=`
এই অপারেটরটি পরীক্ষা করে যে বাম পাশের মানটি ডান পাশের মানের চেয়ে বড় অথবা সমান কিনা।
* **উদাহরণ:**
```javascript
let a = 20;
let b = 20;
console.log(a >= b); // আউটপুট: true (কারণ 20, 20 এর সমান)
```
-----
# # # ৮. Less Than or Equal to Operator: `
14/09/2025
# # জাভাস্ক্রিপ্ট ডেটা টাইপ (JavaScript Data Types)
---
জাভাস্ক্রিপ্টে ডেটা টাইপ মূলত দুই ধরনের। এগুলো হলো **Primitive Data Type** এবং **Reference Data Type**। প্রতিটি ডেটা টাইপের একটি নির্দিষ্ট উদ্দেশ্য এবং আচরণ রয়েছে।
# # # ১. Primitive Data Types (প্রিমিটিভ ডেটা টাইপস)
এগুলো হলো জাভাস্ক্রিপ্টের মৌলিক ডেটা টাইপ। এই ডেটা টাইপগুলো মেমোরিতে সরাসরি তাদের মান (`value`) সংরক্ষণ করে, তাই এদেরকে "pass-by-value" বলা হয়। যখন একটি প্রিমিটিভ ভেরিয়েবল অন্য একটি ভেরিয়েবলে অ্যাসাইন করা হয়, তখন তার মানের একটি অনুলিপি তৈরি হয়। এর ফলে, একটি ভেরিয়েবলের মান পরিবর্তন করলে অন্যটির মান অপরিবর্তিত থাকে।
আপনার দেওয়া উদাহরণগুলো খুব সঠিক। প্রিমিটিভ ডেটা টাইপগুলো হলো:
* **String (স্ট্রিং)**: এটি টেক্সট ডেটা বোঝায়। স্ট্রিং সাধারণত সিঙ্গেল (`'`) বা ডাবল (`"`) কোটেশনের মধ্যে লেখা হয়। ES6 (ECMAScript 2015) থেকে ব্যাকটিকস (`` ` ``) ব্যবহার করে টেম্পলেট লিটারেলস (Template Literals) ব্যবহার করা যায়, যা স্ট্রিং এর মধ্যে ভেরিয়েবল অন্তর্ভুক্ত করার সুযোগ দেয়।
* উদাহরণ: `let name = "Alice";`
* **Number (নাম্বার)**: এটি সংখ্যাসূচক ডেটা। জাভাস্ক্রিপ্টে পূর্ণসংখ্যা (`integer`) এবং দশমিক সংখ্যা (`float`) উভয়ই এই একই ডেটা টাইপের অন্তর্ভুক্ত।
* উদাহরণ: `let age = 30;`
* **Boolean (বুলিয়ান)**: এটি শুধুমাত্র দুটি লজিক্যাল মান ধারণ করে: `true` অথবা `false`। এই ডেটা টাইপ শর্তসাপেক্ষ প্রোগ্রামিং (conditional programming)-এ ব্যাপকভাবে ব্যবহৃত হয়।
* উদাহরণ: `let isActive = true;`
* **Undefined (আনডিফাইন্ড)**: যখন একটি ভেরিয়েবল ঘোষণা করা হয় কিন্তু কোনো মান অ্যাসাইন করা হয় না, তখন তার ডিফল্ট মান `undefined` থাকে।
* উদাহরণ: `let city;`
* **Null (নাল)**: এটি একটি বিশেষ ডেটা টাইপ, যা কোনো ভেরিয়েবলের মধ্যে ইচ্ছাকৃতভাবে "কোনো মান নেই" বোঝানোর জন্য ব্যবহার করা হয়। এটি `undefined` থেকে ভিন্ন, কারণ `null` একটি ইচ্ছাকৃত অ্যাসাইন করা মান।
* উদাহরণ: `let car = null;`
* **BigInt (বিগইন্ট)**: এটি একটি নতুন প্রিমিটিভ টাইপ (ES2020), যা খুব বড় আকারের পূর্ণসংখ্যা ধারণ করতে পারে, যা `Number` টাইপের সীমার বাইরে।
* উদাহরণ: `const bigNumber = 1234567890123456789012345678901234567890n;`
* **Symbol (সিম্বল)**: এটি ES6 থেকে যুক্ত হওয়া একটি অনন্য এবং অপরিবর্তনীয় প্রিমিটিভ টাইপ। এটি সাধারণত অবজেক্ট প্রোপার্টিতে একটি অনন্য কী (key) তৈরি করার জন্য ব্যবহার করা হয়।
* উদাহরণ: `const id = Symbol('id');`
---
# # # ২. Reference Data Types (রেফারেন্স ডেটা টাইপস)
এই ডেটা টাইপগুলো অবজেক্ট-ভিত্তিক, এবং এগুলোর মান সরাসরি মেমোরিতে সংরক্ষিত হয় না, বরং একটি **মেমোরি অ্যাড্রেস** বা **রেফারেন্স** সংরক্ষণ করে। যখন একটি রেফারেন্স টাইপ ভেরিয়েবল অন্য একটি ভেরিয়েবলে অ্যাসাইন করা হয়, তখন শুধুমাত্র সেই মেমোরি অ্যাড্রেসটি কপি হয়, ডেটার অনুলিপি নয়। এর ফলে, একটি ভেরিয়েবলের মাধ্যমে ডেটা পরিবর্তন করলে, সেই একই রেফারেন্স ব্যবহার করে অন্য ভেরিয়েবল থেকেও পরিবর্তিত ডেটা অ্যাক্সেস করা যায়।
আপনার দেওয়া উদাহরণগুলোও এখানে সঠিক:
* **Object (অবজেক্ট)**: এটি `{}` কার্লি ব্র্যাকেটের মধ্যে জোড়ায় জোড়ায় **কী (key)** এবং **মান (value)** ধারণ করে। এটি জাভাস্ক্রিপ্টের সবচেয়ে গুরুত্বপূর্ণ ডেটা স্ট্রাকচারগুলোর মধ্যে একটি।
* উদাহরণ: `let person = { name: "Alice", age: 30 };`
* **Array (অ্যারে)**: এটি `[]` স্কয়ার ব্র্যাকেটের মধ্যে একাধিক মানকে একটি নির্দিষ্ট ক্রমানুসারে (ordered list) সংরক্ষণ করে। এটি অবজেক্টেরই একটি বিশেষ রূপ।
* উদাহরণ: `let colors = ["red", "green", "blue"];`
* **Function (ফাংশন)**: ফাংশনও এক ধরনের অবজেক্ট, যা কিছু কাজ সম্পাদনের জন্য ব্যবহৃত হয়।
# # # কেন অবজেক্ট এবং অ্যারে-কে রেফারেন্স টাইপ বলা হয়?
---
অবজেক্ট, অ্যারে এবং ফাংশন-কে রেফারেন্স টাইপ বলা হয় কারণ তারা ডেটা সরাসরি ভেরিয়েবলের মধ্যে রাখে না। এর পরিবর্তে, তারা মেমোরিতে একটি নির্দিষ্ট অবস্থানে ডেটা রাখে এবং ভেরিয়েবলটি সেই অবস্থানের একটি **ঠিকানা (address)** বা **রেফারেন্স** ধারণ করে।
সহজভাবে বলতে গেলে:
* **প্রিমিটিভ টাইপ** একটি বাক্স বা কনটেইনারের মতো, যেখানে সরাসরি ডেটা থাকে। যদি আপনি সেই বাক্সটি অন্য কাউকে দেন, তাহলে সে একটি নতুন বাক্স পাবে যেখানে আপনার বাক্সের ডেটার একটি কপি থাকবে। আপনার মূল বাক্স পরিবর্তন করলে অন্যজনের বাক্সটি প্রভাবিত হবে না।
* **রেফারেন্স টাইপ** হলো একটি ঠিকানার স্লিপের মতো। এই স্লিপটি আপনাকে একটি নির্দিষ্ট ঠিকানায় নিয়ে যায়, যেখানে আসল ডেটা সংরক্ষিত আছে। যদি আপনি এই স্লিপের একটি অনুলিপি অন্য কাউকে দেন, তবে দুজনই একই ঠিকানায় নির্দেশ করবে। যদি একজন সেই ঠিকানায় গিয়ে ডেটা পরিবর্তন করে, তবে অন্যজনও পরিবর্তিত ডেটা দেখতে পাবে।
এই ভিন্ন আচরণের কারণে জাভাস্ক্রিপ্টে ডেটা হ্যান্ডলিং-এ প্রিমিটিভ এবং রেফারেন্স টাইপের পার্থক্য বোঝা অত্যন্ত গুরুত্বপূর্ণ।
Write by
MD Nadim Mostofa
Jr. Web Developer
# # ভেরিয়েবল কী?
ভেরিয়েবল হলো প্রোগ্রামিং-এর একটি গুরুত্বপূর্ণ ধারণা, যা ডেটা বা তথ্য সংরক্ষণের জন্য ব্যবহৃত হয়। এটিকে আপনি একটি **কন্টেইনার** বা **স্টোরেজ স্পেস** হিসেবে ভাবতে পারেন, যেখানে আপনি বিভিন্ন ধরনের মান (যেমন: সংখ্যা, টেক্সট, লজিক্যাল মান ইত্যাদি) রাখতে পারেন। এই মানগুলো প্রোগ্রামের প্রয়োজন অনুযায়ী পরিবর্তন করা যায়।
# # ভেরিয়েবল কেন দরকার?
ভেরিয়েবল প্রোগ্রামিং-এর অপরিহার্য অংশ, কারণ এটি ছাড়া প্রোগ্রাম ডেটা সংরক্ষণ এবং ব্যবহার করতে পারবে না। আপনার প্রোগ্রামের ডেটা গুলোকে সাময়িকভাবে ধরে রাখা, গণনা করা, বা বিভিন্ন ফাংশনে ব্যবহার করার জন্য ভেরিয়েবল খুবই জরুরি। উদাহরণস্বরূপ, যদি আপনি কোনো ব্যবহারকারীর নাম সংরক্ষণ করতে চান, তবে তার জন্য একটি ভেরিয়েবল ব্যবহার করতে পারেন।
# # ভেরিয়েবল লেখার নিয়মাবলী
আপনার দেওয়া নিয়মগুলো সঠিক, তবে চলুন সেগুলোকে আরও সহজ করে সাজিয়ে লিখি। একটি ভেরিয়েবল লেখার জন্য কিছু নির্দিষ্ট নিয়ম মেনে চলতে হয়:
১. **শুরুতে কীওয়ার্ড ব্যবহার**: ভেরিয়েবল লেখার শুরুতে `var`, `let`, অথবা `const`—এই তিনটি কীওয়ার্ডের যেকোনো একটি ব্যবহার করতে হবে।
২. **ভেরিয়েবলের নাম**: এরপর একটি অর্থপূর্ণ নাম দিতে হবে, যা সহজে বোঝা যায়।
৩. **মান অ্যাসাইন করা**: একটি সমান (`=`) চিহ্ন ব্যবহার করে ভেরিয়েবলের একটি মান দিতে হবে।
৪. **লাইন শেষ করা**: বেশিরভাগ প্রোগ্রামিং ভাষায়, লাইনের শেষে একটি সেমিকোলন (`;`) ব্যবহার করে স্টেটমেন্টটি সম্পন্ন করা হয়।
উদাহরণ:
```javascript
let userName = "রিয়াদ";
let age = 30;
const PI = 3.1416;
```
এখানে, `userName`, `age`, এবং `PI` হলো ভেরিয়েবল এবং `"রিয়াদ"`, `30`, এবং `3.1416` হলো তাদের মান।
ভেরিয়েবল লেখার কিছু অতিরিক্ত নিয়ম:
* ভেরিয়েবলের নাম সংখ্যা (`0-9`) দিয়ে শুরু করা যাবে না।
* `$`, `_` (আন্ডারস্কোর) এই দুটি প্রতীক বাদে অন্য কোনো প্রতীক দিয়ে ভেরিয়েবল শুরু করা যাবে না।
* ভেরিয়েবলের নামের মধ্যে কোনো ফাঁকা বা স্পেস রাখা যাবে না। একাধিক শব্দের জন্য **camelCase** (যেমন: `myVariableName`) বা **snake\_case** (যেমন: `my_variable_name`) ব্যবহার করা হয়।
* প্রোগ্রামিং ভাষার সংরক্ষিত কীওয়ার্ড (যেমন: `function`, `if`, `else`, `while` ইত্যাদি) ভেরিয়েবলের নাম হিসেবে ব্যবহার করা যাবে না।
# # `var`, `let`, এবং `const` এর মধ্যে পার্থক্য
আপনার দেওয়া পার্থক্যগুলো সঠিক। নিচে আমরা তাদের প্রধান বৈশিষ্ট্যগুলো আরও স্পষ্টভাবে তুলে ধরেছি:
# # # var
`var` হলো JavaScript-এর পুরোনো একটি কীওয়ার্ড।
* **পুনরায় অ্যাসাইন এবং ডিক্লেয়ার করা যায়**: আপনি একই নামে একাধিকবার `var` ভেরিয়েবল ডিক্লেয়ার এবং তার মান পরিবর্তন করতে পারেন।
* **গ্লোবাল স্কোপ**: এটি `function` স্কোপের মধ্যে থাকে। যদি কোনো ফাংশনের বাইরে ডিক্লেয়ার করা হয়, তবে এটি **গ্লোবাল স্কোপের** হয় এবং যেকোনো জায়গা থেকে অ্যাক্সেস করা যায়।
* **হোস্টিং (Hoisting) সমর্থন করে**: `var` ভেরিয়েবলকে তার ডিক্লেয়ারেশনের আগেই ব্যবহার করা যায়, তবে তার মান `undefined` থাকে।
# # # let
`let` হলো ES6 (ECMAScript 2015)-এর একটি আধুনিক কীওয়ার্ড।
* **পুনরায় অ্যাসাইন করা যায়, কিন্তু পুনরায় ডিক্লেয়ার করা যায় না**: আপনি একবার `let` দিয়ে একটি ভেরিয়েবল ডিক্লেয়ার করলে, একই স্কোপে তা পুনরায় ডিক্লেয়ার করতে পারবেন না। তবে, এর মান পরিবর্তন করতে পারবেন।
* **ব্লক স্কোপ**: `let` ভেরিয়েবল শুধুমাত্র সেই **ব্লক (`{}`)** এর মধ্যেই অ্যাক্সেস করা যায় যেখানে এটি ডিক্লেয়ার করা হয়েছে।
* **হোস্টিং সমর্থন করে না**: `let` ভেরিয়েবলকে তার ডিক্লেয়ারেশনের আগেই ব্যবহার করা যায় না।
# # # const
`const` হলো ES6 (ECMAScript 2015)-এর আরও একটি আধুনিক কীওয়ার্ড।
* **পুনরায় অ্যাসাইন এবং ডিক্লেয়ার করা যায় না**: `const` ব্যবহার করে একবার ভেরিয়েবল ডিক্লেয়ার করলে তার মান আর পরিবর্তন করা যায় না।
* **ব্লক স্কোপ**: `let` এর মতোই `const` ব্লক স্কোপিং-এর মধ্যে কাজ করে।
* **হোস্টিং সমর্থন করে না**: এটিও `let`-এর মতোই তার ডিক্লেয়ারেশনের আগেই ব্যবহার করা যায় না।
# # কেন `var` ব্যবহার করা উচিত নয়?
বর্তমানে `var` ব্যবহার করা **উচিত নয়** এর মূল কারণ হলো এর **গ্লোবাল স্কোপিং** এবং **হোস্টিং** আচরণ। এই দুটি বৈশিষ্ট্য কোডে অপ্রত্যাশিত সমস্যা সৃষ্টি করতে পারে। উদাহরণস্বরূপ:
```javascript
// একটি বড় প্রোগ্রাম যেখানে অনেক ফাংশন আছে
var x = 10;
//...
if (true) {
var x = 20; // এখানে x এর মান পরিবর্তন হচ্ছে, যা গ্লোবাল স্কোপের x-কেও প্রভাবিত করবে
}
console.log(x); // আউটপুট হবে 20, যা অপ্রত্যাশিত হতে পারে।
```
এই সমস্যা এড়াতে এবং কোডকে আরও অনুমানযোগ্য ও ত্রুটিমুক্ত করতে `let` এবং `const` ব্যবহার করা হয়। `let` এবং `const` এর ব্লক স্কোপিংয়ের কারণে, কোডের একটি নির্দিষ্ট অংশ অন্য অংশকে প্রভাবিত করে না, যা বড় প্রোজেক্টে কোড ব্যবস্থাপনা সহজ করে তোলে। তাই, আধুনিক জাভাস্ক্রিপ্টে `var`-এর পরিবর্তে **সর্বদা `let` এবং `const`** ব্যবহার করা হয়।
MD Nadim Mostofa
Jr. Web Developer
06/09/2025
Necessary 12 git command
19/08/2025
React Developer Road Map
Click here to claim your Sponsored Listing.
Address
Rangpur City
Rangpur