Blm 7 fadeler ve atamalar ISBN 0 321
Bölüm 7 İfadeler ve atamalar ISBN 0 -321 -49362 -1
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 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. . . • Boolean ifadeler – İşlenenler ve netice Boolean – Örnek operatörler FORTRAN 90 and or not C Ada && || ! and or 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 <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Ü
- Slides: 28