ورود

View Full Version : ارسال پارامتر به تابع



mohammad#reza
یک شنبه 29 تیر 1393, 17:37 عصر
سلام. من با تعریف به این شکلی که در پایین میبینید در سی پلاس پلاس پارامتر به تابع ارسال میکنم و عملیات انجام گرفته روی ارگومان روی پارمتر اصلی نیز اعمال میشه.
void test(int& a) {
a = a *10;
}
int main() {
int a = 4;
test(a);
}
در جاوا باید چه کار کنم که تغییرات روی ارگومان روی پارامتر اصلی نیز اعمال شود؟
public static void test(int a) {
a = a * 10;
}
public static void main(String [] args) {
int a = 4;
test(a);
}

manoto1371
یک شنبه 29 تیر 1393, 18:25 عصر
با سلام
این مفهوم اشاره گر هست که باید در جاوا هم از اشاره گرها استفاده کنید.
با جستجوی ساده می توانید اشاره گرها در جاوا را مورد مطالعه قرار دهید.

Ebrahimkh
یک شنبه 29 تیر 1393, 18:49 عصر
در جاوا متغیرها همیشه با مقدار ارسال میشوند یعنی با ارجاع ممکن نیست
شما برا این کار هم می توانید متغیرتون رو به صورت public تعریف کنید اینجوری خیلی راحت می تونید تغییراتتون رو اعمال کنید


-------------------------------


ببینیم بزرگان چه نظری دارند

mohammad#reza
یک شنبه 29 تیر 1393, 20:40 عصر
خوب تعریف متغیر به صورت سراسری باعث هدر رفت حافظه نمیشه؟ شاید من احتیاج به صد متغیر و شی سویینگ داشته باشم اگه قرار باشه همرو سراسری تعریف کنم کنم که فاجعست!

cups_of_java
یک شنبه 29 تیر 1393, 21:02 عصر
شما انواع اولیه (primite) رو نمی تونی تغییر بدی... اما اشیا رو میتونی و این که هیچ وفت از متغیر های سراسری استفاده نکنید. محدود کنید تا جایی که میشه دسترسی به اون ها رو...
و اگر یک شی رو به متدی ارسال کنید اون متد می تونه مقادیر پراپرتی های اون شی رو عوض کنه! (در واقع شی ها مثل فراخوانی با ارجاع می مون و همین طور هم هست.)

mohammad#reza
یک شنبه 29 تیر 1393, 21:22 عصر
یعنی به جای int از Integer استفاده کنم؟

cups_of_java
یک شنبه 29 تیر 1393, 22:42 عصر
در این حالت من نمی فهمم شما چرا اصرار دارید خود متغیر رو عوض کنید در حالیکه این کار خیلی بدیه! به این میگن side effect شما باید از پارامتر های ورودی و مقادیر خروجی استفاده کنید همیشه....
اصلن هم به این کار نداشته باشید که میشه یا نمی شه!
int x = 10;
x = changeValue( x );

cups_of_java
یک شنبه 29 تیر 1393, 22:45 عصر
اینم می تونی بخونی (http://stackoverflow.com/questions/16061970/why-this-method-does-not-change-integer-value)

vahid-p
دوشنبه 30 تیر 1393, 00:18 صبح
شدن میشه. البته نه از Integer . بلکه یه کلاس دیگه خودتون بسازید که بتونید مقدارش رو تغییر بدید. Integer اجازه چنین کاری رو بدون تغییر شی نمیده ( متد setValue نداره ).

ولی منم با cups_of_java (http://barnamenevis.org/member.php?67212-cups_of_java) موافقم. یعنی نیازی به اینکار نیست. ولی خب اگر فقط شدن و نشدنش براتون مهمه، یک کلاس خودتون بسازید مثل این :
public class MyInteger {
private int value;
public MyInteger(int value){
this.value=value;
}

public int getValue(){
return value;
}

public void setValue(int value){
this.value=value;
}
}

در تابع از setValue استفاده کن، و تغییر رو شی پارامتر اعمال میشه.

mohammad#reza
دوشنبه 30 تیر 1393, 19:50 عصر
ممنون از جواب دوستان