Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

İşlem önceliği

Konu, 'PHP' kısmında karflake tarafından paylaşıldı.

  1. karflake

    karflake Daimi Üye

    Kayıt:
    11 Şubat 2003
    Mesajlar:
    805
    Beğenilen Mesajlar:
    0
    Hazır bayram tatiliyken Hakkı Öcal'ın php kitapçığını inceliyordum, aşağıdaki örnekle karşılaştım.

    Örnekte de görüldüğü üzere ve işlemini yapabilmek için && ve and operatörleri kullanılıyormuş. &&'ın and'e göre işlem önceliği varmış.

    Burada kafama takılan bir nokta var. Php'de parantezler işlem önceliğini değiştirmiyor mu? Yani aşağıdaki renkli parantezlerden dolayı işlem önceliği değişmiyor mu?
    Kod:
    <?php
        $vize = 45;
        $final = 65;
        $ilk_sem = 45; 
        $ortalama = ($vize + $final) / 2;
        if[COLOR=Black](($vize >= 45 && $final >= 45) and ($ilk_sem >= 65 || $ortalama >= 65)[COLOR=Black]) {
        print ("Öğrenci geçti!");
        }
        else {
        print ("Öğrenci kaldı!");
        }
    ?>
     
  2. acemi

    acemi Misafir

    Önce parantez içleri, operatörlerin işlem önceliğine göre işlenir. Sonra parantezler kaldirilir; kalan ifade, operatörlerin işlem önceliğine göre işlenir.

    Yani kafan karismasin, parantez içleri önce işleniyor.
     
  3. Zangetsu

    Zangetsu Daimi Üye

    Kayıt:
    3 Nisan 2006
    Mesajlar:
    722
    Beğenilen Mesajlar:
    0
    Meslek:
    Bilgisayar Programcısı
    Şehir:
    Antalya
    Burada bahsettiğin tamamen mantıksal kontroller için geçerli yani matematiksel işlemde ilk parantez içleri sonrasında çarpma - bölme - toplama - çıkarma diyen gider... mantıksal da ise örnek verim

    (a==b && c!=s) && (v==d || g==d)

    ise ginem parantez içceri ilk kontrol edilir. Birde or = || , and = && .
     
  4. Meteryus

    Meteryus Daimi Üye

    Kayıt:
    30 Mart 2004
    Mesajlar:
    1,529
    Beğenilen Mesajlar:
    0
    PHP:
    <?
    $a=1$b=1
    if(
    $a=&& $a==$b // Eşit
    ?><?
    $a=1; $b=1; 
    if($a=2 and $a==$b ) //Eşit değil !
    ?>
    Şu örnek işlem && ve and arasındaki işlem önceliği farkını kısaca açıklar sanırım.
     
  5. karflake

    karflake Daimi Üye

    Kayıt:
    11 Şubat 2003
    Mesajlar:
    805
    Beğenilen Mesajlar:
    0
    PHP:
    $a=1$b=1;  
    if(
    $a=&& $a==$b // Eşit
    Anladığım kadarıyla && yüksek öncelikli olduğundan atama yapılmadan önce karşılaştırma yapılıyor ve eşit sonucu bulunuyor.

    PHP:
    $a=1$b=1;  
    if(
    $a=and $a==$b //Eşit değil ! 
    Burada ise and düşük öncelikli olduğu için evvela atama yapılıyor ve sonuç eşit değil çıkıyor.

    Doğru anlamış mıyım?

    If bloğunda atama yapmanın ne gibi bir avantajı olduğu da merak ettiklerim arasında aslında.
     
  6. perlci

    perlci Daimi Üye

    Kayıt:
    12 Eylül 2004
    Mesajlar:
    2,298
    Beğenilen Mesajlar:
    0
    Hatalı yazmışsın: if($a=2 && $a==$b ) hatalı . Bu şöyle olacak if($a==2 && $a==$b )

    PHP:
    <?php

    $a
    =1$b=1;
    if(
    $a==&& $a==$b )
    {
    echo 
    'Koşul var';
    }else{
    echo 
    'Koşul yok';
    }

    ?>



    <?php

    $a
    =1$b=1;
    if(
    $a==and $a==$b )
    {
    echo 
    'Koşul var';
    }else{
    echo 
    'Koşul yok';
    }

    ?>

    Her ikiside 'Koşul yok' yazar.
     
  7. Meteryus

    Meteryus Daimi Üye

    Kayıt:
    30 Mart 2004
    Mesajlar:
    1,529
    Beğenilen Mesajlar:
    0
    Doğru anlamışsın, if bloğrunda atama yapmanın sıklıkla pek bir anlamı olmaz, çok spesifik durumlarda belki lazım olabilir, ben o kodu sadece işlevi göstermek için yazmıştım :)

    perlci, kod hatalı değil, örnek olsun diye öyle :)
     
  8. karflake

    karflake Daimi Üye

    Kayıt:
    11 Şubat 2003
    Mesajlar:
    805
    Beğenilen Mesajlar:
    0
    Teşekkürler arkadaşlar, anladım.
     
  9. Zangetsu

    Zangetsu Daimi Üye

    Kayıt:
    3 Nisan 2006
    Mesajlar:
    722
    Beğenilen Mesajlar:
    0
    Meslek:
    Bilgisayar Programcısı
    Şehir:
    Antalya
    :) hatalı $a=2 olmaz ki şartta...
     
  10. perlci

    perlci Daimi Üye

    Kayıt:
    12 Eylül 2004
    Mesajlar:
    2,298
    Beğenilen Mesajlar:
    0
    Okurken nasıl okuyorsam,yanlış anladım :D
     
  11. Zangetsu

    Zangetsu Daimi Üye

    Kayıt:
    3 Nisan 2006
    Mesajlar:
    722
    Beğenilen Mesajlar:
    0
    Meslek:
    Bilgisayar Programcısı
    Şehir:
    Antalya
    Merteryus if($a=2 && $a==$b ) Kafamı karıştırdı. $a=2 derken napmak istiyorsunuz ?

    Denedim. $a 'ya 2 mi atıyor diye hayır..
     
  12. Meteryus

    Meteryus Daimi Üye

    Kayıt:
    30 Mart 2004
    Mesajlar:
    1,529
    Beğenilen Mesajlar:
    0
    $a=2 şart değil atama, yani "a 2'ye eşitlenebiliyyorsa demek, normalde define ile tanımlamadığınız tüm değişkenler için if($a="herhangi birşey") koşulu true döndürür, ve değişken karşısındaki değeri alır.

    Yani burada : if($a=2 && $a==$b ) , öncelikle ( a == b ) durumu sogulanıyor , doğru dönüyor, dahasonra ( a=2 ) ile a nın ikiye eşitlenip eşitlenemeyeceği sorgulanıyor , bu da doğru dönüyor ve a , 2' ye eşitleniyor. İf in içine doğru olarak giriyor.

    ikinci örnekte if($a=2 and $a==$b ) : öncelikle ( a=2 ) ile a nın ikiye eşitlenip eşitlenemeyeceğine bakılıyor, eşitleniyor a ,2 oluyor ve doğru dönüyor, sonraki ( a == b ) koşulu a artık ikiye eşit olduğu için yanlış dönüyor.
     
  13. omerdurmus

    omerdurmus Üye

    Kayıt:
    16 Mart 2006
    Mesajlar:
    60
    Beğenilen Mesajlar:
    0
    Meslek:
    Öğretmen
    Şehir:
    ÇAnakkale
    aslında c/c++ programlarında atama işlemleri sonucu dondurur diye ogrettiler bize. yani eğer benzeri php içinde var ise (kntrl etmek lazım tabe) ($a = 2) işlemi geriye 2 sayısını dondurur. c/c++ için 0 false 0 olmayan her şeyde true olduğundan $a=2 ataması true sonuç üretir. ama genel sonucu && veya and işlemlerinin belirlemesi soz konusu burada. meteryus buna dikkat çekmeye çalışmış. php içinde and olduğunu bile bilmiodum ben. :) şimdi hem and olduğunu hem de && ile öncelik farkı olduğunu öğrendim. Tüm arkadaşlara teşekkür etmek istiyorum.

    bu arada and var ise or da var mı ? veya ||ile or arasında öncelik durumu and için olan gibi mi ?
     
  14. karflake

    karflake Daimi Üye

    Kayıt:
    11 Şubat 2003
    Mesajlar:
    805
    Beğenilen Mesajlar:
    0
    Or da var. || ile öncelik durumu da && ile and arasında olduğu gibi.