Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
   
Konu: C# - Operatör Önceliği {18}
Hera
*
avatar
Yüzbaşı
Durum: Çevrimdışı
Seviye Puanı: 10
Yaşam Puanı: 239 / 239
Deneyim: 58 / 100
Rep Sayısı: 44
Mesaj Sayısı: 133
Üyelik Tarihi: 13.04.2019
     
Yorum: #1
C# - Operatör Önceliği {18}
11.05.2019 17:29
İfadeler en az bir operatör içeren yapılardır. Bazı ifadelerde birden fazla operatör bulunabilir. Peki, birden fazla operatörün bulunduğu ifadelerde operatörlerin iş yapma sırası nasıl olacaktır bakalım. Örneğin aşağıdaki ifadeye bakalım;

c = 3 + 5 * 9;

Bu ifadede ki c değişkenine atanacak değer iki farklı şekilde olabilir. Birincisi "c = (3 + 5) * 0" = 72" ikincisi ise "c = 3 + (5 * 9) = 48". Bir İfadenin sadece bir değeri vardır. O halde bunların hangisi doğrudur? İşte tam bu noktada operatör önceliği kavramı önem kazanıyor. Diğer dillerde olduğu gibi C# dilinde de operatörlerin önceliği vardır. Daha önceden belirlenmiş bir takım mantıksal kurallar çerçevesinde operatörlere bir öncelik sırası verilmiştir. Hepimiz çok iyi biliyoruz ki çarpma operatörü her zaman toplama ve çıkarma operatöründen daha üstündür, yani önce çarpma işlemi yapılır. Bu yüzden örnekteki "3 + (5 * 9) = 48" değeri atanır.

Günümüz programlama dillerinde hemen hepsinde operatörlerin bir öncelik tablosu vardır. Böyle olmasaydı çok sayıda operatör içeren ifadelerin yorumlaması çok çok zor olurdu.

İfadelerin parantez içerisine alınmış bölümleri her zaman önce çalıştırılırlar. Örneğin;

c = (3 + 5 ) * 9;

Bu durumda ifade çalıştırıldığında c değişkenine 72 değeri atanacaktır.

İçiçe parantezlerin olduğu ifadelerde yine aynı şekilde içteki parantez ilk önce hsaplanır.
Örneğin;

c = (2 + ( 9 + 2)* 5) * 2;

İfadesindeki c değişkenine 114 değeri atanacaktır.

Bazı operatörlerin öncelik sırası aynı olabilir. Örneğin, çarpma ve bölme operatörleri aynı öncelik sırasındadırlar. Bu durumda iki ya da daha fazla operatörün olduğu ifadelerde sağdan sola ya da soldan sağa öncelik ilişkisi devreye girer. Atama operatörleri hariç bütün binary operatörleri soldan sağa önceliğine sahiptir. Yani işlemlerin yapılması sırası soldan sağadır. Bu durumda bir örnek verecek olursak;

a= 5 + 3 - 2;

İfadesinde ilk önce (5 + 3) daha sonra ise 8 - 2 işlemi gerçekleştirilir ve sonuç olarak a değişkenine 6 değeri atanır. Eğer öncelik sırası sağdan sola olsaydı bu ifade için a değişkenine atanacak değer değişmeyecekti; ama bazı durumlarda üretilen değer değişebilir. Örneğin, aşağıdaki programı derleyip çalıştırın ve sonucu inceleyin;
Kod:
using System;

namespace Cyberizm
{
    class Program
    {
        static void Main()
        {
            int i = 3 * 5 / 7;
            Console.WriteLine(i);
        }
    }
}

Bu programda ekrana 2 yazdığını göreceksiniz. Çünkü ilk önce 3 * 5 hesaplanıyor sonra da sonucun 7'ye bölümünden elde edilen tam sayı i değişkenine atanıyor. Eğer bu işlemler ters sırada yapılmış olsaydı yani 3 * (5 / 7) şeklinde olsaydı ekrana 0 yazacaktı. Çünkü 3 * 0 = 0.

Aynı satırdaki operatörler yanı öncelik saırsaına sahiptirler. Dolayısıyla aynı starıdaki operatörler (atama operatörleri hariç) soldan sağa öncelik ilişkisine sahiptir.

Şimdi operatörlerin öncelik sırası ile ilgili ilginç bir kaç örnek vereyim. Aşağıdaki programda iki sayının arasındaki '+-' ifadesi başta anlamlı gelmeyebilir. bakalım ne olacak;
Kod:
using System;

namespace Cyberizm
{
    class Program
    {
        static void Main()
        {
            int i = 3 +- 5;
            Console.WriteLine(i);
        }
    }
}

Bu programı derleyip çalıştırdığımızda ekrana -2 yazacaktır. Yani aslında burada yapılan işlem 3 + (-5)'tir.

İyi bir programcı hiç bir zaman kafa karıştıracak şekilde ifadeler yazmamalıdır. 3 +- 5 yerine 3 + (-5) yazmak programımızın okunabilirliğini arttırmaktadır.


İlerleyen konularımda popüler operatörleri detaylıca anlatacağım. Başta söylediğim gibi en detaylı şekilde C#'ı anlatmaya çalışıyorum Smile
(Bu konu en son: 11.05.2019 Tarihinde, Saat: 17:36 düzenlenmiştir. Düzenleyen: Hera.)
Alinti
DeathWing
*
avatar
Yüzbaşı
Durum: Çevrimdışı
Seviye Puanı: 8
Yaşam Puanı: 127 / 196
Deneyim: 84 / 100
Rep Sayısı: 25
Mesaj Sayısı: 97
Üyelik Tarihi: 26.03.2019
     
Yorum: #2
RE: C# - Operatör Önceliği {18}
11.05.2019 21:17
Teşekkürler, Emeğine Sağlık Smile
Alinti
Einstein
*
avatar
Yüzbaşı
Durum: Çevrimdışı
Seviye Puanı: 13
Yaşam Puanı: 84 / 302
Deneyim: 11 / 100
Rep Sayısı: 37
Mesaj Sayısı: 198
Üyelik Tarihi: 15.09.2017
     
Yorum: #3
RE: C# - Operatör Önceliği {18}
14.05.2019 16:00
Teşekkürler, Emeğine Sağlık Smile

Körler memleketinde görmek bir hastalık sayılır.
- Cenap Şahabettin
Alinti



1 Ziyaretçi