কম্পিউটার টিউটোরিয়াল

কল বাই ভ্যালু এবং কল বাই রেফারেন্সের পার্থক্য


প্রোগ্রামিং-এ ফাংশনে প্যারামিটার পাস করার পদ্ধতির ভিত্তিতে ফাংশন আহ্বান দু প্রকারে ভাগ করা হয়: কল বাই ভ্যালু (Call by Value) এবং কল বাই রেফারেন্স (Call by Reference)। নামের মতোই, একটিতে প্যারামিটারের আসল মান পাস করা হয়, অন্যটিতে প্যারামিটারের রেফারেন্স বা লোকেশন পাস করা হয়।

মূল পার্থক্যগুলো:

ক্রমিক নং বিষয় কল বাই ভ্যালু কল বাই রেফারেন্স
১ নেমিং কনভেনশন প্যারামিটারের মান পাস করা হয় বলে Call by Value। প্যারামিটারের রেফারেন্স পাস করা হয় বলে Call by Reference।
২ আন্তরিক ইমপ্লিমেন্টেশন পাস করা ভ্যালু ফাংশনের লোকাল আর্গুমেন্টে কপি হয়। পাস করা প্যারামিটারের ঠিকানা/রেফারেন্স কপি হয়, সুতরাং দুটি একই মেমোরি লোকেশন রেফার করে।
৩ পরিবর্তনের প্রভাব ফাংশনের ভেতরে আর্গুমেন্ট পরিবর্তন করলে পাস করা প্যারামিটারে প্রভাব পড়ে না। ফাংশনের ভেতরে আর্গুমেন্ট পরিবর্তন করলে পাস করা প্যারামিটারেও পরিবর্তন হয়।
৪ রেফার্ড মেমোরি লোকেশন পাস করা প্যারামিটার এবং আর্গুমেন্টের মেমোরি লোকেশন ভিন্ন। দুটোর মেমোরি লোকেশন একই।
৫ সমর্থিত ভাষা C++, PHP, Visual Basic .NET, C# ইত্যাদি। প্রধানত Java।

কল বাই ভ্যালু উদাহরণ

ByValue.c

#include <stdio.h>

void swapByValue(int a, int b) {
    int t = a; a = b; b = t;
}

int main() {
    int n1 = 10, n2 = 20;
    swapByValue(n1, n2);
    printf("n1: %d, n2: %d\n", n1, n2);
    return 0;
}

আউটপুট

n1: 10, n2: 20

কল বাই রেফারেন্স উদাহরণ

ByReference.c

#include <stdio.h>

void swapByReference(int *a, int *b) {
    int t = *a; *a = *b; *b = t;
}

int main() {
    int n1 = 10, n2 = 20;
    swapByReference(&n1, &n2);
    printf("n1: %d, n2: %d\n", n1, n2);
    return 0;
}

আউটপুট

n1: 20, n2: 10

  1. মেথড এবং ফাংশনের পার্থক্য কী?

  2. MEAN.js এবং MEAN.io-এর পার্থক্য

  3. জাভাস্ক্রিপ্টে বর্গের যোগফল এবং যোগফলের বর্গের পার্থক্য

  4. সেলপ্যাডিং (Cellpadding) এবং সেলস্পেসিং (Cellspacing) এর পার্থক্য