Showing posts with label javascript. Show all posts
Showing posts with label javascript. Show all posts

Saturday, 22 March 2025

JavaScript ES6: Understanding Default Parameters

JavaScript ES6: Understanding Default Parameters

JavaScript ES6: Understanding Default Parameters

🎯 What Are Default Parameters in JavaScript?

Imagine going to a coffee shop, and the barista automatically gives you a cappuccino because you didn't specify your order. That’s what JavaScript ES6 Default Parameters do! 🎉

📌 Before ES6: The Struggle Was Real

Before ES6, we had to manually check if a function parameter was provided. If not, we assigned a default value like this:

const greet = (name) => {
    name = name || 'Stranger';
    console.log(`Hello, ${name}!`);
}

greet('Alice'); // Output: Hello, Alice!
greet(); // Output: Hello, Stranger!
        

This was okay but not elegant. JavaScript developers wanted a cleaner solution. And then came ES6... 🚀

✅ ES6 Default Parameters: The Smart Way

With ES6, we can directly assign default values in the function parameters. Check this out:

const greet = (name = 'Stranger') => {
    console.log(`Hello, ${name}!`);
}

greet('Alice'); // Output: Hello, Alice!
greet(); // Output: Hello, Stranger!
        

Much cleaner, right? No more `name = name || 'Stranger'` nonsense! 😎

🤔 Why Use Default Parameters?

  • 💡 Prevents `undefined` values
  • 🚀 Simplifies code
  • ⏳ Saves time (because we devs are lazy 😂)
  • 🎯 Improves code readability

🛠 More Fun with Default Parameters

Example 1: Calculating Discounted Price

const calculatePrice = (price, discount = 0.10) => {
    return price - (price * discount);
}

console.log(calculatePrice(100)); // Output: 90
console.log(calculatePrice(100, 0.20)); // Output: 80
        

Example 2: Multiplication Table

const multiplicationTable = (num = 1) => {
    for(let i = 1; i <= 10; i++) {
        console.log(`${num} x ${i} = ${num * i}`);
    }
}

multiplicationTable(5); // Outputs table of 5
multiplicationTable(); // Outputs table of 1
        

🚀 Advanced Use Cases

Default Parameters with Objects

const userInfo = (user = { name: 'Guest', age: 18 }) => {
    console.log(`User: ${user.name}, Age: ${user.age}`);
}

userInfo({ name: 'Alice', age: 25 });
userInfo();
        

Using Functions as Default Parameters

const randomNumber = () => Math.floor(Math.random() * 100);

const showNumber = (num = randomNumber()) => {
    console.log(`Generated number: ${num}`);
}

showNumber(); // Outputs a random number
showNumber(42); // Outputs 42
        

🎉 Final Thoughts

Default Parameters in ES6 are a game-changer! They make your code cleaner, smarter, and easier to read. Now, go and use them in your projects! 🚀

🔗 Share This Article

Share on Twitter
Share:

How to create a string character map in JavaScript

স্ট্রিং ক্যারেক্টার ম্যাপ তৈরি করার সহজ উপায়: জাভাস্ক্রিপ্ট উদাহরণ

 

 


হে সুন্দর মানুষজন,

আজকে আমি ক্যারেক্টার ম্যাপ নিয়ে আলোচনা করবো, অর্থাৎ কিভাবে একটি স্ট্রিং এর ক্যারেক্টার ম্যাপ তৈরি করতে হয় তা দেখবো। কোনো একটি স্ট্রিং এর ক্যারেক্টার ম্যাপ তৈরি করতে পারলে খুব সহজেই স্ট্রিং রিলেটেড অনেক সমস্যা সমাধান করা যায়। তো বেশি বক-বক নাহ করে জেনে নেওয়া যাক যে ক্যারেক্টার ম্যাপ কী?

স্ট্রিং কাকে বলে ?

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

ক্যারেক্টার ম্যাপ কী ?

কোনো একটা স্ট্রিং এ কি কি ক্যারেক্টার আছে তার লিস্ট করা সাথে কোন ক্যারেক্টার কতোবার আছে তার হিসেব করা । যেমন ধরি, আমাদের কাছে "babu" নামে একটি স্ট্রিং আছে, তাহলে এর ক্যারেক্টার ম্যাপ হবে এইরকম :-

{
    b: 2,
    a: 1,
    u: 1
}

আমরা দেখতে পাইতেছি যে, "babu" নামের এই স্ট্রিং টাতে কিন্তু b ক্যারেক্টার দুইটি তাই b : 2 এমনভাবে দেখাচ্ছে এবং a,u একটি করে তাই তাদের পরিমাণটাও একটি(1) করে দেখাচ্ছে।

ক্যারেক্টার ম্যাপ তৈরি করার সুবিধা কী ?

কোনো একটি স্ট্রিং এর ক্যারেক্টার ম্যাপ তৈরি করে খুব সহজেই বিভিন্ন স্ট্রিং রিলেটেড সমস্যা সমাধান করতে পারবেন যেমন -

১। স্ট্রিং এ সবচেয়ে কমন ক্যারেক্টার কোনটি বা কোনগুলো ?

২। স্ট্রিং টি অ্যানাগ্রাম কি নাহ ?

৩। স্ট্রিং এ কোনো রিপিটেড ক্যারেক্টার আছে কি নাহ ?

- ক্যারেক্টার ম্যাপ তৈরি -

const characterMap = (str) => {
  const charMap = {};
  str.split("").forEach((char) => {
    if (charMap[char]) {
      charMap[char]++;
    } else {
      charMap[char] = 1;
    }
  });

  return charMap;
};

আমাদের ক্যারেক্টার ম্যাপ তৈরি, এখন চেক করে দেখা যাক যে ঠিক-ঠাক উত্তর দিচ্ছে কি নাহ ?

const charMap = characterMap("babu");
console.log(charMap)

OUTPUT :

{
    b: 2,
    a: 1,
    u: 1
}

সবকিছু ঠিক-ঠাক । তবে একটা কথা বলে রাখা ভালো যে আপনি অনেক ভাবেই ক্যারেক্টার ম্যাপ তৈরি করতে পারেন । আপনাকে যে উপরোক্ত ভাবেই ক্যারেক্টার ম্যাপ তৈরি করতে হবে সেই রকম কোনো বাধা-ধরা নিয়ম নেই ।

- Another way to create CharacterMap -

const characterMap = (str) => {
  const charMap = {};
  for (let char of str) {
    charMap[char] ? charMap[char]++ : (charMap[char] = 1);
  }

  return charMap;
};

- Check it -

const charMap = characterMap("hello");
console.log(charMap)

OUTPUT :

{
    h: 1,
    e: 1,
    l: 2,
    o:1
}

আশা করি বুঝতে পারছেন। ধন্যবাদ সবাইকে ।

Share:

for of loop in javascript - ফর অব লুপ

Simple HTML Structure

 

JavaScript for...of loop, JavaScript ES6, for loop, iterate arrays, for...of with sets, loop in es6, loop in javascript, for loop, while loop, es6, do while loop in javascript, set in javascript, map in javascript, object in javascript, js structure, css in js, filter in js, foreach in js

জাভাস্ক্রিপ্ট ইএস৬(ES6) এ নতুন একটি লুপের সাথে পরিচয় করিয়ে দেওয়া হয়েছে যার নাম for...of লুপ । এই for...of লুপের সাহায্যে খুব সহজেই অ্যারে(array), সেট(set), ম্যাপ(map), স্ট্রিং(string) ইত্যাদিকে ইটারেট করা যায় ।

জাভাস্ক্রিপ্ট for...of লুপ সিনট্যাক্স :-

for (item of iterable) {
    // body of for...of
}

এখানে,

  • iterable হলো যেকোনো একটি ইটারেবল(iterable) অবজেক্ট যেমন - অ্যারে(array), সেট(set), স্ট্রিং(string) ইত্যাদি ।
  • item হলো ইটারেবল(iterable) অবজেক্টের ভ্যালু ।

এখন আমরা for...of লুপের ইউসকেস দেখবো অর্থাৎ এটি কিভাবে কাজ করে -

for...of with Arrays

কোনো একটা অ্যারেকে ইটারেট করার প্রয়োজন হলে আমরা for...of ব্যাবহার করতে পারি যেমন :-

// array
const friends = ['shakil', 'torikus', 'fahim'];
// using for...of
for ( let item of friends ) {
    // display the values
    console.log(item);
}

OUTPUT :-

shakil
torikus
fahim

উপরের প্রোগ্রামে friends আরেকে ইটারেট করা হয়েছে অর্থাৎ অ্যারের ভেতর লুপ থ্রো করা হয়েছে যা অ্যারের লেন্থ পর্যন্ত চলবে । এবং item of friends এই লাইনে item নামে একটা ভ্যারিয়েবল নেওয়া হয়েছে যা friends আরের ভ্যালুকে নির্দেশ করে ।

প্রত্যেকবার লুপটি ইটারেট করার সময় কনসোলে item কে লগ করে যার ফলে উপরোক্ত আউটপুট পেয়েছি । শেষে এটি অ্যারের লেন্থ পর্যন্ত চলে ইটেরেশনকে বন্ধ করে দেয় ।

for...of with Strings :-

for...of লুপ আমরা স্ট্রিং(String) কে ইটারেট করতেও ব্যাবহার করতে পারি যেমন :-

// string
const name = 'babu';

// using for...of loop
for (let i of name) {
    console.log(i);
}

OUTPUT :-

b
a
b
u

অ্যারের মতো সেইমভাবে স্ট্রিং ও ইটারেট করা হয়েছে । এখানে i স্ট্রিং এর প্রত্যেকটা ভালুকে নির্দেশ করে যার ফলে আমরা উপরোক্ত আউটপুট পেয়েছি ।

for...of with Sets :-

আমরা Set এর এলিমেন্টস গুলোকে ইটারেট করতে পারি সেইম ভাবে for...of লুপ ইউস করে যেমন :-

// define Set
const set = new Set([1, 2, 3]);

// looping through Set
for (let i of set) {
    console.log(i);
}

OUTPUT :-

1
2
3

সেইম ভাবে এখানে i Set এর প্রত্যেকটা এলিমেন্ট বা ভ্যালুকে নির্দেশ করে যার প্রমাণসরূপ প্রোগ্রামের আউটপুট ।

for...of with Maps:-

আমরা সেইমভাবে Map এলিমেন্টস ইটারেট করতে পারি for...of লুপ ইউস করে যেমন :-

// define Map
let map = new Map();

// inserting elements
map.set('name', 'Jack');
map.set('age', '27');

// looping through Map
for (let [key, value] of map) {
    console.log(key + '- ' + value);
}

OUTPUT :-

name- Jack
age- 27

আশা করি বুঝতে পারছেন ।

======== শেষের কথা ========

  • for...of লুপ ইউস করা হয় শুধুমাত্র ইটারেবল(iterable) অব্জেক্টসের ভ্যালুসমূহ কে ইটারেট করতে ।
  • যদি কোনো ইটারেবল(iterable) অব্জেক্টসের ইনডেক্স নিয়ে কাজ করার দরকার পরে তাহলে এই লুপ ইউস না করায় ভালো ।
  • for...of লুপ অবজেক্টের(object) সাথে ইউস করা যায় নাহ ।
For more information, visit MDN's documentation on for...of
Share:

Tuesday, 1 February 2022

ফাইন্ড ফ্যাক্টরিয়াল - Using Stack

 


আমরা জানি, Stack ডাটা-স্ট্রাকচার LIFO(Last In First Out) প্যারাডাইম মেনে চলে অর্থাৎ এখানে কোনো ভ্যালু শেষে এড করা হলে তা প্রথমে ডিলিট হয়ে যাবে । আপনি যদি Stack ও Queue ডাটা-স্ট্রাকচার সম্পর্কে না জেনে থাকেন তাহলে নিচের দেওয়া লিঙ্কগুলো থেকে পরে নিতে পারেন -

এখন, আসল কাজে ফিরে আসা যাক - আপনাকে একটি ফাংশন লিখতে হবে যা প্যারামিটার হিসেবে একটি নাম্বার নিবে এবং সেই নাম্বারের Factorial বের করে তা রিটার্ন  করতে হবে ।

Factorial Number:-

কোন সংখ্যার factorial number বলতে সেই সংখ্যা থেকে ১ পর্যন্ত সবগুলো সংখ্যার গুণফল কে বোঝায় যেমন :- 

= 5 

= 5 *4 * 3 * 2 *1

 = 120

এখন এই প্রব্লেমটি আমরা অনেক ভাবেই সমাধান করতে পারি । কিন্তু আমরা অন্যভাবে প্রব্লেমটি সমাধান না করে Stack দিয়ে কিভাবে সমাধান করতে হয় তা দেখবো এবং বোঝার চেষ্টা করবো ।

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

স্টেপ(০১) :- প্রথমে, 5 থেকে 1 পর্যন্ত প্রত্যেকতা সংখ্যাকে একটি অ্যারে বা লিস্টে রাখতে হবে । সেক্ষেত্রে, আমাদের একটি ফাকা লিস্ট বা অ্যারে নিতে হবে -

contains = []

এরপর, 5 থেকে 1 এর মাঝে প্রথম সংখ্যা অর্থাৎ 5 কে contains নামের অ্যারে বা লিস্টে এ পুশ করে দেই । এক্ষেত্রে, কিন্তু 5 কে contains নামের অ্যারের শেষে রাখলাম । এখন অ্যারেটি যদি দেখি -

contains = [5]

স্টেপ(০২) :- এখন, 5 থেকে 1 এর মাঝে দ্বিতীয় সংখ্যা অর্থাৎ 4 কে contains নামের অ্যারে বা লিস্টে পুশ করে দেই । আবারও বলি পুশ করা মানে কিন্তু উপাদানকে অ্যারের শেষে যুক্ত করা এখন অ্যারেটি যদি আবার দেখি -

contains = [5, 4]

স্টেপ(০৩) :- এবার , 5 থেকে 1 এর মাঝে তৃতীয় সংখ্যা অর্থাৎ 3 কে contains নামের অ্যারে বা লিস্টে পুশ করে দিলাম -

contains = [5, 4, 3]

স্টেপ(০৪) :- এবারে, 5 থেকে 1 এর মাঝে চতুর্থ সংখ্যা অর্থাৎ ২ কে contains নামের অ্যারে বা লিস্টে পুশ করে দিলাম -

contains = [5, 4, 3, 2]

স্টেপ(০৫) :- এবারে , 5 থেকে 1 এর মাঝে সবশেষ সংখ্যা অর্থাৎ 1 কে contains নামের অ্যারে বা লিস্টে পুশ করে দিলাম -

contains = [5, 4, 3, 2, 1]

এখন লিস্ট বা অ্যারে থেকে প্রত্যেকটা উপাদান pop() করবো । pop() মানে হলো যে উপাদানটি আমরা সবার শেষে এড করেছি সেই উপাদান এখন সবার প্রথমে রিমুভ করে অন্য একটি নাম্বারের সাথে গুণ করে দিবো ।

একটা নাম্বার নিলাম fact নামে এবং তার ভেতর 1 এসাইন করলাম - 

fact = 1

এখন, contains অ্যারে থেকে শেষের ভ্যালুকে রিমুভ অর্থাৎ pop() করে fact নাম্বারের এর সাথে গুণ করে দিলাম । এখন contains অ্যারে হবে ৪ উপাদান বিশিষ্ট এবং fact এর মান হবে 1*1 = 1 :-

fact = 1 

fact = 1* 1 

fact = 1

contains = [5, 4, 3, 2]

আবার, contains অ্যারে থেকে শেষের ভ্যালু রিমুভ অর্থাৎ pop() করে fact এর সাথে গুণ করে দিলাম-

fact = 2 

fact = 1 * 2 

fact = 2

contains = [5, 4, 3]

আবার, contains অ্যারে থেকে শেষের ভ্যালু রিমুভ অর্থাৎ pop() করে fact এর সাথে গুণ করে দিলাম-

fact = 3 

fact = 2 * 3 

fact = 6

contains = [5, 4]

একইভাবে contains অ্যারে থেকে শেষের ভ্যালু pop() করে fact এর সাথে গুণ করে দিলাম-

fact = 4 

fact = 6 * 4 

fact = 24

contains = [5]

এখন, contains অ্যারে তে একটি মাত্র সংখ্যা আছে সেইটাকেও pop() করে fact এর সাথে গুণ করে দিলাম -

fact = 5

fact = 2 *4 * 5 

fact = 120

contains = []

এখন এই (fact = 120) ই হলো আমাদের কাঙ্খিত ফলাফল । এতো দূর পর্যন্ত আপনি যদি বুঝে থাকেন তাহলে আপনাকে Congrats আর যদি বুঝে নাহ থাকেন তাহলে আরেকবার পড়ুন এবং অন্য আরেকটি নাম্বারের Factorial বের করার চেষ্টা করুন ।

তো চলুন এখন কোড লিখা যাক -

পাইথনে ইমপ্লিমেন্টেশন :-

def fact(n):
    contains = []
    while n > 0:
        contains.append(n)
        n -= 1

    fact = 1
    while len(contains) > 0:
        fact *= contains.pop()

    return fact

Output :

print(fact(5))  # 120
print(fact(7))  # 5040

জাভাস্ক্রিপ্টে ইমপ্লিমেন্টেশন -

const fact = (n) => {
  let contains = [];
  while (n > 0) {
    contains.push(n);
    console.log(n);
    n--;
  }
  let fact = 1;
  while (contains.length > 0) {
    fact *= contains.pop();
  }
  return fact;
};

Output :

fact(5);  // 120
fact(7); // 5040

কোড বিশ্লেষণ :-

উপরোক্ত কোডে, প্রথমে contains নামে একটি অ্যারে বা লিস্ট নিয়েছি । তারপর, একটি লুপ থ্রু করেছি যতক্ষণ 0 থেকে n বড় হতে থাকবে ততক্ষণ লুপটি চলবে এবং প্রত্যেকতা সংখ্যাকে contains নামের অ্যারে বা লিস্টে পুশ করে দিয়েছি । n এর মান প্রত্যেক ইটারেশনে 1 করে কমে দিয়েছি ।

fact নামে একটি নাম্বার নিয়েছি তাতে 1 এসাইন করেছি এবং contains অ্যারেতে একটি লুপ থ্রু করেছি । লুপটি ততক্ষণ চলবে যতক্ষণ পর্যন্ত contains এর সাইজ 0 থেকে বড় থাকবে । এবং প্রত্যেক ইটারেশনে fact এর সাথে contains এর শেষ উপাদানটি রিমুভ হয়ে গুণ হতে থাকবে । এক পর্যায়ে আমাদের লুপটি শেষ হয়েছে । এখন, fact ভেরিয়েবলে আমাদের কাঙ্খিত factorial ভ্যালু রয়েছে তাই সেইটা রিটার্ন করেছি ।

কোডের টাইম ও স্পেস উভয় কমপ্লেক্সিটি হবে ওর্ডার অব এন অর্থাৎ O(n) ।

Share:

Wednesday, 30 June 2021

Var, Let and Const - পার্থক্যটা কি এবং কোথায় ?

 

var let and const in javascript, var,let and const in javascript bangla tutorial, bangla let const var

হ্যালো কাছের মানুষজন, 

আজকের লেসনে আমরা জাভাস্ক্রিপ্ট ইএস-৬(ES6) এর  var, let,and const কীওয়ার্ড কিভাবে কাজ করে সাথে var, let, and const - পার্থক্যটা কি এবং কোথায় সেগুলো নিয়েও আলোচনা করবো।

আগামী কয়েক মিনিট আপনার গুলু-গুলু বাবু প্রেমিকার সাথে চ্যাটিং আর ফ্ল্যাট বুকিং বাদ দিয়ে ফিউচারে প্রেমিকার থেকে পাওয়া আনলিমিটেড পেইন কোন কিওয়ার্ড ব্যাবহার করে variable এ স্টোর করবেন সেইটা এক্সপ্লোর করেন । তাহলে দুঃখটা একটু কমবে আশা করি, কি আজব!

 এতোদিন আমরা শুধু var কীওয়ার্ড ব্যাবহার করেই variable নিতাম আর মনের সুখে মনের সব কথা স্টোর করতাম । JavaScript একটি হাই-লেভেল প্রোগ্রামিং ল্যাংগুয়েজ হওয়ার কারনে অনন্য ল্যাংগুয়েজের মতো আমাদের স্পেসেফিকলি বলে দিতে হয় না যে আমরা কোন টাইপের মনের কথা variable এ স্টোর করতেছি ।

মানে কোন টাইপের ডাটা নিচ্ছি সেটা কি ইন্টিজার, নাকি ফ্লোট নাকি স্ট্রিং নাকি অন্য কিছু কারণ JavaScript অটোমেটিক্যালি বুঝে নিতে পারে।

সো, আমরা শুধুমাত্র var কীওয়ার্ড ব্যাবহার করেই যে কোনো ধরনের ডাটা variable এ স্টোর করতে পারি।  

তবুও, জাভাস্ক্রিপ্ট ইএস-৬(ES6) এ let, and const নামে দুইটা নতুন কীওয়ার্ড কেনো আসলো তাইনা ? চিল ম্যান, চিন্তা বা ভয় পাওয়ার কোনো কারণ নাই আজকে আমরা let, var and const নিয়ে আলোচনা করতে যাচ্ছি। 

আমরা জানি যে let, var, const এই keyword গুলো ব্যাবহার করে variable ডিক্লেয়ার করা হয় । let, var and const এই তিনটি keyword এর আলাদা আলাদা ইউসকেস আছে তো বেশি কথা না বলে ছোট্ট একটা Example দিয়ে শুরু করা যাক।

প্রথমে var এবং let নিয়ে একটা Example দেখা যাক :-

if(true){
    var varName = 'var babu';
}
console.log(varName); 
//আউটপুটঃ var babu


if(true){
    let letName = 'let babu';
}
console.log(letName); 
//আউটপুটঃ ReferenceError: letName is not defined

উপরোক্ত দুইটি if ব্লকের মধ্যে প্রথম ব্লকে var কিওয়ার্ড দ্বারা variable (varName = 'var babu') ডিক্লেয়ার করা হয়েছে । এবং console.log(varName) করা হয়েছে যার অউটপুট var babu । আমরাও এমনটা ভেবেছি যে অউটপুট var babu ই হবে ।

 কিন্তু দ্বিতীয় ব্লকে let কিওয়ার্ড দ্বারা variable (letName = 'let babu') ডিক্লেয়ার করা হয়েছে যার রেজাল্ট ReferenceError: letName is not defined এমন রেফারেন্স-এরর এসেছে । তাহলে নিশ্চয়ই কিছু একটা কাহিনি তো আছে তাই না ?

তাছাড়া তো এমন এরর আসার কথা না। তো চলুন ছোট্ট করে আলোচনা করা যাক ।

var দ্বারা ডিক্লেয়ারকৃত variable এ এরর না আসার কারণ:-

যখন আমরা কোনো variable ফাংশনের ভেতর বাদে অন্য ব্লক বা যেকোনো জায়গায় var কিওয়ার্ড দ্বারা নিব তখন সেই variable টা window কে point করে অর্থাৎ সেই variable টাকে যেকোনো জায়গায় থেকে এক্সেস করা যাবে ।

যেহেতু, if কোনো ফাংশন ব্লক নাহ তাই উপরোক্ত var কিওয়ার্ড দ্বারা ডিক্লেয়ারকৃত variable টি বাহিরে থেকেও এক্সেস করা যাচ্ছে ।

let দ্বারা ডিক্লেয়ারকৃত variable এ এরর আসার কারণ:-

 দ্বিতীয় ব্লকে let কিওয়ার্ড দ্বারা variable (letName = 'let babu') ডিক্লেয়ার করা হয়েছে যার রেজাল্ট ReferenceError: letName is not defined এসেছে ।

কারণ, যখন কোনো variable ফাংশনসহ অনন্য ব্লক যেমনঃ (if-else, for loop, while loop etc.) এর ভেতর let কিওয়ার্ড দ্বারা ডিক্লেয়ার করা হয়।

তখন সেই variable টি সেইসব ব্লকের যেকোনো জায়গা থেকেই এক্সেস করা যাবে। ব্লকের বাহিরে থেকে এক্সেস করা যাবে নাহ বিধায় আমাদেরকে উপরোক্ত রেফারেন্স এরর দিয়েছে। আশা করি কিছু একটা বুঝতে পারছেন - তো চলেন বিষয়টা আরেকটু ক্লিয়ার করা যাক :-

1. var কীওয়ার্ড function স্কোপ  অর্থাৎ (function Block) মেইন্টেইন করে ।
2. let ও const কীওয়ার্ড ব্লক(Block) স্কোপ মেইন্টেইন করে ।

অর্থাৎ যখন কোনো variable var কিওয়ার্ড দ্বারা ফাংশনের ভেতর নিব তখন সেই variable টা ফাংশন স্কোপড হয়ে যাবে । 

তার মানে কি ? তার মানে হলো তখন সেই variable টা ফাংশনের বাহিরে ব্যাবহার করা যাবে নাহ । ফাংশনই হবে তখন তার দুনিয়া বা এরিয়া, যত খুশি মনের মাধুরি মিশিয়ে ফাংশনের ভেতরই যেখানে ইচ্ছে সেখানে ব্যাবহার করা যাবে ।  

ছোট্ট একটা উদাহরণ দেখা যাক :

const sayName = () => {
    if(true){
        var Name = 'Shakil Babu';
    }
    console.log(Name);
    //আউটপুটঃ Shakil Babu
}
sayName();

এখানে sayName একটা ফাংশন, আর এই ফাংশন ব্লকের মধ্যে আরেকটা if ব্লক ইউস করা হয়ছে যার ভেতর var কীওয়ার্ড দ্বারা Name নামে একটা variable নেওয়া হয়ছে। এবং variable টি if ব্লকের বাহিরে অর্থাৎ ফাংশন ব্লকের ভেতর console.log(Name) করা হয়েছে যার অউটপুট ঠিকঠাক ভাবে দিয়েছে ।

যেহেতু আমরা জানি, var কীওয়ার্ড শুধুমাত্র function স্কোপ অর্থাৎ ফাংশনের ভেতর যেকোনো জায়গায় ইউস করতে পারবো সেহেতু, if ব্লকের বাহিরে অর্থাৎ ফাংশন ব্লকের ভেতর ইউস করায় ঠিকঠাক উত্তর দিয়েছে ।

এরপরেও যদি আপনি সাহসী প্রেমিকের মতো ফাংশনের বাহির থেকে variable টা এক্সেস করেন তাহলে প্রোগ্রাম ও আপনাকে সাহসী ভিলেনের মতো ReferenceError ছুড়ে মারবে। কি মজা!

তাতে কি আপনি তো সাহসী প্রেমিক, প্রেম করলে তো একটু-আধটু কেচাল লাগবেই আবার ঠিকও হয়ে যাবে । তাই একবার ট্রাই করেই দেখুন।

let and const :-

আমরা ইতিমধ্যে জানি, let ও const কীওয়ার্ড ব্লক(Block) স্কোপ মেইন্টেইন করে । তো চলেন আমরা উপরোক্ত সেইম কাজটাই যদি আমরা let বা const দিয়ে করি তাহলে কি হয় ?

const sayName = () => {
    if(true){
        let Name = 'Shakil Babu';
    }
    console.log(Name);
    //আউটপুটঃ ReferenceError: Name is not defined
}
sayName();

এই প্রোগ্রামের আউটপুটে কি আসবে বলেন তো ? হ্যাঁ, এটার আউটপুটে এরর আসবে কারণঃ let ও const কীওয়ার্ড ব্লক(Block) স্কোপ । যেহেতু, ফাংশন ও একটা ব্লক কিন্তু খেয়াল করলে দেখবেন যে, ফাংশন ব্লকের ভেতর আরেকটা if ব্লক আছে এবং সেই if ব্লকের ভেতর variable ডিক্লেয়ার করা হয়েছে ।

তাই, if ব্লকের বাহিরে variable এক্সেস করতে পারবো নাহ ।এইজন্য আমাদের ReferenceError: Name is not defined এই এরর ছুড়ে মারছে। এ তো গেলো var, let, and const এর স্কোপ নিয়ে আলোচনা।

সবসময় মনে রাখবেন স্কোপ এর ক্ষেত্রে let, and const এর কাজ একই।

তো চলেন এইবার (Var, Let, and Const) এর re-declare এবং re-assign নিয়ে আলোচনা করা যাক ।

আমরা চাইলে কিন্তু var দিয়ে একটা ভ্যারিয়েবল ডিক্লেয়ার করে পরবর্তিতে সেইটা আবার সেইম নামে re-declare ও করতে পারি এমনকি সেটার ভ্যালুও চেঞ্জ করতে পারি মানে re-assign ।

কথাগুলো যদি আপনার ফুর-ফুরা মনকে ছিন্ন-ভিন্ন করে ফেলে তাহলে নিচের উদাহরণ দেখুন:-

var Name = 'Babu';

// re-assigned
Name = 'Shakil Babu';
console.log(Name); //আউটপুটঃ Shakil Babu

// re-declared
var Name = 'Shakil';
console.log(Name); //আউটপুটঃ Shakil

আউটপুটে কিন্তু কোনো এরর নাই সম্পূর্ন ভ্যালিড । কারণঃ var দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করলে সেইটা re-declare এবং re-assign দুইটাই করা যায় প্রোগ্রাম কোনো মাইন্ড করে নাহ।

এখন সেইম কাজটা যদি আমরা let দিয়ে করি তাহলে কি হয় চলুন দেখা যাক -

let Name = 'Babu';

// re-assigned
Name = 'Shakil Babu';
console.log(Name); //আউটপুটঃ Shakil Babu

// re-declared
let Name = 'Shakil';
console.log(Name);
//আউটপুটঃ SyntaxError: Identifier 'Name' has already been declared

এখানে কি হলো দেখুন তো, প্রথমে কিন্তু Name এর value কে re-assigned করা হয়ছে অর্থাৎ Name এর value কে পরিবর্তন করা হয়েছে এতে প্রোগ্রাম কোনো প্রকার মাইন্ড করে নাই । এইখানে কিন্তু var কীওয়ার্ড এর সাথে let এর মিল রয়েছে ।

কিন্তু, দ্বিতীয় স্টেপে যখন সেইম নামে let কীওয়ার্ড দ্বারা re-declared করা হলো তখনই প্রোগ্রাম মাইন্ড করে বসলো এবং রাগের মাথায় SyntaxError: Identifier 'Name' has already been declared) এই এরর টা ছুড়ে মারলো।

তাহলে আমরা বুঝতে পারলাম যে, let দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করলে সেইটা re-assign করা যায় কিন্ত re-declare করা যায় নাহ ।

এখন আবারও সেইম কাজটা যদি আমরা const দিয়ে করি তাহলে কি হয় চলুন দেখা যাক :-

const Name = 'Babu';

// re-assigned
Name = 'Shakil Babu';
console.log(Name);
//আউটপুটঃ TypeError: Assignment to constant variable.

// re-declared
const Name = 'Shakil';
console.log(Name);
//আউটপুটঃ SyntaxError: Identifier 'Name' has already been declared

এই যা, const দিয়ে তো re-declare এবং re-assign কোনো টাই করা যাচ্ছে নাহ। constant অর্থ হলো ধ্রুবক, যার মান কখনোই পরিবর্তন করা যায় নাহ । constant এর সংক্ষিপ্ত রুপ হইলো const ।

তাই আপনি কোনোকিছু একবার const দিয়ে ডিক্লেয়ার করলে সেটার পরে আর পরিবর্তন করতে পারবেন না। করতে চাইলে এরর আসবে।

তাহলে আমরা যা বুঝলাম - var দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করলে সেইটা re-declare এবং re-assign দুইটাই করা যায়।

let দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করলে সেইটা re-assign করা যায় কিন্ত re-declare করা যায় নাহ ।

এবং const দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করলে সেইটা re-declare এবং re-assign কোনোটাই করা যায় নাহ।

Hoisting এর ক্ষেত্রে var, let and const এর ছোট্ট আলোচনা :-

var দিয়ে কোনো variable ডিক্লেয়ার করার আগেই যদি তা ব্যাবহার করা হয় তাহলে hoisting নামক এক মন ভাঙ্গা প্রেমিকের কারণে অউটপুটে undefined দেখায়।

নিচের ছোট্ট একটি উদাহরণে দেখানো হলো :-

console.log(test);
var test = 'I am test variable';
//আউটপুটঃ undefined

উপরোক্ত পোগ্রামটি আমাদের মেশিনে চালালে সুন্দর করে তারা আমাদেরকে আউটপুট হিসেবে undefined নামক সোনার হরিণ দেখাবে । কি মজা!

Let এবং Const :- 

let বা const দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করার আগেই যদি সেই ভ্যারিয়েবল অ্যাক্সেস করতে চাই তাহলে var এর মতো undefined না দিয়ে সোজা-সাপ্টা এরর ছুরে মারবে । চলুন দেখে আসি কেমন এরর দিবে :

console.log(test);
const test = 'I am test variable';
//আউটপুটঃ ReferenceError: Cannot access 'test' before initialization

উপরোক্ত কোডে আমরা দেখতে পাইতেছি যে, আউটপুট হিসেবে ReferenceError ছুড়ে দিয়েছে। এখানে এদেরকেও hoisting নামক এক মন ভাঙ্গা প্রেমিকের সিস্টেমে হোইস্টেড করা হয়। কিন্তু Temporal Dead Zone(TDZ) নামক এক কুখ্যাত সন্ত্রাসীর কারনে আমরা চাইলেও এদেরকে ডিক্লেয়ার করার আগে অ্যাক্সেস করতে পারি না।

ভ্যারিয়েবল ডিক্লেয়ারেশন আর সেটার স্কোপ পাওয়ার মধ্যে একটা সময় আছে, ঐ সময়টাকেই Temporal Dead Zone বলে।

আশা করি আপনারা আজকের বিষয়টা অনেক এনজয় করেছেন ।

ধন্যবাদ সবাইকে ।

# var, let and const in es6

# const var difference

# differences between var let and const

Share:

Friday, 4 June 2021

স্ট্রিং(string) মেথডস ইন জাভাস্ক্রিপ্ট ইএস৬(ES6)

 

string methods in javscript es6, new string methods in javascript, javascript string methods, javascript string, javascript bangla
জাভাস্ক্রিপ্ট ইএস৬(ES6) এ নতুন কয়েকটি স্ট্রিং মেথডস এসেছে । তার ভেতর সবচেয়ে বেশি ৪ টি মেথডস ব্যাবহার করা হয় :-

নিচে উল্লেখ করা হলো :-

  • startsWith(str, index)
  • endsWith(str, length)
  • includes(str, index)
  • repeat(number)

যদিও আমরা স্ট্রিং(string) কি , কিভাবে ডিক্লেয়ার করা হয় সবই জানি । যখন আমরা কোনো স্ট্রিং(string) ডিক্লেয়ার করি তখন ডিক্লেয়ারকৃত স্ট্রিং(string) টির প্রত্যেকটা ক্যারেক্টারের একটা করে ইন্ডেক্স নাম্বার থাকে যেমন :-

const Name = "SHAKIL MIA";

আমাদের কোনো ক্যারেক্টারের দরকার পরলে ইন্ডেক্স নাম্বার ব্যাবহার করে তা খুব সহজেই বের করতে পারি :-

const Name = "SHAKIL MIA";
console.log(Name[0]); // S
console.log(Name[1]); // H
console.log(Name[9]); // A

স্ট্রিং(string) নিয়ে আপনি অনেক কিছুই জানেন তারপরেও একটু আলোচনা করা হলো সবার জন্য । এবার চলুন জাভাস্ক্রিপ্ট ইএস৬(ES6) এ নতুন স্ট্রিং মেথডস নিয়ে আলোচনা করা যাক :-

১। startsWith() মেথড

সিনট্যাক্স -

string.startsWith(str, index) 

কোনো স্ট্রিং নির্দিষ্ট কোন ক্যারেক্টার বা ওয়ার্ড দিয়ে শুরু হয়েছে তা চেক করার জন্য startsWith() মেথড ব্যাবহার করা হয় । এটা সবসময় Boolean ভ্যালু true অথবা false রিটার্ন করে :-

const Name = "SHAKIL MIA";
console.log(Name.startsWith('S')); // true
console.log(Name.startsWith('SHA')); // true
console.log(Name.startsWith('SHAKIL')) // true   

উপরের, সবগুলো সঠিক তাই আউটপুট true দিয়েছে । এখন যদি স্ট্রিং যে ক্যারেক্টার বা ওয়ার্ড দিয়ে শুরু হয়েছে সেইটা বাদে অন্য কিছু দিয়ে চেক করি :-

const Name = "SHAKIL MIA";
console.log(Name.startsWith('Ab')); // false
console.log(Name.startsWith('abc')); // false 

এবার কিন্তু, আমাদের false রিটার্ন করেছে কারণ- আমরা যে ক্যারেক্টার বা ওয়ার্ড দিয়ে চেক করেছি সেইটা দিয়ে স্ট্রিং শুরু হয় নাই ।

startsWith() মেথড কেস-সেনসিটিভ অর্থাৎ ছোট হাতের এবং বড় হাতের একই ক্যারেক্টার এক নাহ । নিচে দেখুন :-

const Name = "SHAKIL MIA";
console.log(Name.startsWith('s')); // false
console.log(Name.startsWith('shakil')); // false

 

আমরা সিনট্যাক্স লিখার সময়ই দেখেছি startsWith() মেথড দুইটি প্যারামিটার নেয় । প্রথমটা স্ট্রিং আর দ্বিতীয়টা ইন্ডেক্স । দ্বিতীয় প্যারামিটার অর্থাৎ ইন্ডেক্স অপশনাল আপনি চাইলে পাস করতে পারেন আবার নাও পারেন । যদি পাস নাহ করা হয় তাহলে এটি ডিফল্ট(Default) হিসেবে প্রথম ইন্ডেক্সকেই পয়েন্ট(Point) করে যা আমরা এতক্ষণ দেখলাম ।

এবার যদি ইন্ডেক্সকে পাস করি তাহলে :-

const Name = "SHAKIL MIA";
console.log(Name.startsWith('IL',4 )); // true
console.log(Name.startsWith('M',7)); // true

একটু খেয়াল করলেই বুঝতে পারবেন যে, IL কিন্তু SHAKIL MIA এর 4 নাম্বার ইন্ডেক্স থেকেই শুরু হয়েছে তাই আমাদের আউটপুট হিসেবে true রিটার্ন করেছে ।

২। endsWith() মেথড

সিনট্যাক্স -

endsWith(str, length) 

কোনো স্ট্রিং নির্দিষ্ট কোন ক্যারেক্টার বা ওয়ার্ড দিয়ে শেষ হয়েছে তা চেক করার জন্য endsWith() মেথড ব্যাবহার করা হয় । এটা সবসময় Boolean ভ্যালু true অথবা false রিটার্ন করে -

const Name = "SHAKIL MIA";
console.log(Name.endsWith('A')); // true
console.log(Name.endsWith('MIA')); // true

console.log(Name.endsWith("S")); // false 

endsWith() মেথডও কেস-সেনসিটিভ(case-sensitive) :-

const Name = "SHAKIL MIA";
console.log(Name.endsWith('a')); // false 

 

endsWith() মেথডও দুইটি প্যারামিটার নেয় প্রথমটা স্ট্রিং আর দ্বিতীয়টা length যা অপশনাল । যদি পাস নাহ করা হয় তাহলে এটি ডিফল্ট(Default) হিসেবে শেস ইন্ডেক্সকেই পয়েন্ট(Point) করে যা আমরা এতক্ষণ দেখলাম । এবার যদি length কে পাস করি তাহলে -

const Name = "SHAKIL MIA";
console.log(Name.endsWith('M', 8)); // true 

ইন্ডেক্স অনুযায়ী 8 নাম্বার পজিশনে কিন্তু I আছে ।

তারপরেও true রিটার্ন করতেছে কারণ - endsWith() মেথড index নাহ length প্যারামিটার নেয় । সেই অনুযায়ী M কিন্তু 8 নাম্বার ভ্যালু, কারণ - আমরা জানি যে length সবসময় 1 থেকে কাউন্ট হয়।

আরেকটি উদাহরণ দেখি :-

const Name = "SHAKIL MIA";
console.log(Name.endsWith('H', 2)); // true 

৩। includes() মেথড

সিনট্যাক্স -

includes(str, index) 

কোনো স্ট্রিং(string) এ নির্দিষ্ট কোন ক্যারেক্টার বা ওয়ার্ড আছে কি নাহ তা চেক করার জন্য includes() মেথড ব্যাবহার করা হয় । এটাও সবসময় Boolean ভ্যালু true অথবা false রিটার্ন করে :-

const Name = "SHAKIL MIA";
console.log(Name.includes('H')); // true
console.log(Name.includes('MIA')); // true

console.log(Name.includes("Babu")); // false 

startsWith() এবং endsWith() এর মতো includes() মেথডও কেস-সেনসিটিভ(case-sensitive) :-

const Name = "SHAKIL MIA";
console.log(Name.includes('a')); // false 

includes() মেথডও দুইটি প্যারামিটার নেয় প্রথমটা স্ট্রিং আর দ্বিতীয়টা index যা অপশনাল । এবার যদি index কে পাস করি তাহলে :-

const Name = "SHAKIL MIA";
console.log(Name.includes('MIA',7 )); // true 

৪। repeat() মেথড

সিনট্যাক্স -

repeat(number) 

একটি স্ট্রিং কে বার বার লিখতে বা রিপিট(repeat) করতে এই মেথড ব্যাবহার করা হয়। এটি একটা number প্যারামিটার হিসেবে নেয় সেই অনুযায়ী স্ট্রিং রিপিট(repeat) হয় :-

const Name = "SHAKIL ";
console.log(Name.repeat(5));

// SHAKIL SHAKIL SHAKIL SHAKIL SHAKIL 

এই ছিলো জাভাস্ক্রিপ্ট ইএস৬ এর নতুন কিছু স্ট্রিং মেথডস । আশা করি বুঝতে পারছেন ধন্যবাদ সবাইকে ।

# javascript string methods

# string methods in es6

# new strings methods in es6

Share:

Wednesday, 2 June 2021

Template Literal in Javascript - জাভাস্ক্রিপ্টে টেমপ্লেট লিটারেল

 

template literal in javascript es6, template literal, backtic, template string bangla , javascript template string or literal

জাভাস্ক্রিপ্ট ইএস ৬(ES6) এ নতুনভাবে স্ট্রিং ডিক্লেয়ার এবং কিছু মজার কাজ করার জন্যই এসেছে টেমপ্লেট লিটারেল(Template Literal) যাকে টেমপ্লেট স্ট্রিং (Template String) ও বলা হয়।

হ্যালো সুন্দর মানুষজন, 

আজকের এই নতুন আরটিকেলে আপনাকে স্বাগতম । আজকে আলোচনার বিষয় হচ্ছে টেমপ্লেট লিটারেল(Template Literal)। 

আজকে আমরা যা যা শিখবো :-

১। টেমপ্লেট লিটারেল(Template Literal) সম্পর্কে

২। মাল্টিলাইন স্ট্রিং

৩। ভ্যারিয়েবল, কনক্যাটানেশন ও এক্সপ্রেশন

৪। টেমপ্লেট ট্যাগ

১। টেমপ্লেট লিটারেল(Template Literal) সম্পর্কে -

আগেই বলেছি, জাভাস্ক্রিপ্ট ইএস ৬(ES6) এ এই স্মার্ট ফিচারটি এসেছে । এটি ব্যাবহার করা খুবই সহজ, আমরা যখন কোনো স্ট্রিং নিই তখন সিঙ্গেল('') বা ডাবল কোটেশন("") ইউস করে নিই তাই নাহ ? হুম একদম তাই ।

তো টেমপ্লেট স্ট্রিং (Template String) ইউস করে কোনো স্ট্রিং নিতে হলে সিঙ্গেল বা ডাবল কোটেশনের পরিবর্তে - ব্যাকটিক (``) ইউস করতে হয় । ব্যাকটিক যদি আপনি খুজে না পান তাহলে আপনার কীবোর্ড এর ট্যাব tab কীর উপরে লক্ষ্য করেন।

সিনট্যাক্স :-

const Name = `Shakil Babu`

এই ফিচারটি আমাদের কি কি সুবিধা দেয় ?

 ১। এই ফিচারটির মাধ্যমে খুব সহজেই মাল্টিলাইন লাইন স্ট্রিং নেওয়া যায় । 
২। স্ট্রিং এর ভেতর ডাইনামিক ভ্যারিয়েবল ও এক্সপ্রেশন নিয়ে কাজ করা যায় । 
৩। এবং টেমপ্লেট ট্যাগ DSL(Domain Specific Language) নিয়েও কাজ করা যায়, যেমন - React.js এর Styled Component ।

২। মাল্টিলাইন স্ট্রিং :-

আমাদের অনেক সময় একের অধিক অর্থাৎ মাল্টিলাইন স্ট্রিং নিয়ে কাজ করার দরকার পরে । তো, আমরা জাভাস্ক্রিপ্ট ইএস৫(ES5) এ মাল্টিলাইন স্ট্রিং নেওয়ার সময় কিন্তু এস্কেপ(Escape) ক্যারেক্টারের সাহায্যে নিয়ে থাকি :-

const sentence = " I am first line \
I am second line "

আমরা কিন্তু মাল্টিলাইন স্ট্রিং নিয়েছি এখন যদি এইটার আউটপুট দেখি :-

console.log(sentence);
// output : I am first line I am second line

দেখছেন ? আউটপুট কিন্তু এক লাইনেই পেলাম । কারণ হলো আমরা শুধু \ ব্যাবহার করেছি সেইজন্য মাল্টিলাইন স্ট্রিং লিখতে পারছি আউটপুট মাল্টিলাইন পাচ্ছি নাহ ।

আউটপুটও যদি মাল্টিলাইন পেতে চাই তাহলে \n ব্যাবহার করে নিউ লাইন নিতে হবে ।

const sentence = " I am first line \n \
I am second line "

console.log(sentence);
/*
output:  
    I am first line
    I am second line
*/

এখন আমরা মাল্টিলাইন অর্থাৎ দুই লাইনে আউটপুটও পেয়েছি ।

উপরোক্ত কাজগুলো জাভাস্ক্রিপ্ট ইএস ৬(ES6) এর টেমপ্লেট লিটারেল(Template Literal) দিয়ে করা যাক :-

const sentence = `I am first line
I am second line `

console.log(sentence);
/*
output:  
    I am first line
    I am second line
*/

একদম সেইম আউটপুট, তাছাড়া কোনো এস্কেপ ক্যারেক্টারও ব্যাবহার করতে হয় নি । শুধু যে লাইনের পরে আমরা নিউ লাইন চাচ্ছি সেখানে একটা এন্টার দিলেই মানে এক লাইনের পরে আরেক লাইন লিখলেই ওকে।

৩। ভ্যারিয়েবল, কনক্যাটানেশন ও এক্সপ্রেশন :-

আমরা একের অধিক ভ্যারিয়েবলকে এবং স্ট্রিং কে একসঙ্গে জোড়া লাগাতে ইএস৫ এ (+) সাইনের দ্বারা করে থাকি যেমন :-

const Name = 'Shakil Babu';
const town = 'Bogura';

console.log('I am ' + Name + ' from ' + town);
// output;
// I am Shakil Babu from Bogura

আমরা দুইটা ভ্যারিয়েবল নিয়েছি Name এবং town নামে । তারপর লগ করেছি স্ট্রিং এবং ভ্যারিয়েবল গুলো (+) সাইনের দ্বারা কনকেট করে। এখন একই কাজ যদি আমরা ইএস৬ এর টেমপ্লেট লিটারেলে করি :-

const Name = 'Shakil Babu';
const town = 'Bogura';

console.log(`I am ${Name} from ${town}`);
// output;
// I am Shakil Babu from Bogura

আগের তুলনায় অনেক সহজে আমরা কাজটা করতে পারলাম । একটা জিনিস মনে রাখবেন যেকোনো ভ্যারিয়েবল বা এক্সপ্রেশনই ইউস করেন নাহ কেন ${} এই সিনট্যাক্স এর ভেতরে করতে হবে ।

টেমপ্লেট লিটারেলের আরও কিছু ব্যাবহার দেখা যাক :-

আমরা চাইলে ছোট-খাটো এক্সপ্রেশনও ইউস করতে পারি :-

const number = 10;
console.log(`Number is ${number > 20 ? 'greator than 20':'less than 20'}`) 
// output:
// Number is less than 20

আরও একটি :-

const num = 10;
console.log(`Sum = ${num + 20 + 20}`);
// output:
// Sum = 50

৪। টেমপ্লেট ট্যাগ :-

টেমপ্লেট ট্যাগ জিনিসটা ইউস হয় সাধারণত বিভিন্ন লাইব্রেরির সাথে যেমন- Styled Component, Apollo and GraphQl ইত্যাদি । যদিও এই জিনিসটা আমাদের এখনই যে শিখতে হবে তা নাহ তাও হালকা ধারণা থাকা ভালো :-

এখন আমরা দেখবো Styled Component এর সাথে টেমপ্লেট স্ট্রিং কিভাবে ব্যাবহার হয় । Styled Component মূলত React.js এর একটা লাইব্রেরি যা কাস্টম স্টাইলসহ অনেক কাজেই ব্যাবহার হয় ।

Styled Component এ টেমপ্লেট স্ট্রিং ব্যাবহার করা হয় CSS লিখতে যেমন :-

const p = Styled.p`

font-size : 20px ; 
background-color: blue;
color: white 

উপরোক্ত ভাবে আমরা যেকোনো (div,h1-h6,span, button, section and etc) স্টাইল লিখতে পারি ।

টেমপ্লেট ট্যাগ এখনই আপনার বুঝতে হবে নাহ সময় হইলে এমনিই বুঝে যাবেন আপাতত ধারণা থাকলো একটু, কি মজা!

ধন্যবাদ সবাইকে । 

# template literals in es6

# template strings

# es6 template literals

Share:

Tuesday, 1 June 2021

Type Conversion in Javascript - এক টাইপ থেকে অন্য টাইপে রুপান্তর

 

 

type conversion or casting in javascript, type casting in javascript, Type conversion in javascript

আশা করি আমরা জাভাস্ক্রিপ্ট টাইপ কনভারশন বা কাস্টিং একটু আধটু হলেও পারি । আজকে আমি কিছু টাইপ কাস্টিং সমন্ধে আলোচনা করবো হয়তো আপনারা অনেকেই পারেন বা জানেন।

কিভাবে এক ডাটা টাইপ থেকে আরেক ডাটা টাইপে কনভার্ট করতে হয় তা সম্পর্কে শিখবো সাথে প্রত্যেকটা কাস্টিং এর LONG HAND এবং SHORT HAND দেখবো । 

সো, আজাইরা ইন্ট্রো গল্প বাদ দিয়ে টাইপ কাস্টিং বা কনভারশন কি তা সমন্ধে পড়া যাক -

 এক ডাটা টাইপ থেকে আরেক ডাটা টাইপে কনভার্ট বা রূপান্তর করাকেই টাইপ কাস্টিং বা কনভারশন বলে । যেমন - string থেকে number এবং number থেকে string ইত্যাদি ইত্যাদি ।

আজকে আমরা যা যা শিখবো -

  1. ভ্যালু(value) থেকে বুলিয়ানে(Boolean) রূপান্তর
  2. স্ট্রিং(string) থেকে নাম্বার(number)
  3. নাম্বার(number) থেকে স্ট্রিং(string)
  4. ফ্লোট(float) থেকে ইন্টিজার(integer)

1. ভ্যালু(value) থেকে বুলিয়ানে(Boolean) রূপান্তর :-

 আমরা জানি যে বুলিয়ান(Boolean) ডাটা টাইপ সর্বদা দুইটা ভ্যালু রিটার্ন করে সত্য(true) অথবা মিথ্যা(false) । তো চলুন প্রথমে একটা স্ট্রিং(string) কে বুলিয়ানে রুপান্তর করি -

const name = 'Shakil Babu';

আমরা জানি যে উপোরক্ত name একটি truthy ভ্যালু ধরে রাখে যার ডাটা টাইপ স্ট্রিং(string) । এখন আমরা এইটাকে বুলিয়ানে(Boolean) রুপান্তর করবো । তো আমরা সচারচর যেভাবে করে থাকি তা হলো -

const name = 'Shakil Babu';
console.log(Boolean(name));
// true

এই একই কাজটা আমরা আরো সহজভাবে করতে পারি শুধু Boolean এর জায়গায় আমাদের কে দুইটা exclamatory sign(!) বা বিস্ময়কর চিহ্ন ব্যাবহার করতে হবে নিচে দেখুন -

const name = 'Shakil Babu';
console.log(!!(name));
// true

নাম্বার (number) থেকে বুলিয়ানে (boolean) :-

const Number = 100;
console.log(!!100);
// true

অ্যারে (array) থেকে বুলিয়ানে (boolean) :-

let arr = [1,2,3,4];
console.log(!!(!arr));
// false

এইখানে অ্যারের আগে দুইটা exclamatory sign(!) বা বিস্ময়কর চিহ্ন ব্যাবহার করা হয়েছে বুলিয়ানে রুপান্তর করার জন্যে এবং !arr এইখানে একটা (!) ব্যাবহার করা হয়ছে true কে false করার জন্যে। আশা করি বুঝতে পারছেন ।

2. স্ট্রিং(string) থেকে নাম্বার(number) :-

কোনো একটা স্ট্রিং কে নাম্বারে কনভার্ট করতে হইলে স্ট্রিংটা অবশ্যই নাম্বারের হতে হবে যেমন:- "10" তাহলে নাম্বারে কাস্টিং করার পর আমাদেরকে আউটপুট হিসেবে একটি নাম্বার দিবে । আর যদি স্ট্রিং(string) টা number না হয় অর্থাৎ "ten" এইরকম হয় তাহলে আমাদেরকে আউটপুট হিসেবে NaN(Not a Number) দিবে।

আমরা আগে যে ভাবে স্ট্রিং(string) থেকে নাম্বারে(number) কনভার্ট করতাম তা হলো :-

const ten = "10";
console.log(parseInt(ten));
// 10
// type number

<!--=========== OR ========= -->

const eight = '8';
console.log(Number(eight)); 
// 8
// type number

উপরোক্ত কাজটি আমরা আরও সহজে করতে পারি শুধু আমাদের কোনো স্ট্রিং(string) এর সামনে একটা প্লাস সাইন (+) ইউস করতে হবে তাহলেই কাজ খতম । অনেক সোজা এবং সংক্ষিপ্ত মনে হচ্ছে তাই না ? তো চলুন দেখা যাক -

SHORT HAND :-

const ten = +"10";
console.log(ten);
// 10
console.log(typeof(ten));
// number

দেখছেন ? আসলেই অনেক সোজা এবং তাড়াতাড়ি হইলো কাজটা ।

3. নাম্বার(number) থেকে স্ট্রিং(string) :-

এখন আমরা নাম্বার(number) থেকে স্ট্রিং(string) এ কিভাবে কনভার্ট করতে হয় তা দেখবো দুইটা উপায়ে একটা পুরাতন ওয়েতে আরেকটা সংক্ষিপ্ত এবং নতুন ওয়েতে ।

OLD WAY or LONGHAND :-

let ten = 10;
ten = ten.toString();
console.log(ten);
// 10
console.log(typeof(ten));
// string

<!--=========== OR ========= -->

let eight = 8;
eight = String(eight);
console.log(eight);
// 8
console.log(typeof(eight));
// string

SHORT HAND:-

let eight = 8+"";
console.log(eight);
// 8
console.log(typeof(eight));
// string
যে নাম্বারকে স্ট্রিং এ কনভার্ট করবেন শুধু ওই নাম্বারের সাথে একটি ফাকা স্ট্রিং প্লাস (+) করে দিলেই হয় ।

4. ফ্লোট(float) থেকে ইন্টিজার(integer):-

আমরা জানি ফ্লোট(float) এবং ইন্টিজার(integer) দুইটাই নাম্বার ডাটা টাইপ । যে সংখ্যা গুলো পূর্ণ সংখ্যা নয় অর্থাৎ দশমিক এবং দশমিকের পরে আরও সংখ্যা থাকে তাদেরকে ফ্লোট(float) সংখ্যা বলে । আর যে সংখ্যা গুলোর দশমিক এবং দশমিকের পরে কোনো সংখ্যা থাকে নাহ অর্থাৎ পূর্ণ সংখ্যা তাদেরকে ইন্টিজার সংখ্যা বলে ।

এখন কনভারশন বা কাস্টিং দেখা যাক -

LONG HAND :-

let price = 12.40;
price = parseInt(price);
console.log(price);
// 12

SHORT HAND :-

console.log(12.40 | 0);
// 12

console.log(59.55 | 0);
// 59

যে ফ্লোট(float) নাম্বারকে ইন্টিজারে(integer) কনভার্ট করা হবে সেই সংখ্যা এবং 0 এর মাঝে একটা | এই সাইন দিতে হবে তাহলেই কাজ হয়ে যাবে।  


আশা করি আপনারা বুঝতে পারছেন এবং পুরো টিউটোরিয়াল থেকে কিছু একটা জানতে বা শিখতে পারছেন। যদি লিখায় কোনো ভূল পেয়ে থাকেন তাহলে জানাতে ভুলবেন নাহ কিন্তু ধন্যবাদ ।

 

Share:

Monday, 1 February 2021

DSA

 ডাটা স্ট্রাকচার এবং অ্যালগরিদম লিস্ট 

জাভাস্ক্রিপ্ট দিয়ে ডাটা স্ট্রাকচার এবং অ্যালগরিদম । এখানে পর্যায়ক্রমে নতুন নতুন আর্টিকেল এড হতেই থাকবে । আপনারা যারা জাভাস্ক্রিপ্ট দিয়ে সমস্যা সমাধান করতে চান বা বিভিন্ন ডাটা স্ট্রাকচার এবং অ্যালগরিদম ইমপ্লিমেন্ট করতে চান তাদের উপকারে আসবে বলে মনে করি ।

আমরা অনেকেই মনে করি জাভাস্ক্রিপ্ট দিয়ে  Problem Solving  (সমস্যা সমাধান ) বা কন্টেস্ট  করা যায় নাহ এইটা ভূল ধারণা । জাভাস্ক্রিপ্ট দিয়েও প্রায় সবগুলো অনলাইন জাজে সমস্যা সমাধান করা যায় যেমন - Codeforces, Spoj, Hackerrank, Hackerearth, Leetcode, URI, Uva, Codechef ইত্যাদি ইত্যাদি ।

যারা জানেন নাহ যে কিভাবে জাভাস্ক্রিপ্ট দিয়ে বিভিন্ন অনলাইন জাজে সমস্যা সমাধান করা যায় তারা 00 নাম্বার পোস্টটি পড়ুন।

 

00.  জাভাস্ক্রিপ্ট দিয়ে  Problem Solving  (সমস্যা সমাধান )

পরিচিতি

০১।  ডেটা স্ট্রাকচার এবং অ্যালগরিদম পরিচিতি

০২।  অ্যালগরিদম(algorithm) লিখার নিয়ম

০৩।  ফ্লোচার্ট (Flowchart) নিয়ে আলোচনা

০৪।  বিগ ও নোটেশন (Big O Notation) সম্পর্কে

০৫।  অ্যালগরিদমে টাইম কমপ্লিক্সিটি(complexity) - পর্ব (০১)

০৬। অ্যালগরিদমে টাইম কমপ্লিক্সিটি(complexity) - পর্ব (০২)

০৭।  স্পেস কমপ্লিক্সিটি(Complexity)

সার্চিং অ্যালগরিদম(Algorithm)

 ০১। লিনিয়ার সার্চ (Linear Search)

 

 

 

 

# shakil babur jhuli dsa

# dsa bangla

Share: