fluidfluidfluidfluidfluid

سوال جواب دانشجویی

سوالات و مشکلات خود را مطرح کنید تا سریع به جواب برسید

عنوان سوال : منظور از فراخوانی با مقدار چیست؟
فاطمه سلیمان پور - (سوال کننده)

لطفا اگر پاسخ را می‌دانید، بنویسید.

زهرا یعقوبیان


فراخوانی با مقدار (Call by Value) یکی از روش های ارسال پارامتر به یک تابع در برنامه نویسی جاوا است. در این روش، مقدار پارامتر به تابع ارسال می شود و هرگونه تغییری که در داخل تابع ایجاد می شود، تنها بر روی مقدار محلی تابع تاثیر می گذارد و مقدار اصلی پارامتر تغییر نمی کند.


برای فراخوانی تابع با مقدار در جاوا، از نوع داده ای ابتدایی یا متغیر های مرجع استفاده می شود. به عنوان مثال، در کد زیر، مقدار یک عدد از کاربر گرفته شده و به تابع ارسال می شود. در داخل تابع، مقدار این عدد به دو برابر شدند، اما مقدار اصلی عدد در نهایت تغییر نمی کند.


public class CallByValueExample {
    public static void main(String[] args) {
        int num = 5;
        System.out.println("Before calling doubleNumber() method: " + num);
        doubleNumber(num);
        System.out.println("After calling doubleNumber() method: " + num);
    }
    public static void doubleNumber(int x) {
        x = x * 2;
        System.out.println("Inside doubleNumber() method: " + x);
    }

}


خروجی این برنامه به شکل زیر است:

Before calling doubleNumber() method: 5
Inside doubleNumber() method: 10
After calling doubleNumber() method: 5


همانطور که مشاهده می کنید، مقدار اصلی عدد پس از فراخوانی تابع با مقدار، تغییر نمی کند و همچنان برابر 5 باقی می ماند.
در مقابل، فراخوانی با مقداردر برنامه نویسی جاوا، بر خلاف فراخوانی با مقدار مرجع (Call by Reference) است که در این روش، مرجع به متغیر ارسال می شود و هرگونه تغییری که در داخل تابع ایجاد می شود، تغییراتی را در متغیر اصلی اعمال می کند.
برای فراخوانی تابع با مقدار مرجع در جاوا، از نوع داده ای مرجع یا اشاره گر به متغیر استفاده می شود. به عنوان مثال، در کد زیر، مرجع یک آرایه به تابع ارسال می شود. در داخل تابع، مقدار همه ی خانه های آرایه به دو برابر شدند و این تغییرات روی متغیر اصلی نیز تاثیر گذاشته است.

public class CallByReferenceExample {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        System.out.println("Before calling doubleArray() method: " + Arrays.toString(arr));
        doubleArray(arr);
        System.out.println("After calling doubleArray() method: " + Arrays.toString(arr));
    }
    public static void doubleArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] * 2;
        }
        System.out.println("Inside doubleArray() method: " + Arrays.toString(arr));
    }
}


خروجی این برنامه به شکل زیر است:

Before calling doubleArray() method: [1, 2, 3, 4, 5]
Inside doubleArray() method: [2, 4, 6, 8, 10]
After calling doubleArray() method: [2, 4, 6, 8, 10]


همانطور که مشاهده می کنید، مقدار خانه های آرایه پس از فراخوانی تابع با مقدار مرجع، دو برابر شده اند و تغییرات روی متغیر اصلی نیز تاثیر گذاشته است.
در کل، استفاده از فراخوانی با مقدار یا مقدار مرجع بستگی به نوع مسئله و نیاز های برنامه دارد و در برنامه نویسی جاوا هر دو روش مورد استفاده قرار می گیرند.
در برنامه نویسی جاوا، می توان از کلمه کلیدی final برای تعریف یک متغیر ثابت استفاده کرد. متغیرهایی که با final تعریف شده اند، پس از تعیین مقدار اولیه، نمی توانند مقدار دیگری دریافت کنند. در واقع، این متغیرها به صورت ثابت در نظر گرفته می شوند و هرگونه تغییری در آنها مجاز نیست.
برای تعریف یک متغیر با final، کافی است قبل از نوع داده ای آن، کلمه کلیدی final را قرار دهید. به عنوان مثال:

final int MAX_VALUE = 100;


در این مثال، متغیر MAX_VALUE با final تعریف شده است و پس از تعیین مقدار اولیه، نمی تواند مقدار دیگری دریافت کند.
استفاده از متغیرهای ثابت با final، دارای مزایایی مانند افزایش خوانایی و قابلیت تغییر کمتر کد است. همچنین، با استفاده از متغیرهای ثابت، احتمال خطا در زمان اجرا به دلیل تغییر مقدار متغیر، کاهش می یابد.
در نهایت، توصیه می شود که در صورتی که مقدار یک متغیر در طول برنامه تغییر نمی کند، از final برای تعریف آن استفاده کنید.
به علاوه، برای ثابت کردن یک متغیر با مقدار ثابت در جاوا، می توان از کلمه کلیدی static نیز استفاده کرد. متغیرهای static final با مقدار ثابت، به عنوان ثابت های کلاس در نظر گرفته می شوند و مقدار آنها تا زمان اجرای برنامه، ثابت باقی می ماند.
برای تعریف یک متغیر static final، کافی است قبل از final، کلمه کلیدی static را نیز قرار دهید. به عنوان مثال:

public class MathConstants {
  public static final double PI = 3.14159265359;
  public static final double E = 2.71828182846;
}


در این مثال، دو متغیر PI و E با static final تعریف شده اند و به عنوان ثابت های کلاس MathConstants در نظر گرفته می شوند.
استفاده از متغیرهای static final با مقدار ثابت، دارای مزایایی مانند افزایش خوانایی و قابلیت دسترسی آسان تر به ثابت ها از سایر بخش های برنامه است. همچنین، این متغیرها باعث کاهش استفاده از حافظه در مقایسه با استفاده از متغیرهای غیرثابت با مقدار ثابت می شوند.
در نهایت، توصیه می شود که در صورتی که مقدار یک متغیر در طول برنامه تغییر نمی کند و به عنوان یک ثابت در نظر گرفته می شود، از static final برای تعریف آن استفاده کنید.
به علاوه، می توان از متدهای static در جاوا نیز استفاده کرد. متدهای static متدهایی هستند که برای اجرا به نیاز به ایجاد شی از کلاس مربوطه ندارند و می توانند مستقیماً از نام کلاس فراخوانی شوند. متدهای static در جاوا به کاربرد زیادی برای ایجاد کلاس های ابزاری (utility classes) دارند.
برای تعریف یک متد static، کافی است قبل از نوع بازگشتی، کلمه کلیدی static را قرار دهید. به عنوان مثال:

public class MathUtils {
  public static int add(int x, int y) {
    return x + y;
  }
  public static double divide(double x, double y) {
    if (y == 0) {
      throw new IllegalArgumentException("Cannot divide by zero!");
    }
    return x / y;
  }
}


در این مثال، دو متد add و divide با static تعریف شده اند و مستقیماً می توان از آنها با فراخوانی نام کلاس فراخوانی کرد. به عنوان مثال
:


int sum = MathUtils.add(3, 4); // sum is 7
double result = MathUtils.divide(10, 2); // result is 5.0


مزایای استفاده از متدهای static در جاوا شامل این است که آنها قابل دسترسی در سراسر برنامه هستند و نیاز به ایجاد شی از کلاس برای فراخوانی آنها نیست. همچنین، متدهای static در جاوا می توانند برای ایجاد کلاس های ابزاری (utility classes) و توابع راهنما (helper functions) به کار گرفته شوند.
به طور کلی، در صورتی که نیاز به ایجاد یک تابع یا متد برای انجام یک کار خاص دارید و نیاز به ایجاد شی از کلاس برای فراخوانی آن ندارید، از متدهای static استفاده کنید.

سوالی دارید؟

هر سوالی دارید فقط کافیه سوال خود را مطرح کنید تا از جواب هزاران کاربر سراسر اینترنت اگاه شوید.

نیاز داریم که شما با ما هماهنگ باشید آیا مایل هستید؟

میدونی مشاوره پروژه چیه؟

از صفر تا صد پروژه ات یک متخصص کمکت میکنه تا پروژتون رو انجام بدی نیاز به آموزش داری آموزشت میده باگ داری برات رفع میکنه