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

Operatörlerin Öncelikleri ve Birleşme Sıraları

Kategori : Mobil | Lisans : Creative Commons (by-nc-sa) | En son 11.05.2016 tarihinde güncellendi
Eğitmen : Geleceği Yazanlar Ekibi
Etiketler : obj-c operatörler

Aşağıdaki tabloda yer alan Objective-C dilindeki operatörlerin öncelik ve birleşme sıralarına göz atalım:

Birleşme

Operatörün Türü

Bu türde bulunan operatörler

Sağdan sola Birincil ( ) –> .
Sağdan sola   Tekli (unary)   + - ! ~ ++ - - (type)* & sizeof 
Soldan sağa   Çarpımsal   * / % 
Soldan sağa Toplamsal +  –  
Soldan sağa Öteleme (shift)   <<  >>  
Soldan sağa İlişkisel <   <=  >   >=  
Soldan sağa Eşitlik Kontrolü ==     !=  
Soldan sağa Bit düzeyinde AND   &
Soldan sağa Bit düzeyinde XOR   ^  
Soldan sağa Bit düzeyinde OR |
Soldan sağa Lojik AND   &&
Soldan sağa Lojik OR ||
Sağdan sola   Koşul ? :  
Sağdan sola   Atama = += -= *= /= %=>>= <<= &= ^= |= 
Soldan sağa Virgül ,

İşlemlerde öncelik ve birleşme özellikleri son derece önemlidir. Geliştiricinin hesaplamak istediği ifadeyi doğru olarak tanımlaması bu kavramları iyi anlamış olmasına bağlıdır. Operatörlerin bazılarının diğerlerinden öncelikli olması demek, öncelikli operatörlere ait operandların gruplanarak diğerlerinden evvel işleme sokulması anlamına gelir.

Örneğin; 13 + 4 * 12 ifadesinde çarpma operatörü toplamaya göre öncelikli olduğu için önce 4 ve 12 operandları gruplanarak 4 * 12 işlemi yapılır, sonra 13 + 48 işlemi gerçekleştirilir. (13 + ( 4 * 12 )) Bu nedenle örnek ifadenin sonucu 204 değil, 61'dir. Öncelik sırası aynı olan operatörler arasında ise birleşme özelliği önem kazanır. Birleşme’nin soldan sağa olduğu operatörlerde, derleyici işlem sırasını en soldaki operatörden başlatarak sağa doğru ilerletir. Diğer grupta ise, tam tersi sırada işlemler yerine getirilir. Örneğin, aynı öncelikli operatörler için aşağıdaki işlemler birleşme özelliği sonucu farklı sonuçlar üretecektir:

#import <Foundation/Foundation.h> 
int main(int argc, char* argv[]) 
{     
   NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];          
   int a,b,c,d;    
   a=5;     
   b=8;     
   c=3;     
   d=a * b / c % a ;     
   NSLog(@"\nd=a * b / c a=%i\n", d);     
   d=a / b * c % a ;    
   NSLog(@"\nd=a / b * c a =%d", d);     
   d=a=b=c ;     
   NSLog(@"\nd=a=b=c=%i\n\n",d);    
   [pool drain];     
   return 0; 
}

PROGRAMIN ÇIKTISI:

İlk iki ifadede * / % operatörlerinde birleşme soldan sağa doğru olduğu için, işlemler bu sırada ve tamsayı aritmetiği ile gerçekleştirilecektir. Sonuçlar 3 ve 0 olarak bulunur. Üçüncü ifadedeki = operatörlerinde birleşme sağdan sola doğru olduğu için, önce c’nin değeri b’ye atanır. b’nin değeri a’ya atanır. En son a’nın değeri d’ye atanarak sonuç 3 bulunur.

Parantezler kullanılarak öncelik sırası değiştirilebilir. Derleyici önce parantez içindeki işlemleri gerçekleştireceği için, kullanıcı istediği ifadeye göre uygun gruplamaları yapacak parantezler kullanabilir.

 

ÖRNEK:

15 – 24 / ((5 + 1) /( 4 – 1) + 3)

15 – 24 / (6 / ( 4 – 1) + 3)

15 – 24 / (6 / 3 + 3)

15 – 24 / (2 + 3)

15 – 24 / 5

15 – 4

Sonuç: 11