Değer İle Çağırma (Call by Value)

Değer ile çağırma yöntemi, içeri modelinin gerçekleştirimidir. Bu yöntemde resmi parametre, karşı gelen gerçek parametrenin değeriyle bağlandıktan sonra,altprograma yerel bir değişken olarak nitelendirilir.

Bu yöntem, sadece gerçek parametreden resmi parametreye değer geçişi olduğu için en güvenilir parametre aktarım yöntemidir. Ancak, bu değer geçişi sırasında fiziksel olarak veri kopyalanması gerçekleşir. Yani, resmi parametre için de bellek ayrılması gerekir.

Değer İle Çağırma (Call by Value) Örneği

image-center

İsim ile Çağırma (Call by Name)

İsim ile çağırma yöntemi de bir içeri-dışarı modeli için gerçekleştirimidir. Bir gerçek parametre isim ile çağırma yöntemi ile aktarıldığında, altprogramda gerçek parametreye karşı gelen resmiparametrenin bulunduğu her yere metinsel olarak gerçek parametre yerleştirilir. Eğer gerçek parametre bir sabit değerse, isim ile çağırma yöntemi, değer ile çağırma yöntemi ile aynı şekilde gerçekleşir. Eğer gerçek parametre bir değişkense, isim ile çağırma yöntemi başvuru ile çağırma yöntemi ile aynı şekilde gerçekleşir.

İsim ile Çağırma Örneği

void f(int a,int b)
{
b=5;
b=a;
}

int g()
{
int i = 3;
f(i+1,i);
write i;
}

Çıktı: 6 Olacaktır.

Sonuç ile Çağırma (Call by Result)

Sonuç ile çağırma yöntemi, dışarı modelinin gerçekleştirimidir. Bu yöntemde çağırım deyimi ile altprograma bir değer aktarılmazken,gerçek bir parametreye karşı gelen resmi parametrenin değeri, altprogram sonunda, denetim yeniden çağıran programa geçmeden önce, gerçek parametreyi gösteren değişkene aktarılır.

image-center

Bu tanımlamadan anlaşıldığı gibi,gerçek parametrenin değişken olması zorunludur.

Gerçek parametreye karşı gelen resmi parametre, altprogramın çalışması süresince yerel değişkendir. Bu yöntemin uygulanmasındaki güçlük, gerçek parametrenin değerinin resmi parametreye aktarılmasının önlenmesidir.

Sonuç ile çağırma örneği

void plus(by-value int a, by-value int b, by-result int c)
{
c = a+b;
}

void f()
{
int x = 3; int y = 4; int z;
plus(x, y, z);
write z;
}

Çıktısı:7 Olacaktır.

Değer ve Sonuç ile Çağırma (Call by Value Result)

Değer ve sonuç ile çağırma yöntemi, içeri-dışarı modelinin gerçekleştirimi olup, değer ile çağırma ve sonuç ile çağırma yöntemlerinin birleşimidir.

Bu yöntemde, gerçek parametrenin değeri ile karşı gelen resmi parametrenin değeri bağlandıktan sonra resmi parametre, altprogramın çalışması süresince yerel değişken gibi davranır ve altprogram sona erdiğinde resmi parametrenin değeri gerçek parametreye aktarılır. Bu yöntemde de gerçek parametrenin değişken olması zorunludur.

Değer ve Sonuç ile Çağırma Örneği

m,n : integer;

procedure r (k,j : integer)
begin
k := k+1;
j := j+2;
end r;

m := 5;
n := 3;
r(m,n);
write m,n;

Çıktısı:6 5 olacaktır.

Başvuru ile Çağırma (Call by Reference)

Başvuru ile çağırma yöntemi de gerçek ve resmi parametreler arasında iki yönlü veri aktarımı sağlar. Ancak önceki yöntemlerden en önemli farkı, altprograma verinin adresinin aktarılmasıdır.

Bu adres aracılığıyla altprogram, çağıran program ile aynı bellek yerine erişebilir ve gerçek parametre, çağıran program ve altprogram arasında ortak olarak kullanılır.

Başvuru ile Çağırma Örneği

y: integer;
procedure p(x: integer)
{ x := x + 1;
x := x + y;
}

y := 2;
p(y);
write y;

Çıktı:5 olacaktır.

Başvuru ile Çağırma Örneği-2

x : integer;
procedure foo(y : out integer)
y := 3;
print x;
. . .
x := 2;
foo(x);
print x;

Çıktı:3 3 olacaktır.