Bölüm 7 İfadeler ve atamalar
7. Bölüm konuları Giriş Aritmetik ifadeler Çok anlamlı (overloaded) operatörler Tip dönüşümleri (conversions) İlişkisel ve Boolean İfadeler Kısa-devre hesaplama Atama komutları Karışık-mod atamalar Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Giriş İfadeler programlama dillerinde temel hesap gösterim yolu İfadeleri doğru anlamak için operatör önceliğini ve işlenenlerin (operand) hangi sırada işlendiğini bilmek lazım Komutlu dillerde atamanın rolü büyüktür Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Aritmetik ifadeler Aritmetik hesap yapma ilk programlama dillerindeki motivasyonlardan biri Arithmetic ifadeler operatörlerden, işlenenlerden (operands) (operatörlerin parametrelerinden), parantezlerden ve fonksiyon çağırmalarından oluşur. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Aritmetik ifadelerin tasarım problemleri Operatör öncelik kuralları Operatör birleşebilirlik (associativity) kuralları İşlenen hesaplanma sırası kuralları (order of operand evaluation) İşlenen hesaplamasının yan etkileri Çok anlamlı operatörler (Operator overloading) İfadelerde değişik tiplerin olması Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Aritmetik ifadeler: operatörler Tekli (unary) İkili (binary) Üçlü (ternary) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Aritmetik ifadeler: Operatör önceliği kuralları Ayni ifade içinde farklı operatörlerden hangisin daha önce işleme konulacağını belirtir Tipik öncelik seviyeleri parantezler tekli operatörler ** (üs operatörü) *, / +, - Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Aritmetik ifadeler: Operatör birleşebilirlik kuralları İki tane ayni operatörün yanyana kullanıldığı durumlarda hangisinin önce işleme gireceğini belirleyen kurallar. Tipik birleşebilirlik kuralları Soldan sağa, ** hariç (sağdan sola) Tekli operatörler bazen sağdan sola APL farklı; tüm operatörler eşit öncelikte ve sağdan sola birleşirler Parantez kullanarak öncelik ve birleşebilirlik kurallarını geçersiz kılabiliriz Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Aritmetik ifadeler: Şartlı ifadeler C-tabanlı diller (ör: C, C++) Örnek average = (count == 0)? 0 : sum / count Aşağıdaki ile ayni if (count == 0) average = 0 else average = sum /count Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Aritmetik ifadeler: Yan etkiler Fonksiyonel yan etkiler: fonksiyon giriş-çıkış parametresini veya lokal olmayan değişkeni değiştirdiğinde meydana gelir Yan etkilerin olumsuz neticeleri: Bir fonksiyon içinde bulunduğu ifadenin değişkenini değiştirise işlenenlerin (operand) işlenme sırası önem kazanır a = 10; /* fun’ın parametresini değiştirdiğini farzedelim */ b = a + fun(a); Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Çok amaçlı (overloaded) operatörler Birden çek amaç için kullanılan operatörler Yaygın olarak kullanılan lara örnek: tamsayı ve kayan nokta için + C++, Ada, Fortran 95, ve C# kullanıcı- tanımlı çok amaçlı operatör tanımlanmasına olanak sağlarlar Olası problem: Okunabilirlik zaafiyete uğrayabilir. Ayni görünen operatörler farklı işler yapıyor. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Tip dönüşümleri Daraltan dönüşüm: yeni tipin değerleri eski tipin altkümesi. ör: float’ dan int’e Genişleten dönüşüm: : eski tipin değerleri yeni tipin altkümesi. ör: int’ den float’a Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Tip dönüşümleri: Karışık mod Karışık mod ifade: içinde değişik türden işlenen var Zorlama: derleyicinin otomatik olarak yaptığı tip dönüşümü Zorlamaların dezavantajı: Derleyicinin tip hatalarını bulma yeteneğini azaltır Birçok dilde sayısal tipler zorlama yolu ile daha geniş tiplere dönüştürülürler Ada dilinde hemen hemen hiç zorlama yoktur. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Açık tip dönüşümleri Kullanıcı tarafından yapılır Kalıplama (casting) diye adlandırılır Örnekler C: (int)angle Ada: Float (Sum) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Tip dönüşümleri: ifadelerde hatalar Sebepler Aritmetiğin kendi sınırları (sıfırla bölme vs.) Bilgisayar aritmetiğinin sınırları (taşma vs.) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
İlişkisel ve Boolean ifadeler <, >, >=, <=, !=, ==, .NE., <> Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
İlişkisel ve Boolean ifadeler... İşlenenler ve netice Boolean Örnek operatörler FORTRAN 90 C Ada and && and or || or not ! not xor Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
İlişkisel ve Boolean ifadeler: C dilinde Boolean yok C dilinde 0=yanlış, 0 dışında bir değer: doğru a < b < c ifadesinin anlamı ne? Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Kısa devre hesaplama Tüm operatörleri ve işlenenleri kullanmadan neticeyi bulma Örnek: (13*a) * (b/13–1) a sıfır ise (b/13-1) değerini hesplamaya gerek yok Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Kısa devre hesaplama ... C, C++, ve Java dillerinde: && ve || kısa devre olarak hesaplanır, bit operatörleri & ve | ise tam olarak hesaplanır Kısa devre hesaplamanın yanetkiler ile etkileşimini iyi düşünmek gerekir ör: (a > b) || (b++ / 3) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Atama ifadeleri Genel sentaks Atama operatörü <hedef_değişken> <atama_operatörü> <ifade> <expression> Atama operatörü = FORTRAN, BASIC, ve C-tabanlı diller := ALGOL, Pascal, Ada Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Atama ifadeleri: şartlı hedefler Perl dilinde ($flag ? $total : $subtotal) = 0 Eşdeğeri if ($flag){ $total = 0 } else { $subtotal = 0 } Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Atama ifadeleri: Bileşik operatörler a = a + b yerine a += b Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Atama ifadeleri: Tekli atama operatörleri Artırma ve atama işlemlerini birleştirir Örnekler sum = ++count (önce-artırma) sum = count++ (sonra-artırma) count++ -count++ (count önce artırma, sonra eksi) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
İfade olarak atama komutu C, C++, ve Java dillerinde atama işlemi netice verebilir ve bu netice işlenen olarak kullanılabilir Örnek: while ((ch = getchar())!= EOF){…} Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Liste atamaları Perl ve Ruby dillerinde: ($first, $second, $third) = (20, 30, 40); Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Karışık mod atama Örnek int a, b; float c; c = a / b; Fortran, C, ve C++ dillerinde herhagi nümerik değer herhangi nümerik tipteki değişkene atanabilir Java dilinde sadece genişleten atama zorlamaları var Ada dilinde atama zorlaması yok Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ
Özet İfadeler Operatör önceliği ve birleşebilirliği Çok amaçlı operatörler Karışık-tip ifadeler Değişik atama türleri Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ