Merhaba ve hoş geldiniz. Şimdi tüm ana operatörlerden, temel olanlardan,
garip olanlardan bahsettiğimize göre, bu küçük operatör önceliği
kavramından bahsetmeliyiz.
Yani bu, temel olarak bu operatörlerin sırasını nasıl değerlendirdiğinizde devreye girer.
Dolayısıyla, işleç önceliği terimlerin ve ifadelerin gruplandırılmasını belirler ve bir
ifadenin nasıl değerlendirileceğine karar verir.
Birazdan değineceğimiz parantezleri kullanıyorsanız
bunların hiçbirini anlamanıza gerek yok, ancak bu kavramı anlamalısınız çünkü
bu dilin bir parçasıdır ve dili anlamanın bir parçasıdır.
Dolayısıyla, iki işleç bir işleneni paylaştığında değerlendirme
sırasını öncelik belirleyecektir.
Bu da bir örnekle açıklığa kavuşacaktır.
Örneğin, çarpma operatörünün ek operatöründen daha yüksek bir
önceliği vardır.
Bazı operatörler farklı değerlendirme sıralarına sahip olacaktır. Dolayısıyla, birçok farklı hesaplama
yaptığınız bir bileşik
ifade yaparsanız, örneğin 7 artı 3 çarpı 2.
Bunun birden fazla sonucu olabilir,
toplama ve çarpma yapıyorsunuz.
Önce toplama işlemini mi yoksa çarpma işlemini mi yapmam gerektiğini anlamanız gerekir çünkü önce
ne yaptığınıza bağlı olarak sonuç değişir.
Örneğin, bu x, 7 artı 3 çarpı 2'ye eşittir, sonuç her
bir işleneni değerlendirme sırasına bağlı
olarak 13 veya 20 olabilir.
Dolayısıyla, çeşitli işlemlerin yürütülme sırası büyük bir fark yaratabilir.
İşte bu yüzden önceliği anlamanız gerekir.
C, ilk olarak ne yapılacağını seçmek için belirli kurallar sağlar.
Bu durumda, artı ile çarpma işlemi mi yapmalıyım? C size ne olacağını söyleyecek.
İdeal olarak bunları parantez içine alırsanız, ona ne yapması gerektiğini söylemiş olursunuz,
bu kararı siz vermiş olursunuz. Ancak bunu parantez içine almazsanız, programlama
dili sizin yerinize karar verecektir.
Yani c'de, çarpma işlemi toplama işleminden daha yüksek bir
önceliğe sahip olacaktır. Yani sonuç 13 olacak.
Şimdi 7 artı 3 diyebilirsiniz, bu da 10 eder ve
sonra 2 ile çarparsınız, sonuç 20 olur.
Ya da 7 artı 3 çarpı 2 yapabilirsiniz, bu da 7 artı 6 eder ki bu da 13 eder.
İşte bu şekilde farklı değerlere sahip olabilirsiniz.
Bu belirsiz. Önce artıyı mı yaparsınız yoksa önce çarpmayı mı yaparsınız?
Neyse ki buna yine dil karar veriyor. Ancak iki farklı sonucun nasıl ortaya çıktığını görebilirsiniz.
7 artı 3 çarpı 2 veya
7 artı 3 çarpı 2. Şuradaki duraklamayı görüyorsunuz.
Şimdi C ikincisini yapacak. Önce çarpma işlemini yapacaktır çünkü bunun
daha yüksek önceliği vardır.
Yani 3 kere 2 yapacak, bu da 6 eder ve sonra 7 ile toplayacak.
Yani sonuç x 13 olacaktır çünkü yıldız işareti toplama
işleminden daha önceliklidir.
Ve böylece her bir operatör için hangi operatörün diğerine
göre önceliği olduğuna dair kurallar vardır.
Bir öncelik seviyesi var.
Çarpma ve bölme işlemlerinin toplama ve çıkarma işlemlerinden daha yüksek önceliği vardır.
Örneğin, ilk olarak bunlar gerçekleştirilir.
Parantez kullanırsanız, tüm bu önceliklerden ve dilin sizin yerinize
karar vermesinden kaçınabilirsiniz.
Parantezler her zaman en yüksek önceliğe sahip
ifadeleri gruplayacaktır. Yani 7 artı 3 dersem ve bunu parantez içine alırsam, her
zaman önce toplama işlemini yapacaktır.
Eğer 3 kere 2 dersem ve
bunu parantez içine alırsam, her zaman çarpma
işlemini yapacak ve sonra parantezin dışında ne varsa onu ekleyecektir.
Bu yüzden gerçekten sadece parantez kullanmalısınız. Her zaman parantez kullanın.
Aksi takdirde, dil sizin yerinize karar verecektir. Tüm öncelik seviyelerini ezberlemeniz
gerekir ki bir sonraki tabloda göstereceğim gibi bunu yapmak zordur.
Çok sayıda farklı operatör vardır ve tüm bu farklı operatörler
için önceliği bilmeniz gerekir.
Bu yüzden çok ama çok kafa karıştırıcı olabilir.
Bu, dilin sizin için örtük bir dönüştürme yapmasına izin vermenize ya da bunu bir döküm
operatörü ile açık bir dönüştürme ile yapmanıza benzer, burada da aynı
fikir, sadece parantez kullanın.
Bu tabloya bakacak olursak, ki sanırım birazdan bakacağız çünkü ilk olarak ilişkisellik
hakkında konuşmak istiyorum.
İlişkisellik öncelik ile ilgilidir çünkü iki operatör
aynı önceliğe sahipse ne olur? O zaman sırayı nasıl bulacaksın.
O zaman ilişkiselliği uygularsınız. Dolayısıyla, operatörler aynı
öncelik seviyesine sahip olduğunda, ek kurallar uygularsınız.
Yani ilişkisellik temel olarak sol taraftan
başlayıp sağa mı yoksa sağdan sola mı gittiğinizdir.
Dolayısıyla, bir işleneni paylaşıyorsanız ve her ikisi de aynı sırada yürütülüyorsa,
bunları ilişkilendirme kuralına dayalı olarak deyim sırasına göre
yürütürsünüz. Yani çoğu operatör için sıra
soldan sağa doğrudur. Size bir örnek göstereyim.
Eğer 1 eşittir eşittir 2, 3'e eşit değildir derseniz, eşittir
eşittir ve eşit değildir operatörleri ünlem işareti eşittir
aynı önceliğe sahiptir.
Yani bu durumda bir belirsizlik söz konusudur. Bir sorunumuz var.
Önce neyi değerlendireceğimizi bilmiyoruz. 1 eşittir eşittir 2 mi yoksa 2 eşit değildir
3 mü yapmamız gerektiğini bilmiyoruz
ve bu önemli çünkü bir Boolean ifadesi yapıyorsunuz.
Bu bir boolean ifadesidir, bu nedenle true veya false değerine geri döner.
Yani burada yapacağınız şey ilişkiselliği uygulamaktır.
Hem eşittir eşittir hem de eşit değildirin birlikteliği soldan sağa doğrudur.
Önce 1 eşittir eşittir 2 yapacaksınız, bu yanlış olacaktır.
Ve sonra yanlış diyeceksiniz,
ki bu 3'e eşit değildir,
ki değildir. Yani 1 eşittir 2'ye eşittir
ve bu da 3'e eşit değildir.
Yani sonuç yanlış olacaktır. Böylece soldaki ifade önce yürütülür
ve sağa doğru hareket eder.
Bunu nasıl düşünmek isterseniz, temelde bu parantezlere eşittir.
İlk olarak, 1'in 2'ye eşit olduğunu değerlendireceksiniz.
Ve sonra bu doğru veya yanlış olarak değerlendirilirse, bu 3'e eşit mi diyeceksiniz.
Ve bu kafa karıştırıcıdır çünkü doğru
veya yanlış değerleri yoktur.
Ancak 1 eşittir eşittir, bunun karşılaştırma operatörü olduğunu unutmayın, atama operatörü değil.
Ve burada değişken kullanmıyoruz, bu yüzden daha da kafa karıştırıcı.
Ancak bu sayıları değişkenlere koysaydınız,
x eşittir y eşittir gibi bir şey söylemiş olurdunuz, yani x 1 ve y 2 olsaydı,
bu 2 yanlış olarak değerlendirilirdi.
Çünkü ikisi de eşit değil. Ve sonra 3, 3'e eşit olan başka
bir z değişkeni olsaydı, x eşittir
y yanlıştır, z 3'e eşittir mi diyecektiniz.
Yani
yanlış 3'e eşit değildir. Bu yüzden yanlış olur.
Yani 1 eşittir eşittir 2 ilk olarak yürütülür, sonuç yine 0 yanlış olur.
O zaman 0, 3'e eşit değildir, yürütülür ve 1 doğru ile sonuçlanır.
Bu yüzden başlangıçta yanlış dedim, ancak açıkçası 0 3'e eşit değildir, bu da tüm şeyin yanlış
olarak değerlendirilmesine neden olur.
Her şey doğru olarak değerlendirilecektir, üzgünüm çünkü 0, 3'e eşit değildir.
Yani 0, 3'e eşit değil. Eşit olmadıkları için yanlış olduğunu söylüyordum, ancak bu aslında
doğru olarak değerlendirildiği anlamına geliyor.
Çok güzel. Şimdi burada tüm öncelik ve birliktelik
kurallarını gösteren tablomuz var ve bunu ezberlemek çok zor.
Peki yine ne yaparsınız, parantez kullanırsınız.
Ama işte tablo. En yüksek öncelik seviyesi en üsttedir, bu nedenle
postfix operatörleri en yüksek tercih seviyesine sahiptir.
Ve bunlardan herhangi birini aynı ifade içinde kullanıyorsanız, soldan
sağa doğru okursunuz.
Yani postfix operatörleri, parantezler gibi
şeyler en yüksek önceliğe sahiptir.
Dolayısıyla, parantez içine her bir şey eklediğinizde bu etkili olacaktır.
Ancak parantezleriniz ve ardından postfix operatörleriniz
vardır. Bu tire büyüktür gibi birkaç
işaretçiden bahsetmedik, ancak artık en yüksek önceliğe
sahip olan postfix olan artı artı
ve eksi eksi hakkında bilgimiz
var. Artı eksi, değil için ünlem işareti, bitsel için
tilde, artı artı eksi eksi ve ardından döküm operatörü gibi tekli operatörler,
yalnızca bir işlenene sahip olduğu için tekli operatör olarak adlandırılır.
Ve sonra yıldız operatörü işaretçi operatörüdür. ampersand bitwise ve sizeof'dur.
Bunlar bir sonraki en yüksek önceliğe sahiptir.
Ancak burada, aynı satırda iki durum ifadesi varsa,
değerlendirmek için aslında sağdan sola okuyorsunuz.
Ve sonra yine sırayla gidiyoruz. Bu sırayı bilmek ve ezberlemek zorundasınız. Bunu yapmak oldukça zor, ancak size göstermek
istedim, sadece bazı tabloları göstermek için küçük
bir illüstrasyon yapmak istedim. Bir sürü operatör var.
Bu nedenle çok sayıda varlık seviyesi vardır ve daha önce de söylediğimiz gibi çoğunlukla soldan
sağa doğru ilişkilendirme vardır.
Tekli operatörler için yalnızca sağ sol ilişkiselliğine sahipsiniz.
Böylece bitsel operatörler soldan sağa doğru
aşağıya doğru ilerler. Koşullu üçlü operatörler sağdan sola.
Atama operatörleri her zaman en altta yer alır. Bu her zaman en son değerlendirilir.
Ve sonra eşitlerse, oradaki diğerlerini sağdan sola doğru değerlendirirsiniz.
Virgül de bir operatör olarak adlandırılır. Soldan sağa.
Bir başka kavram da öncelik ve ilişkilendirme
olsa da, bu diğer örneklerle gerçekten
ele almayacağız. Sonunda parantezleri her zaman kullanacağız
ve yapmak istediğiniz de bu.
Ama yine de, eğer dili tam olarak anlamak istiyorsanız, bu kavramları anlamak istersiniz, bu yüzden size anlatıyorum.
Bunun gibi bazı detayları bilmeyen hiç kimse dil bildiğini iddia edemez.
Ancak parantezleri olabildiğince çok kullanın. Teşekkür ederim.