iOS 101Başlangıç seviyesi derslerde iOS uygulama geliştirme ortamını detaylı olarak inceliyoruz.

Tüm Eğitimleri Aldın mı? Kendini sınamanın tam zamanı

Haydi Sınava Gir

Fonksiyonları Değer ile Çağırma

Kategori : Mobil | Lisans : Creative Commons (by-nc-sa) | En son 12.05.2016 tarihinde güncellendi
Eğitmen : Geleceği Yazanlar Ekibi
Etiketler : obj-c fonksiyon değerleri

Fonksiyonları değer ile çağırma (call by value) tekniğinde prensip, çağıran program ya da fonksiyondaki argümanlarla çağrılan fonksiyonda bunlara karşı gelen parametrelere, bellekte farklı yerlerin ayrılmasıdır.

Aşağıdaki programda, çağıran program - maintopla_1 adlı fonksiyona x, y ve z argüman değerlerini göndermektedir. Bu argüman değerleri sırası ile topla_1 fonksiyonundaki a, b, c parametreleri içine aktarılacaktır. Sonuçta topla_1 fonksiyonu gönderilen 3 argümanın toplamını hesaplayarak sonucu çağıran programa gönderir.

KOD BLOĞU:

 

int topla_1(int a,int b,int c);

#import <Foundation/Foundation.h>

int main(int argc,const char *argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
    
    int x,y,z,t;
    x=1;
    y=2;
    z=3;
    t=topla_1(x,y,z);
    NSLog(@"\TOPLAM=%i\n",t);
    NSLog(@"\nx=%i",x);
    NSLog(@"\ny=%i",y);
    NSLog(@"\nz=%i\n\n",z);
    [pool drain];
    return 0;
}
int topla_1(int a,int b,int c)
{
    NSLog(@"\na=%i",a);
    NSLog(@"\nb=%i",b);
    NSLog(@"\nc=%i\n\n",c);
    return a+b+c;
}

 

Çağıran program ve çağrılan fonksiyonla ilgili veri aktarımı ve paylaşımı şöyledir:

 

PROGRAMIN ÇIKTISI:

a=1

b=2

c=3

TOPLAM=6

x=1

y=2

z=3


Değer İle Çağırmada Fonksiyon İçinde Parametre Değerlerinin Değiştirilmesi:

Çağıran fonksiyon ya da programdan çağrılan fonksiyona değer ile veri aktarımında, çağrılan fonksiyon içinde parametre değerlerinde gerçekleştirilecek olan değişiklik, çağıran programda bu parametrelere karşı gelen argüman değerlerinde bir değişikliğe yol açmaz. Aşağıdaki örnek program bize bu konuda bir fikir verecektir.

KOD BLOĞU:

 

int topla_1(int a,int b,int c);

#import <Foundation/Foundation.h>

int main(int argc,const char *argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
    
    int x,y,z,t;
    x=1;
    y=2;
    z=3;
    t=topla_1(x,y,z);
    NSLog(@"\TOPLAM=%i\n",t);
    NSLog(@"\nx=%i",x);
    NSLog(@"\ny=%i",y);
    NSLog(@"\nz=%i\n\n",z);
    [pool drain];
    return 0;
}
int topla_1(int a,int b,int c)
{
    a=a-1;
    b=b-1;
    c=c-2;
    NSLog(@"\na=%i",a);
    NSLog(@"\nb=%i",b);
    NSLog(@"\nc=%i\n\n",c);
    return a+b+c;
}

 

 

PROGRAMIN ÇIKTISI:

a=0

b=1

c=1

TOPLAM=2

x=1

y=2

z=3

 

AÇIKLAMA:

Çağıran program; x, y ve z argümanları ile sırasıyla 1, 2 ve 3 değerlerini çağrılan topla_1 fonksiyonuna göndermekte ve bunlar ilk anda aşağıdaki tabloda belirtilen durumu oluşturmaktadır:

 

Daha sonra fonksiyon içinde,

a=a-1;

b=b-1;

c=c-2;

Atama döngüleri ile a, b ve c parametreleri değiştirilmektedir. Bunun sonucunda bellekteki son durum aşağıdaki gibi olur:

 

Bunun sonucu olarak,

return a+b+c;

komutuyla çağıran programa 2 değeri gönderilerek

TOPLAM=2

ifadesi elde edilir. Bu tip bir programda isteğimiz 1+2+3 değerini hesaplatmaksa, elbette o sonucu elde edemeyiz. Bu nedenle, çağrılan fonksiyon içinde parametre değerlerinin değiştirilmesi söz konusu olunca çok dikkatli olmamız gerekir.