Mantıksal İşlemler. 7.1 true, false, nil

Benzer belgeler
(Sözlük, dictionary, birleşik array, map)

Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

Ruby. Prof.Dr.Timur Karaçay Başkent Üniversitesi

Döngüler. Tablo 15.1: Ruby de Başlıca Döngü Yapıları

Operatörler. 6.1 Operatör Nedir?

Integer Sınıfı. 9.1 Integer Sınıfına Uygulanan Başlıca Metotlar. Ruby de tamsayılar için kullanılan Fixnum ve Bignum sınıflarını üreten sınıftır.

String String İşlemleri

Ruby Sınıfları. 3.1 Ruby Yorumlayıcı Bir Dildir

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

OPERATÖRLER Alıştırmalar

Karşılaştırma İşlemleri ve Koşullu İfadeler

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

HSancak Nesne Tabanlı Programlama I Ders Notları

Aritmetik Operatörleri Hemen her programlama dilinde olduğu gibi java dilinde de aritmetik işlemler yaparken aşağıdaki operatörleri kullanırız:

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

Nesne Yönelimli Programlama

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Module ve Mixin Module nedir? 17.2 Neden Module?

Veri Tabanı Yönetim Sistemleri Bölüm - 5

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

Nesne Tabanlı Programlama

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-2 Değişken Kavramı ve Temel Operatörler

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

ArrayList Uygulamaları

HSancak Nesne Tabanlı Programlama I Ders Notları

Programlama Dilleri 3

String. 1.1 Python da String

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

232 DIZIN. attr, 65 attributes, 65

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

BÖLÜM 3 OPERAT A ÖRLER

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

Denetim Yapıları Program Akışının Yönlendirilmesi. Şekil 11.1: Akışı Koşullu Yönlendirme

Önermeler mantığındaki biçimsel kanıtlar

BMT 101 Algoritma ve Programlama I 6. Hafta. Yük. Müh. Köksal Gündoğdu 1

2.3- OPERATÖRLER ÇALIŞMA YAPRAĞI

Koşullu Önermeler (if else)

C#(Sharp) Programlama Dili

Karmaşık Sayılar Karmaşık Sayı Yaratma

1 JAVASCRIPT NEDİR? 1

Bir c sınıfının doğal sıralaması ile tutarlı olması (be consistent with equals) demek, c sınıfı içindeki her e1 ve e2 nesnesi için

Mantıksal (Logic) Operatörler

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

PASCAL PROGRAMLAMA DİLİ YAPISI

Java: printf() Metodu İle Çıktıyı Biçemleme

BİLGİSAYAR PROGRAMLAMA DERSİ

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

Veritabanı Tasarımı. Alt Sorgu Temelleri

T I M U R K A R A Ç AY - H AY D A R E Ş C A L C U L U S S E Ç K I N YAY I N C I L I K A N K A R A

çindekiler 3 Python Programlarn Yürütme Kaynak Program... 24

BBS515 Nesneye Yönelik Programlama. Ders 3 Zümra Kavafoğlu

Ruby Nedir? 1.1 Amaçlar. 1.2 Ruby nin Yapısal Sıradüzeni

Python Programlama Dili

BMT 206 Ayrık Matematik. Yük. Müh. Köksal GÜNDOĞDU 1

Sunum İçeriği. Programlamaya Giriş

HSancak Nesne Tabanlı Programlama I Ders Notları

YZM 2105 Nesneye Yönelik Programlama

2 PYTHON A GIRIŞ 13 PyCharm İle Python Projesi Oluşturma 15 Projenin Çalıştırılması 18 İlk Python Programımız 19 Açıklama Satırları 21

String ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

JAVA DÖNGÜ DEYİMLERİ. For Döngüsü

BİL132 Bilgisayar Programlama II

Her veri tipine yetecek ve ancak o kadar anabellek alanı ayrılır. Programcı, ana bellekte ayrılacak adresin büyüklüğünü bilerek değişkenlerini

Veritabanı. SQL (Structured Query Language)

Mantıksal Operatörlerin Semantiği (Anlambilimi)

Aritmetik Operatörleri

EGE ÜNİVERSİTESİ EGE MYO MEKATRONİK PROGRAMI

Program Çözümleme. Aşağıdaki örneklerde printf() ve scanf() fonksiyonlarının işlevleri gösterilmektedir. Liste 1.1. Çözümleme:

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu

Java da Program Denetimi ve Operatörler

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

BİLGİSAYAR PROGRAMLAMA DERSİ

Program Akış Kontrol Yapıları

Döngüler. 1.1 while döngüsü

IF / ELSE IF / ELSE. Bu deyimler, koşullu işlem yapan deyimlerdir ve daima if deyimi ile başlar, else if veya else ile devam eder.

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Algoritma ve Programlamaya Giriş

J A V A D A P R O G R A M D E N E T İ M İ V E O P E R A T Ö R L E R

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

// hataları işaret eden referans

İlişkisel Veri Tabanları I

Programlama Dilleri III 1

EMT2226 Nesne Yönelimli Programlamaya Giriş

Bölüm 7. İfadeler ve atamalar ISBN

Bir C programı C fonksiyonlarından oluşur. Bunlar arasında main() adı verilen ana fonksiyon daima olmalıdır. C fonksiyonları programı oluşturan

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

Degişken Tanımlama Ve Operatörler

Java da İşleçler, Ders #3 (4 Kasım 2009)

Algoritma ve Akış Diyagramları

ALGORİTMA VE PROGRAMLAMA I

T I M U R K A R A Ç AY - H AY D A R E Ş C A L C U L U S S E Ç K I N YAY I N C I L I K A N K A R A

Bölüm 10 Statik ve Anlık Öğeler

Transkript:

7 Mantıksal İşlemler 7.1 true, false, nil Doğru ya da Yanlış değer alan önermelere (ifadelere) mantıksal (logic) deyimler ya da boolean deyimler denilir ([5]). Bir çok dilde mantıksal işlemler true ve false değerlerinden oluşan bir sınıfa ait metotlarla yapılır. Bunlara mantıksal ya da boolean değerler denilir. Bu değerleri içeren sınıfa, çoğu dilde Bool sınıfı adı verilir. and, or, not temel mantıksal bağlaçlardır. Ruby deki durum oldukça farklıdır. Ruby de Bool ya da Boolean adında bir veri tipi (sınıf) yoktur. true ve false nesnelerine ek olarak nil nesnesi de mantıksal değer olarak kullanılır. Daha doğrusu mantıksal deyimin değeri yok anlamına gelir. Ruby nin true, false, nil anahtar sözcükleri bir tek sınıftan üretilmez. Her birisinin kendi sınıfı vardır. Her birisi kendi sınıfının biricik (singleton) nesnesidir. Onların hangi sınıftan türetildiğini görmek için class metodunu kullanabiliriz. Liste 7.1. t r u e. c l a s s f a l s e. c l a s s n i l c l a s s # => TrueClass # => FalseClass # => N i l C l a s s false ve nil olmayan mantıksal ifadeler true (doğru) sayılır. nil terimi boş, yani değer yok anlamındadır. Bazı dillerdeki null teriminin oynadığı rolü oynar; atanmış bir değer olmadığı anlamına gelir.

88 BÖLÜM 7. MANTIKSAL İŞLEMLER Gerçekte, Ruby nin true, false, nil anahtar sözcükleri birer nesneyi işaret eden pointerlerdir. Birer sayı işaret etmezler. Başka bir deyişle, bazı dillerde olduğu gibi, yanlış anlamına gelen false ve nil nesneleri 0 değildir, doğru anlamına gelen true 1 değildir. Ruby de her şey nesne olduğuna göre, mantıksal ifadeler de birer nesnedir. Bir obj nesnesinin nil olup olmadığını anlamak için obj == n i l 2 obj. n i l l? deyimleri kullanılabilir. Örneğin, 3 == nil ya da 3.nil? deyimleri aynı işlevi görür; her ikisinin karşılığı false olur. Liste 7.2. 0. c l a s s # => Fixnum 1. c l a s s # => Fixnum 3 0 == f a l s e 0. n i l? 0 == n i l n i l == f a l s e 1 == t r u e #=> simgesinin sağındaki çıktı ifadesi false ise, solundaki mantıksal ifadenin yanlış olduğu anlamı çıkar. 6.satırdan görüldüğü gibi, mantıksal işlemlerde yanlış rolünü oynayan nil nesnesi false nesnesinden farklıdır. Ruby nin true, false, nil anahtar sözcüklerinin işaret ettikleri nesneler biriciktirler (singleton). Bu demektir ki, true, false ve nil birer tanedir. Birer taneden çok true, false ve nil değerleri olamaz. Her ad bir nesneyi işaret bir pointerdir. Ancak, sözel ifadeyi kısaltmak için pointer ile işaret ettiği nesneyi çoğunlukla aynı sayacak ve "x pointerinin işaret ettiği nesne" demek yerine, kısaca "x nesnesi" diyeceğiz. Ruby de bir değeri olmayan her nesne nil dir. Örneğin çok kullandığımız puts, print, inspect gibi metotlar nil dir. String nesneleri nil dir, sayılar nil dir. Bunu görmek için puts put # => n i l puts p r i n t # => n i l 3 puts i n s p e c t # => n i l puts 12 # => 12 => n i l puts " abc " # => abc => n i l olduğunu görmek yetecektir. 4.satırda puts metodu 12 sayısını yazıyor, sonra onun nil olduğunu belirtiyor. 5.satırda puts metodu "abc" stringini yazıyor, sonra o stringin nil olduğunu belirtiyor. Ruby de nil olmayan nesneler de vardır. Sınıflar ve modüller nil değildir. Örneğin,

7.1. TRUE, FALSE, NIL 89 Liste 7.3. S t r i n g. n i l? S t r i n g == n i l Numeric. n i l? Numeric == n i l 5 Float. n i l? Float == n i l TrueClass. n i l? TrueClass == n i l N i l C l a s s. n i l? 10 n i l. n i l? # => true Buradan anlaşıldığı üzere, ilk 9 satırdaki sınıflar nil değildir, ama nil in kendisi de nil dir. Örnekler: nil? metodu, öntakısının nil olup olmadığını soruyor. Örneğin, x nesnesi için, x.nil? true ise x nesnesi nil dir. puts ( " Merhaba Ruby" ). n i l? # true 42. n i l? # f a l s e 0. n i l? # f a l s e " ". n i l? # f a l s e 5 n i l. n i l? # true Liste 7.4. BasicOject. n i l? BasicObject == n i l Object. n i l? Object == n i l 5 Module. n i l? Module == n i l Math. n i l? Math == n i l IO. n i l? 10 IO == n i l? Ruby de true, false ve nil nesnelerinin sayı olmadıklarını anlamak için onlarla aritmetik işlemler yapmayı deneyebiliriz: Liste 7.5. t r u e + 1 f a l s e + 0 n i l + 1 # => undefined method # => undefined method # => undefined method Benzer eylemi String için de yapabiliriz. Liste 7.6 nil in String nesnesi olmadığını gösterir. Liste 7.6.

90 BÖLÜM 7. MANTIKSAL İŞLEMLER " abc " + n i l 2 # => TypeError : no i m p l i c i t conversion of n i l i n t o S t r i n g n i l + " abc " # => NoMethodError : undefined method + f o r n i l : N i l C l a s s Liste 7.7. Ruby de mantıksal bir ifade içindeki nil değeri false gibi davranır. 1 t r u e & n i l t r u e n i l f a l s e & n i l f a l s e n i l 6 t r u e and n i l t r u e or n i l f a l s e and n i l f a l s e or n i l 7.1.1 Mantıksal İşlemler (boolean operations) VEYA (OR) İşlemi p ile q iki mantıksal deyim ise p VEYA q (p q) işlemi iki mantıksal deyimi birleştirir, birleşik bir deyim yapar. true yerine T, false yerine F koyarsak p ile q nun değerlerine göre (p q) birleşik deyiminin doğruluk değerlerini bir tablo biçiminde daha kolay görebiliriz (bkz. Tablo 7.1). Buna kısa devre V EY A denilir. Gerçekten, p p q p q T T T T F T F T T F F F Tablo 7.1: [ işlemi] doğru ise q yu denetlemeye gerek kalmaz. VE (AND) İşlemi p ile q iki mantıksal deyim ise p ve q (p&q) işlemi iki mantıksal deyimi birleştirir, birleşik bir deyim yapar.

7.1. TRUE, FALSE, NIL 91 p q p & q T T T T F F F T F F F F Tablo 7.2: [& işlemi] p ile q nun değerlerini bir tablo biçiminde yazarsak, (p&q) birleşik deyiminin doğruluk değerlerini daha kolay görebiliriz (bkz. Tablo 7.2). Buna kısa devre V E denilir. Gerçekten, p yanlış ise q yu denetlemeye gerek kalmaz. değil (not) İşlemi p bir mantıksal deyim ise (!p) işlemi p nin değerini true ise false, false ise true yapar. (!) operatörünün öncelik sırası, boolean olmayan operatörlerden sonradır. p nin değerlerini bir tablo biçiminde yazarsak, (!p) deyiminin doğruluk değerlerini daha kolay görebiliriz (bkz. Tablo 7.3). p!p T F F T Tablo 7.3: değil işlemi true değerini T, false değerini F ve nil değerini N ile gösterirsek p, q ve r = p & q ve r = p q mantıksal ifadelerinin alacağı değerler aşağıdaki tablolarda gösterilmiştir. p q p & q N N N N F N F N F Tablo 7.4: [nil ile AND işlemleri]

92 BÖLÜM 7. MANTIKSAL İŞLEMLER p q p q N N N N F F F N N Tablo 7.5: [nil ile OR işlemleri] 7.2 Karşılaştırma Operatörleri Karşılaştırma (mukayese) Operatörleri, hemen her programlama dilinde olan ve Liste 7.8 de görülen operatörlerdir. Bazı kaynaklarda bunlara ilişkisel (relational) operatörler denilir. Karşılaştırma operatörlerini mantıksal deyimler oluştururken kullanırız. Ruby de bütün nesnelere mukayese operatörleri uygulanabilir. Hepsi için öncelik sırası aynıdır ve boolean operatörlerinden öncedirler ([1]). Liste 7.8. <, <=, >, >=, ==,!=, is, is not Bu operatörler, soldaki nesneyi sağdaki ile karşılaştırır. Sözdizimleri ve açıklamaları Tablo 7.6 de görülmektedir. Sözdizimi x < y x <= y x > y x >= y x== y x!= y x is y x is not y Açıklama x nesnesi y nesnesinden küçük mü? x nesnesi y nesnesinden küçük mü ya da ona eşit mi? x nesnesi y nesnesinden büyük mü? x nesnesi y nesnesinden büyük mü ya da ona eşit mi? x nesnesi y nesnesine eşit mi? x nesnesi y nesnesinden farklı mı? x nesnesi y nesnesi ile aynı mı? x nesnesi y nesnesinden farklı mı? Tablo 7.6: Karşılaştırma Operatörlerinin Sözdizimi Karşılaştırma İçin Genel Kurallar Karşılaştırılan nesneler birbirleriyle mukayese edilebilir olmalıdır. Çoğunlukla karşılaştırılan nesneler aynı tipten olur. <,<=, >, >= operatörlerinin öncelik sıraları, karşılaştırılan nesnelere bağlıdır.

7.3. ALIŞTIRMALAR 93 Sayılar için standard sıralama kullanılır. Boolean değerler için false önce, true sonra gelir. String tipler için alfabetik sıra kullanılır. ascii stringleri için, karekterlerin ascii kodları sıralamayı belirler. Kümeler için altküme üstkümeden önce gelir. Değişemez (immutable) tiplerde is operatörü == operatörüne, is not operatörü!= operatörüne denk işleve sahip olur. Değişebilir (mutable) tiplerde x == y olmak üzere, x değişirse y de değişir. 7.3 Alıştırmalar Liste 7.9. 1 2 < 5 # => true 3 < 3 " abc " <= " ad " # => true 3 <= 3 # => true 5 > 2 # => true 6 3 == 3 # => true 2!= 4 # => true && ile and ve= operatörlerinin öncelik sıraları farklıdır. Önceden sonraya doğru sıralama şöyledir: 1. \&\& 2. = 3 3. and Aşağıdaki iki programı karşılaştırınz. Parantezlerle doğru önceliğin nasıl belirlenebileceğini görünüz. Liste 7.10. > t e s t = f a l s e and t r u e 2 > t e s t > t e s t = t r u e and f a l s e > t e s t # => true Açıklamalar: Atama (=) operatörü ikisi arasındadır. O nedenle, 1. satırda öncelik (=) operatörünündür Dolayısyla bütün ifade [(test = false) and true]

94 BÖLÜM 7. MANTIKSAL İŞLEMLER olur. 1.satır (false and true) == false olur. 2.satır için test == false değeri yazılıyor; false çıktısı gelir. 3.satır ise [(test = true) and false] ifadesine eşittir. 3.satır true and false== false değerini veriyor. 4.satır ise test=true değerini yazıyor. Liste 7.11. 1 b = f a l s e && t r u e b b = t r u e && f a l s e b Açıklamalar: Bu örnekte && operatörü atama operatörünün önüne geçtiği için, daima eşitliğin sağındaki değerler yazılıyor. Önceliği Belirlemek && ile and ve= operatörlerini içeren bir ifade yazarken, parantez kullanarak öncelikleri istediğimiz gibi yapabiliriz; çünkü () parantezi sözkonusu operatörlerden önce gelir. Örneğin Liste 7.10 için önceliği eşitliğin sağındaki ifadelere vermek için, test = (true and false) yazmak yetecektir. Liste 7.12. 1 n i l. to_s # => " " n i l. to_i # => 0 Liste 7.13. 4 && 5 # => 5 n i l && t r u e # => n i l 3 t r u e && n i l # => n i l t r u e n i l # => true n i l " " # => " " Liste 7.14. Liste 7.14 içindekileri irb de tek tek deneyiniz.

7.3. ALIŞTIRMALAR 95 t r u e && t r u e # => true f a l s e && t r u e 1 == 1 && 2 == 1 " t e s t " == " t e s t " # => true 5 1 == 1 2!= 1 # => true t r u e && 1 == 1 # => true f a l s e && 0!= 0 # => true t r u e 1 == 1 # => true " Ankara " == " Ankaralı " 10 1!= 0 && 2 == 1 " Ankara "!= " Ankaralı " # => true " t e s t " == 1! ( t r u e && f a l s e ) # => true! ( 1 == 1 && 0!= 1) 15! ( 1 0 == 1 1000 == 1000)! ( 1!= 10 3 == 4) 1 == 1 && (! ( " Ankaralı " == 1 1 == 0) ) # => true Ruby de mantıksal değerlerin true, false ve nil değer aldığını biliyoruz. Mantıksal ifade içinde yer alan nil, öteki mantıksal değerlerle and, or, && ve operatörleriyle etkileşebilir: Liste 7.15. 3 t r u e and n i l # => n i l t r u e && n i l # => n i l t r u e or n i l # => true t r u e n i l # => true f a l s e and n i l 8 f a l s e && n i l f a l s e or n i l # => n i l f a l s e n i l # => n i l 13! n i l # => true not n i l # => true Değişkenler nil olabilir Değerler nil olabilir Değerler true ya da false değer alabilirler nil bir nessnenin değerinin olmadığı anlamına gelir Sayılar, string ler, true, false ve nil in kendisi nil dir. Sınıflar ve modüller nil değildir. Liste 7.16.

96 BÖLÜM 7. MANTIKSAL İŞLEMLER 1 i f f a l s e p r i n t " a " e l s i f t r u e p r i n t "b" e l s e 6 p r i n t " c " end Liste 7.17. i f 0 p r i n t " a " 3 e l s i f 1 p r i n t "b" e l s e p r i n t " c " end Aşağıdaki programı eğlence diye çalıştırınız. Sonra da hangi kodun çalıştığını anlamaya çalışınız. Liste 7.18. i f t r u e puts " e v r e n s e l doğrular vardır, yok mu? " 3 e l s e puts " e v r e n s e l y a n l ı ş l a r var mıdır? " end i f n i l 8 puts " n i l : yokluk doğrudur ; " e l s e puts " n i l : yokluk y a n l ı ş t ı r " end 13 i f f a l s e puts " f a l s e mantıksal deyimdir " e l s e puts " f a l s e mantıksal deyim d e ğ i l d i r " end