Parameters vs. Arguments
জাভাস্ক্রিপ্টে, ফাংশন প্যারামিটার এবং আর্গুমেন্ট বিভিন্ন ধারণা:
| পরামিতি | যুক্তি |
|---|---|
| ফাংশন সংজ্ঞা তালিকাভুক্ত নাম | প্রকৃত মানগুলি ফাংশনে পাস করা এবং প্রাপ্ত করা হয়েছে৷ |
| যখন ফাংশন সংজ্ঞায়িত করা হয় তখন উল্লেখ করা হয় | ফাংশন কল করা হলে রিটার্ন করে |
| কি ধরনের ডেটা প্রত্যাশিত তা বর্ণনা করে | ফাংশনে সরবরাহকৃত প্রকৃত তথ্য |
function add(a, b)- এখানে a এবং b পরামিতি |
add(5, 3)- এখানে 5 এবং 3 আর্গুমেন্ট |
উদাহরণ
function multiply(a, b) {
return a * b;
}
let result = multiply(4, 5); // 20
উপরের উদাহরণে:
aএবংbপরামিতি4এবং5যুক্তি
যুক্তি4প্যারামিটারaনিযুক্ত করা হয়েছে
যুক্তি5প্যারামিটারbনিযুক্ত করা হয়েছে
সহজ প্রত্যাহার:
- পরামিতি:"এটা কি পায়" (কার্যকরী সংজ্ঞা)
- যুক্তি:"আমরা এটি পাঠাই" (কল টু অ্যাকশন)
The Arguments Object
জাভাস্ক্রিপ্ট ফাংশনargumentsঅবজেক্ট নামক একটি বিল্ট-ইন অবজেক্ট আছে।
argumentsঅবজেক্টে ফাংশন কল করার সময় ব্যবহৃত আর্গুমেন্টের বিন্যাস রয়েছে।
উদাহরণ: সর্বোচ্চ মান খোঁজা
x = findMax(1, 123, 500, 115, 44, 88);
function findMax() {
let max = -Infinity;
for (let i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
console.log(x); // 500
উদাহরণ: সমস্ত ইনপুট মান যোগ করা
x = sumAll(1, 123, 500, 115, 44, 88);
function sumAll() {
let sum = 0;
for (let i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
console.log(x); // 871
আর্গুমেন্ট বস্তু বৈশিষ্ট্য:
arguments.length: পাসকৃত আর্গুমেন্টের সংখ্যাarguments[0]: প্রথম যুক্তিarguments[1]: দ্বিতীয় যুক্তি, এবং তাই ...arguments.callee: বর্তমান অপারেশন নির্দেশ করে
দ্রষ্টব্য: argumentsএকটি অবজেক্ট অ্যারের মত, কিন্তু একটি প্রকৃত অ্যারে নয়। এইlengthবৈশিষ্ট্য এবং সূচক অ্যাক্সেস আছে.
আর্গুমেন্ট অবজেক্ট রেফারেন্স:
যদি একটি ফাংশন একটি বৃহৎ সংখ্যক আর্গুমেন্ট (ঘোষিত চেয়ে বেশি) সঙ্গে কল করা হয়, এই আর্গুমেন্টargumentsবস্তু ব্যবহার করে অ্যাক্সেস করা যেতে পারে
মনোযোগ: argumentsঅবজেক্টটি অবহেলিত এবং আধুনিক জাভাস্ক্রিপ্ট রেস্ট প্যারামিটারে (...) ব্যবহার করার পরামর্শ দেওয়া হয়।
আর্গুমেন্টের ক্রম গুরুত্বপূর্ণ
আর্গুমেন্টগুলি যে ক্রমে প্রদর্শিত হয় সেই ক্রমে প্যারামিটারগুলিতে বরাদ্দ করা হয়৷
উদাহরণ
function subtract(a, b) {
return a - b;
}
let x1 = subtract(10, 5); // 5
let x2 = subtract(5, 10); // -5
console.log(x1); // 5
console.log(x2); // -5
উপরের দুটি কল ভিন্ন ফলাফল প্রদান করে কারণ অর্ডার ভিন্ন।
মনে রাখার জন্য:
- প্রথম আর্গুমেন্ট প্রথম প্যারামিটারে যায়
- দ্বিতীয় যুক্তিটি দ্বিতীয় প্যারামিটারে যায়
- তৃতীয় আর্গুমেন্ট তৃতীয় প্যারামিটারে চলে যায়, এবং তাই...
একে বলা হয় "শর্ত-ভিত্তিক আর্গুমেন্ট"।
আর্গুমেন্ট পরিবর্তনশীল হতে পারে
আর্গুমেন্ট মান হতে হবে না. তারা পরিবর্তনশীল হতে পারে.
উদাহরণ
let x = 5;
let y = 6;
function multiply(a, b) {
return a * b;
}
let result = multiply(x, y);
console.log(result); // 30
আরো উদাহরণ:
let firstName = "John";
let lastName = "Doe";
let age = 30;
function createUser(name, surname, userAge) {
return {
name: name,
surname: surname,
age: userAge
};
}
let user = createUser(firstName, lastName, age);
console.log(user); // {name: "John", surname: "Doe", age: 30}
আর্গুমেন্ট হিসাবে ভেরিয়েবল:
আর্গুমেন্ট হিসাবে ভেরিয়েবল ব্যবহার করা:
- পুনরায় ব্যবহারযোগ্য:একই ফাংশনকে বিভিন্ন ভেরিয়েবল দিয়ে কল করা যায়
- পরিষ্কার:কোড তার উদ্দেশ্য ব্যাখ্যা করে
- নমনীয়:রানটাইমে ভেরিয়েবল পরিবর্তন হতে পারে
- পরীক্ষাযোগ্য:বিভিন্ন ইনপুট দিয়ে সহজেই পরীক্ষা করুন
যুক্তির নিয়ম
জাভাস্ক্রিপ্ট ফাংশন সংজ্ঞা আর্গুমেন্টের জন্য ডেটা প্রকার নির্দিষ্ট করে না।
টাইপ টেস্টিং নেই
জাভাস্ক্রিপ্ট ফাংশন পাস করা আর্গুমেন্টে টাইপ চেকিং করে না।
ফাংশন যোগ(a, b) { ফেরত a + b; } // সংখ্যা সহ console.log(যোগ করুন(5, 3)); // 8 // স্ট্রিং সহ (সংযুক্ত) console.log(যোগ করুন("5", "3")); // "53" // রচনা সহ console.log(যোগ করুন(5, "3")); // "53"
আর্গুমেন্ট চেক সংখ্যা নেই
জাভাস্ক্রিপ্ট ফাংশন প্রাপ্ত আর্গুমেন্টের সংখ্যা পরীক্ষা করে না।
ফাংশন গুন (a, b) { ফেরত a * b; } // console.log(গুণ করুন(2, 3, 4)); // 6 (শুধুমাত্র প্রথম দুটি ব্যবহার করা হয়) // কম আর্গুমেন্ট console.log(গুণ(2)); // NaN (b অনির্ধারিত)
মিথ্যা যুক্তি
মিথ্যা যুক্তি মিথ্যা উত্তর দেবে:
উদাহরণ
ফাংশন to সেলসিয়াস (ফারেনহাইট) { রিটার্ন (5/9) * (ফারেনহাইট - 32); } // ভুল টাইপ let value = to সেলসিয়াস("জন"); console.log(মান); // NaN // যুক্তি ছাড়া let value2 = to সেলসিয়াস(); console.log(value2); // NaN
মিথ্যা যুক্তির পরিণতি:
- ভুল বিভাগ:সংখ্যার পরিবর্তে স্ট্রিং →
NaN - আর্গুমেন্ট ভুলে যাওয়া:প্যারামিটার
undefinedহয় - ভুল আদেশ:আর্গুমেন্ট অবৈধ পরামিতি পাস হবে
- আরও যুক্তি:অতিরিক্ত যুক্তি উপেক্ষা করা হয়
অনুপস্থিত যুক্তি
যদি একটি ফাংশনকে প্যারামিটারের চেয়ে কম আর্গুমেন্ট সহ কল করা হয়, তাহলে মান অনুপস্থিতundefinedহয়ে উঠছে
উদাহরণ
function multiply(a, b) {
console.log("a:", a); // 4
console.log("b:", b); // undefined
return a * b;
}
let result = multiply(4);
console.log(result); // NaN (4 * undefined = NaN)
দ্রষ্টব্য:
একটি জাভাস্ক্রিপ্ট ফাংশন পরামিতি মান (আর্গুমেন্ট) উপর কোনো পরীক্ষা সঞ্চালন করে না।
ডিফল্ট পরামিতি
যদি একটি ফাংশন অনুপস্থিত আর্গুমেন্ট (ঘোষিত থেকে কম), অনুপস্থিত মান সহ কল করা হয়undefinedহিসাবে সেট করা হয়
কখনও কখনও এটি গ্রহণযোগ্য, তবে কখনও কখনও প্যারামিটারে একটি ডিফল্ট মান নির্ধারণ করা ভাল:
ES5 পথ (পুরানো উপায়)
ফাংশন myFunction(x, y) { যদি (y === অনির্ধারিত) { y = 2; } রিটার্ন x + y; } console.log(myFunction(5)); // 7 (y ডিফল্ট থেকে 2) console.log(myFunction(5, 3)); // 8 (y = 3)
ES6 পথ (আধুনিক উপায়)
ফাংশন myFunction(x, y = 10) { রিটার্ন x + y; } console.log(myFunction(5)); // 15 (y ডিফল্ট থেকে 10) console.log(myFunction(5, 20)); // 25 (y = 20) console.log(myFunction(5, 0)); // 5 (y = 0)
ডিফল্ট প্যারামিটার মান:
ECMAScript 2015 ফাংশন প্যারামিটারগুলিকে ডিফল্ট মান থাকতে দেয়।
- যুক্তি প্রদান করা হয় না বা
undefinedযদি তাই হয়, ডিফল্ট মান ব্যবহার করা হয়. - ডিফল্ট মান যে কোনো অভিব্যক্তি হতে পারে, অথবা এমনকি অন্যান্য পরামিতি নির্দিষ্ট করতে পারে।
Function Rest Parameter
Rest parameter (...) একটি ফাংশনকে অনির্দিষ্টকালের জন্য অনেক আর্গুমেন্টের একটি অ্যারে ম্যানিপুলেট করার অনুমতি দেয়:
উদাহরণ
function sum(...args) {
let sum = 0;
for (let arg of args) sum += arg;
return sum;
}
let x = sum(4, 9, 16, 25, 29, 100, 66, 77);
console.log(x); // 326
আরো উদাহরণ:
// স্ট্রিং এর সংযোগ ফাংশন concatenate(...স্ট্রিং) { strings.join(''); } console.log(concatenate("হ্যালো", "ওয়ার্ল্ড", "!")); // "হ্যালো ওয়ার্ল্ড!" // একাধিক আর্গুমেন্ট নিয়ে কাজ করা ফাংশন createUser(নাম, বয়স, ...শখ) { ফিরে নাম: নাম, বয়স: বয়স, hobbies: শখ }; } let user = createUser("John", 30, "Reading", "Gaming", "Coding"); console.log(ব্যবহারকারী); // {নাম: "জন", বয়স: 30, শখ: ["পড়া", "গেমিং", "কোডিং"]}
Rest Parameter vs Arguments Object:
Rest Parameter (...args) |
Arguments Object |
|---|---|
| প্রকৃত ক্রম | অ্যারের মত বস্তু |
| আধুনিক ES6 সিনট্যাক্স | ঐতিহ্যগত পদ্ধতি |
অ্যারে পদ্ধতির সাথে ব্যবহার করা যেতে পারে (map, filter, etc.) |
অ্যারে পদ্ধতি সরাসরি ব্যবহার করা যাবে না |
| শুধুমাত্র অবশিষ্ট প্যারামিটার সংগ্রহ করে | সব যুক্তি সংগ্রহ করে |
পরামর্শ:আধুনিক কোডের জন্য বিশ্রাম পরামিতি ব্যবহার করুন।
আর্গুমেন্ট মান দ্বারা পাস করা হয়
একটি ফাংশন কলে, প্যারামিটারগুলি হল ফাংশনের আর্গুমেন্ট।
জাভাস্ক্রিপ্ট আর্গুমেন্টমান অনুসারেপাস করা হয়েছে: ফাংশনটি শুধুমাত্র মান জানে, আর্গুমেন্টের অবস্থান নয়।
উদাহরণ: আদিম মান
ফাংশন পরিবর্তন মান(x) { x = 10; // স্থানীয় পরিবর্তনশীল পরিবর্তন console.log("ইনসাইড ফাংশন:", x); // 10 } যাক num = 5; console.log("আগে:", সংখ্যা); // 5 changeValue(num); console.log("পর:", সংখ্যা); // 5 (অপরিবর্তিত!)
যদি একটি ফাংশন একটি আর্গুমেন্টের মান পরিবর্তন করে তবে এটি প্যারামিটারের মূল মান পরিবর্তন করে না।
আর্গুমেন্টের পরিবর্তনগুলি ফাংশনের বাইরে দৃশ্যমান (প্রতিফলিত) নয়।
"মান দ্বারা" মানে:
কর্ম থেকে যুক্তিকপিপাঠানো হচ্ছে, আসল নয়। অতএব, ফাংশনের মধ্যে পরিবর্তনগুলি মূল পরিবর্তনশীলকে প্রভাবিত করে না।
আইটেম উদ্ধৃতি দ্বারা পাঠানো হয়
জাভাস্ক্রিপ্টে, অবজেক্ট কোট হল মান।
এই কারণে, বস্তুউদ্ধৃতি দ্বারাপ্রেরিত হিসাবে কাজ করে:
উদাহরণ: বস্তু
ফাংশন changeObject(obj) { obj.name = "পরিবর্তিত"; // বস্তুর বৈশিষ্ট্য পরিবর্তন করে console.log("Inside function:", obj); // {নাম: "পরিবর্তিত", বয়স: 30} } যাক ব্যক্তি = { নাম: "জন", বয়স: 30}; console.log("আগে:", ব্যক্তি); // {নাম: "জন", বয়স: 30} changeObject(ব্যক্তি); console.log("পর:", ব্যক্তি); // {নাম: "পরিবর্তিত", বয়স: 30} (পরিবর্তিত!)
যখন একটি ফাংশন একটি বস্তুর বৈশিষ্ট্য পরিবর্তন করে, এটি মূল মান প্রতিস্থাপন করে।
বস্তুর বৈশিষ্ট্যের পরিবর্তনগুলি ফাংশনের বাইরে পরিলক্ষিত হয় (প্রতিফলিত)।
মূল পার্থক্য:
| আদিম মান (মান অনুসারে) | বস্তু (রেফারেন্স দ্বারা) |
|---|---|
| সংখ্যা, স্ট্রিং, বুলিয়ান | অবজেক্ট, অ্যারে, ফাংশন |
| একটি কপি পাঠানো হয় | একটি উদ্ধৃতি পাঠানো হয় |
| ফাংশনের মধ্যে পরিবর্তনগুলি মূল পরিবর্তন করে না | ফাংশনের মধ্যে পরিবর্তন আসল পরিবর্তন করবে |
let x = 5; change(x);→ x পরিবর্তন হয় না |
let obj = {}; change(obj);→ obj পরিবর্তন হবে |
সাধারণ ভুল
বিভ্রান্তিকর পরামিতি এবং আর্গুমেন্ট
প্যারামিটারের নাম। আর্গুমেন্ট হল মান.
// ভুল মন্তব্য: ফাংশন যোগ (5, 3) { ... } // ভুল! পরামিতি অবশ্যই নাম হতে হবে // ঠিক আছে: ফাংশন যোগ(a, b) { ... } // a, b প্যারামিটার যোগ করুন (5, 3); // 5, 3টি যুক্তি
সিকোয়েন্স ভুলে যাওয়া
আর্গুমেন্ট অবস্থানগতভাবে বরাদ্দ করা হয়.
ফাংশন createUser(নাম, বয়স) { ফেরত {নাম: নাম, বয়স: বয়স}; } // ত্রুটি: let user = createUser(30, "John"); // {নাম: ৩০, বয়স: "জন"} // ঠিক আছে: let user = createUser("John", 30); // {নাম: "জন", বয়স: 30}
অনুপস্থিত যুক্তি
undefinedএড়াতে ডিফল্ট মান ব্যবহার করুন
// ত্রুটি: ফাংশন গুন (a, b) { ফেরত a * b; // NaN যদি b অনির্ধারিত হয় } // ঠিক আছে: ফাংশন গুন (a, b = 1) { ফেরত a * b; // 1 যদি b প্রদান করা না হয় } console.log(গুণ(5)); // 5 (খ = 1)
ফাংশন আর্গুমেন্ট অনুশীলন
জাভাস্ক্রিপ্টে, আর্গুমেন্টগুলি কীভাবে পাস করা হয় (আদিম মান এবং বস্তুতে)?
জাভাস্ক্রিপ্টে, কিভাবে আর্গুমেন্ট পাস করা হয়?
সমাধান বর্ণনা:
জাভাস্ক্রিপ্টে, আর্গুমেন্ট পাস করার পদ্ধতি আর্গুমেন্টের ধরনের উপর নির্ভর করে পরিবর্তিত হয়:
// আদিম মান: মান দ্বারা ফাংশন পরিবর্তন আদিম(x) { x = 10; // অনুলিপি প্রতিস্থাপন } যাক num = 5; পরিবর্তন আদিম(সংখ্যা); console.log(num); // 5 (অপরিবর্তিত!) // অবজেক্ট: উদ্ধৃতি দ্বারা মত ফাংশন changeObject(obj) { obj.value = 10; // মূল বস্তু প্রতিস্থাপন } যাক myObj = {মান: 5}; changeObject(myObj); console.log(myObj.value); // 10 (পরিবর্তিত!)
মান অনুসারে (ডিফল্ট মান):
- সংখ্যা, স্ট্রিং, বুলিয়ান
- একটি অনুলিপি ফাংশন পাঠানো হয়
- ফাংশনের মধ্যে পরিবর্তনগুলি মূল পরিবর্তন করে না
রেফারেন্স দ্বারা (বস্তু):
- অবজেক্ট, অ্যারে, ফাংশন
- একটি রেফারেন্স (মেমরি ঠিকানা) ফাংশনে পাস করা হয়
- ফাংশনের মধ্যে পরিবর্তন আসল পরিবর্তন করবে
প্রযুক্তিগতভাবে:বস্তুগুলি "উদ্ধৃতি মান দ্বারা" (উদ্ধৃতির একটি অনুলিপি) পাস করা হয়, তবে বাস্তবে এটি উদ্ধৃতির মতো কাজ করে।
পরবর্তী অধ্যায়
Function Expressions
পরবর্তী পাঠে, আমরা ফাংশন এক্সপ্রেশন সম্পর্কে শিখব - ভেরিয়েবলে ফাংশন সংরক্ষণের উপায়:
- কার্যকরী অভিব্যক্তি বনাম ঘোষণা
- বেনামী অপারেশন
- উত্তোলন
- IIFE (অটোমেটেড ফাংশন)