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 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Ü
Download

İfadeler