Operatörler. 6.1 Operatör Nedir?

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

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.

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

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

OPERATÖRLER Alıştırmalar

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:

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

Nesne Yönelimli Programlama

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

Sayıtlama Dizgeleri. (a n a n-1 a n1 a n0. b 1 b 2 b m )r. simgesi şu sayıyı temsil eder.

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

Mikrobilgisayarda Aritmetik

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

mikroc Dili ile Mikrodenetleyici Programlama Ders Notları

C Programlama Dilininin Basit Yapıları

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

Internet Programming II

Java da Program Denetimi ve Operatörler

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

Atatürk Anadolu. Temel Kavramlar Üzerine Kısa Çalışmalar

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

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

232 DIZIN. attr, 65 attributes, 65

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

ALGORİTMA VE PROGRAMLAMA II

İç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

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

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

Pointer Kavramı. Veri Yapıları

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

SAYILAR DOĞAL VE TAM SAYILAR

YZM 2105 Nesneye Yönelik Programlama

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

Genel Programlama II

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

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

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

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

PROGRAMLAMAYA GİRİŞ VE ALGORİTMA «YTÜROK» EĞİTMEN:REHA ÖZGÜR ŞİMŞEK

Internet Programming II

Mantıksal (Logic) Operatörler

Nesne Tabanlı Programlama

Algoritma ve Programlamaya Giriş

Göstericiler (Pointers)

BİLGİSAYAR PROGRAMLAMA DERSİ

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

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

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

Programlama Dilleri 3

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Excel Formüller ve Fonksiyonlar. Yusuf MANSUROĞLU Mühendislik Hizmetleri Müdür Yardımcısı

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

PASCAL PROGRAMLAMA DİLİ YAPISI

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

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

JAVASCRIPT JAVASCRIPT DİLİ

12-A. Sayılar - 1 TEST

Excel' de formüller yazılırken iki farklı uygulama kullanılır. Bunlardan;

TABAN ARĠTMETĠĞĠ. ÇÖZÜM (324) 5 = = = = 89 bulunur. Doğru Seçenek C dir.

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

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.

DÖRDÜNCÜ BÖLÜM Aritmetik işlemler

C++ Operatörler (Operators)

C Konsol Giriş Çıkış Fonksiyonları

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

Lab105-02/ BAHAR DÖNEMİ 3.Hafta Tarih:

Günümüz bilgi toplumunda bilgisayar, her alanda kendine yer edinmiş ve insana, bir çok işlemde yardımcı olarak büyük kolaylık sağlamaktadır.

İÇİNDEKİLER BASİT EŞİTSİZLİKLER. HARFLİ İFADELER Harfli İfadeler ve Elemanları Eşitsizlik Sembolleri ve İşaretin Eşitsizlik İfadesi...

MODÜLER ARİTMETİK A)1 B)3 C)8 D)11 E)13. TANIM Z tam sayılar kümesinde tanımlı

Biçem Belirteçleri (Format Specifiers)

BÖLÜM 6: KARŞILAŞTIRMALI KONTROL YAPILARI

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

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

Degişken Tanımlama Ve Operatörler

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

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

SAYI SİSTEMLERİ. Sayı Sistemleri için Genel Tanım

1. BÖLÜM Mantık BÖLÜM Sayılar BÖLÜM Rasyonel Sayılar BÖLÜM I. Dereceden Denklemler ve Eşitsizlikler

MTK467 Nesneye Yönelik Programlama. Hafta 4 - Döngüler Zümra Kavafoğlu

FORMÜLLER VE FONKSİYONLAR

C#(Sharp) Programlama Dili

Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi

TAMSAYILAR. 9www.unkapani.com.tr. Z = {.., -3, -2, -1, 0, 1, 2, 3, } kümesinin her bir elemanına. a, b, c birer tamsayı olmak üzere, Burada,

BİLİŞİM TEKNOLOJİLERİ 6. SINIF DERS NOTLARI 2

Aritmetik Operatörleri

3.1 Pointer in Yararları

1.1 Üslü İfadeler: Üslü ifadelerle ilgili aşağıdaki kuralların hatırlanması faydalıdır.

Microsoft Excel Uygulaması 2

Nesne Tabanlı Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

ALGORİTMA VE PROGRAMLAMA I

String String İşlemleri

Bölüm 7. Deyimler ve Atama ifadeleri ISBN

SAYISAL ELEKTRONİK DERS NOTLARI:

EXCEL 2007 ELEKTRONİK ÇİZELGE

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

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

ÜNİTE İÇİNDEKİLER. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA HEDEFLER OPERATÖRLER

Transkript:

6 Operatörler 6.1 Operatör Nedir? Operatör, bir veri tipi üzerinde tanımlı fonsiyondur. En basit örneği sayılar üzerindeki toplama işlemidir. 1 + 2 = 3 işleminde (+) simgesi bir operatördür. 1 ve 2 sayıları ise işlenen (operand) sayılar, 3 ise işlemin sonucudur. Her programlama dilinde verilerle işlem yapan gömülü (built-in) operatörler vardır. Ruby de operatörler birer metottur ve işemin yapıldığı sınıf ya da modülde geçerlidirler. Onları başka bir modülden çağırmaya gerek kalmadan çalışırlar. Ruby dilinde çok sayıda operatör vardır. En çok kullanılan operatörlerden bazıları şunlardır: Aritmetik Operatörleri Karşılaştırma (bağlantı) Operatörleri Atama Operatörleri Mantıksal (logic) Operatörler İkil (bitwise) Operatörler Dönüştürücüler Denklik (identity) Operatörleri Şimdi bunları daha ayrıntılı inceleyelim.

74 BÖLÜM 6. OPERATÖRLER 6.2 Aritmetik Operatörleri Bütün diller sayılarla işlem yapan operatörlere sahiptir. Okullarda dört işlem diye adlandırılan toplama, çıkarma, çarpma, bölme işlemleri hemen hemen bütün dillerde derleyiciye gömülüdür ve aynı simgeleri kullanırlar. 6.2.1 Birli Operatörler Bir sayının önüne eksi (-) simgesi gelirse, o sayının işareti değişir. Bir sayının önüne artı (+) gelirse, o sayı aynı kalır. Bir bakıma sayının önüne yazılan (+) simgesi etkisizdir. -12= -(12) +12= 12 6.2.2 İkili Operatörler Ruby, sayılarla işlem yapmak için +, -, *, /, %, ve ** ikili operatörlerini kullanır. Bu operatörlerin hepsi sayılara uygulanabilir. Onlar için başka modülden çağrı yapmaya gerek yoktur. Açıklamalar Ruby aritmetik operatörlerini Tablo 6.1 den görebiliriz. Operator Açıklama + Toplama - Çıkarma * Çarpma / Bölme % Modulo ** kuvvet Tablo 6.1: Aritmetik Operatörler Ruby de ikili aritmetik operatörlerin işlevleri Tablo 6.2 de gösterilmiştir. 6.2.3 Ruby da Bölme İşlemi Genel olarak bir fonkiyonun değeri değişkenlerinin veri tipine bağlıdır. Bölme işlemi buna iyi bir örnektir. Eğer daima tamsayılarla çalışıyorsak, m ile n

6.2. ARITMETIK OPERATÖRLERI 75 operator Açıklama Örnek + Toplama: Solundaki ve sağındaki iki sayıyı toplar 3 + 4= 7 Çıkarma: Solundaki sayıdan sağındaki sayıyı çıkarır, farkı verir. 5-6= -1 Çarpma: Solundaki ve sağındaki iki sayıyı çarpar. 3 * 4= 12 / Solundaki sayıyı sağındaki sayıya böler. İşleme giren sayılar tamsayı ise, işlem bölümün tamsayı kısmını verir. İşleme 7.0 / 2= 3.5 giren sayılardan birisi float ise bölümü float tipten verir. % Modulus: Solundaki sayıyı sağındaki sayıya böler, bölümün kalanını verir. 7 % 3= 1 Üs alma : Solundaki sayının sağındaki sayı üssünü verir. 3 ** 2= 9 Tablo 6.2: Aritmetik Operatörlerin İşlevleri tamsayı iseler m/n bölümünün tamsayı olmasını isteriz. Ne var ki, 6/2 = 3 iken 7/2 bölümünün gerçek değeri bir tamsayı değildir. Çoğu dillerde olduğu gibi, Ruby bu sorunu aşmak için, m/n bölümünün kesir kısmını atar, tamsayı kısmını verir. Buna tamsayı bölme (integer division) deniyor. Bölümün kesirli değeri istendiğinde de işleme giren sayılardan birisini f loat yapmak yeterlidir. p ile q sayılarından birisi f loat ise p/q işlemi, bölümü kesirli olarak verecek biçimde tanımlanır. Örneğin, Liste 6.1. 1 213 / 127 # => 1 213. 0 / 127 # => 1. 6771653543307086 213 / 127. 0 # => 1. 6771653543307086 213. 0 / 127. 0 # => 1. 6771653543307086 olur. Uyarı: Tamsayı bölme işleminde kullanıcı girdisine bağlı bazı işlemlerde istenmeyen yanlışlar olabilir. Örneğin, Celsius dereceyi Fahrenheit dereceye dönüştüren basit formülde Celsius derecenin kullanıcı tarafından girildiğini varsayalım. Celsius yerine 36 girilirse, Ruby tamsayı bölme yapar: 1 p r i n t (36 9/5 + 32) # => 96 sonucu çıkar. Ama daha titiz bir kullanıcı Celsius dereceyi 36.0 biçiminde float olarak girerse, sonuç p r i n t (36.0 9/5 + 32) # => 96.8

76 BÖLÜM 6. OPERATÖRLER olur. Çıkan iki sonuç arasındaki fark, bilimsel hesaplarda kabul edilemeyecek kadar farklıdır. Java gibi verileri tiplere ayıran ve değişkenlerin tiplerini önceden belirleyen dillerde böyle bir sorun yaşanmaz. Çünkü, program, kullanıcının gireceği verinin tipini kesinlikle belirler. Kullanıcı yanlış veri tipi giremez. Ama Ruby da, değişkenlerin veri tipleri önceden belirlenmiyor. Sıradan bir kullanıcı açısından 36 ile 36.0 arasında bir fark yoktur. Ama Ruby bu ayrımı iyi yapıyor. Bölme Çoğunlukla Yaklaşık Sonuç Verir Bölme işleminden kesirli sonuç istendiğinde, kesir ayracından sonra işlemin kaç basamak yürütüleceğine karar vermek demek, sonucu belirli bir yaklaşıklıkla istemek demektir. Örneğin, 5.0/2 = 2.5 iken 1.0/3 = 0.333... olur. Bu işlemde kesir ayracından sonra kaç tane 3 yazacağımız, işlemden istediğimiz duyarlığa bağlıdır. Akçasal işlemlerde iki basamak yeterli olur. Ama bilimsel hesaplarda basamak sayısını artırmak gerekir. Ruby kesirli bölme işleminde, öntanımlı (default) olarak ondalık ayracından sonra 17 basamak yazabilir. Bu özelik hemen her bilimsel hesaplamada yeterli bir duyarlık sağlar. Bölme işleminde yaklaşık sonuç yazılırken, çıktının en sağındaki basamakta yer alan sayı daima yuvarlanmış sayıdır. Yuvarlama işlemi şöyle yapılır. Atılan hanelerin en solundaki sayak 5 ten küçükse çıktının son basamağı (en sağda yer alan) değişmez. Ama atılan basamakların en solundaki sayak 5 ya da 5 ten büyükse, çıktının en sağındaki sayak 1 artırılır. Liste 6.2. 7 / 3 # => 2 7. 0 / 3 # => 2. 333 ( 3 basamaklı yaklaşım ) 7. 0/ 3 # => 2. 3333333333333335 ( 17 basamaklı yaklaşım ) 4 123/ 321. 0 # => 0. 38317757009345793 ( 17 basamaklı yaklaşım ) 8. 0 / 7 # => 1. 142 ( 3 basamaklı yaklaşım ) 8.0 / 7 # => 1.1428571428571428 (17 basamaklı yaklaşımı ) 3 + 4 == 7 3 4 == 1 3 4 == 12 4 3 4 == 81 3 / 4 == 0 3 \% 4 == 3 4/3 == 1 4. 0/ 3 == 1. 3333333333333333 9 4/ 3. 0 == 1. 3333333333333333

6.3. ATAMA OPERATÖRLERI 77 6.2.4 Üst Alma (kuvvet) Ruby de a b ifadesi, matematikteki a b ifadesine denktir yani a sayısının b kuvvetini almaktır. Burada a ile b herhangi iki sayıdır. Tamsayı olmaları gerekmez. Üst olarak kesirli sayılar yazılarak, bir sayının herhangi bir kökü hesaplanabilir. Örneğin, 7 (1.0/3.0) == 1.912931182772389 (7 nin küp kökü). x y ifadesi 1/(x y) ifadesine denktir. z y z ifadesi x (y z) ifadesine denktir. Başka bir deyişle, üst alma işleminde öncelik sağdan sola doğru sıralıdır. operatörü birli eksi (-) operatörüne göre daha önceliklidir. Örneğin 1 0.5 ifadesi (1 0.5) ifadesine denktir. Ama -1 sayısının karekökünü bulmak istiyorsak ( 1) 0.5 yazmalıyız: (-1)**0.5== (6.123233995736766e-17+1.0i) Çıktının sağındaki e 17 ifadesi, matematikteki 10 17 anlamındadır. Buna üstel gösterim denilir. Sonuç karmaşık bir sayıdır ve sanal kısmı +1.0i dir. Ruby eşlenik köklerin pozitif olanını verir. İşlemlerde operatörlerin öncelik sırasını, daima parantezler kullanarak belirleyebiliriz. 6.3 Atama Operatörleri Aslında, Ruby de, değişkene değer atanmaz; değere (nesne) değişken atanır. BAşka bir deyişle, önce nesne ana belleğe yerleşir, sonra onun adresini gösteren pointer atanır. O nedenle, bazı başka dillerde olduğu gibi, değişkenlerin veri tipleri önceden belirlenmez. Değişkene atanan değerin (nesnenin) veri tipini Ruby kendisi belirler. Atama operatörleri (assignment operators) değişkenlere (nesnelere) pointer atar. Alışkanlığı korumak için, yapılan eylemi değişkene değer atama olarak ifade ediyoruz. Ruby de bir değişken adı yazdıktan sonra (=) simgesini izleyen veri, o değişkene atanmış olur. Örneğin, x = 123 deyimi x değişkenini yaratır ve ona 123 değerini atar. Eşit (=) simgesine atama operatörü denilir. Eşitliğin solundaki x simgesi, 123 değerinin ana bellekteki adresini gösteren işaretçi dir (referans, pointer). Buna değişken diyoruz. Eşit (=) simgesinin sol rafına sol-değer (lvalue), sağ tarafına sağ-

78 BÖLÜM 6. OPERATÖRLER değer (rvalue) denilir. Adlarından anlaşıldığı gibi, sol ve sağ değerler, sırasıyla, eşitliğin solunda ve sağında yer alırlar. Sol-değer daima değişken adıdır; kendisine atanan sağ-değer in ana bellekteki adresini işaret eden pointerdir. Ama çoğunlukla, pointer terimini kullanmayacak, alışkanlığı koruyarak değişken terimini kullanacağız. Bileşik Atama Operatörleri Bir değişken değeriyle işlem yapmanın bazı kolay yolları vardır. Aşağıdaki atama operatörleri, bir değişkenin mevcut değeri ile yapılacak aritmetik işlemleri kendiliğinden gerçekleştirir. Bunlara, bazı kaynaklarda, kısaltılmış atama operatörleri ya da birleştirilmiş atama operatörleri denir. Operator Açıklama Sonuç = x= 123 + = (x += 3)== (x= x + 3) x= 126 = (x -= 3)== (x= x - 3) x= 120 = (x *= 3)== (x= x * 3) x= 369 / = (x /= 3)== (x= x / 3) x= 41 % = (x %= 3)== (x= x % 3) x= 0 = (x **= 3)== (x= x ** 3) x= 186867 6.3.1 Artım ve eksim Operatörleri Bazı dillerde, bir x sayısına 1 eklemek için x++ operatörü, 1 çıkarmak için x operatörü kullanılır. Ruby bunu += ve -= operatörleri ile yapar. Gerçekten x= 3 iken x+=1 deyimi x= x + 1 yerine geçer #=>( x== 4) x= 3 iken x -=1 deyimi x= x - 1 yerine geçer #=> ( x== 2) Önerme 6.1. y değişkenine bir değer atanmış iken x = y gibi her atama deyimi, x değişkenini yaratır ve y in gösterdiği adresi x pointerine aktarır. Böylece, hem x hem y aynı nesneyi işaret ederler. Buna pointerlerin eşitliği denilir. Tabii, her değişkenin, kendisine atanan değerin ana bellekteki adresini işaret eden bir pointer olduğunu unutmuyoruz. x = y ataması yapılınca x ile y aynı adresi işaret eden iki pointer olur. Örnekler 1 > x = 15 > y = 25

6.4. KARŞILAŞTIRMA OPERATÖRLERI 79 > x = y > p r i n t ( x ) # => 25 1 > z = 12345. 6789 > x = z > p r i n t ( x ) # => 12345.6789 > b = f a l s e 2 > x = b > p r i n t ( x ) # => f a l s e > x # => f a l s e 6.4 Karşılaştırma Operatörleri Tablo 6.3: Karşılaştırma Operatörleri Operatör Açıklama Örnek == solundaki ile sağındaki eşitse true, değilde false verir 3==5 #=> false!= Solundaki sağındakine eşitse false, değilse true verir 3!=5 #=> true > Solundaki sağındakinden büyükse true, değilse false verir 3>5 #=> false < Solundaki sağındakinden büyükse false, değilse true verir 3<5 #=> true >= Solundaki sağındakinden büyük ya da eşitse true, değilse false verir 3>=5 #=> false <= Sağındaki solundakinden küçük ya da eşitse true, değilse false verir 3<=5 #=> true <=> Solundaki sağındakine eşitse 0; solundaki sağındakinden büyükse 1; solundaki 3<=>5 #=> -1 sağındakine küçükse -1 verir === case ifadelerinde eşitliği denetler (1...10)=== 5 #=> true.eql? Uygulanan nesne ile argüman aynı tipten ve eşitseler true, değilse false verir false 1.eql?(1.0) #=> (obj1= "abc" ve equal? Uygulanan nesne ile argümanın pointerleri aynı ise true verir obj1.equal?obj2 obj2= obj1) ise #=> true

80 BÖLÜM 6. OPERATÖRLER 6.5 Paralel Atamalar Kesim 5.1 de paralel atama eyleminden söz etmiş ve birden çok değişkene tek komut satırı ile atama yapılabileceğini söylemiştik. Örneğin, x= 15 y= 25 z= 30 atamalarını x, y, z= 15, 25, 30 deyimi ile yapabiliriz. Swap: Paralel atamayı iki değişkenin değerlerini kolayca takas (swap) etmek için kullanabiliriz: x, y= y, x 6.5.1 Dönüştürücüler Programlamada sık sık bir sayı tipinden başka bir sayı tipine, bir stringden sayıya, bir sayıdan strinde ya da bir nesneden string e dönüşümler gerekir. Hemen her programlama dilinde yapılan bu işleri Ruby çok kısa kodlarla yapar. to_i Metodu : to_i metodu bir sayısal değeri tamsayıya dönüştürür. Tamsayıları aynı bırakır, kesirli sayıların kesir kısmını atarak, onu taban tamsayıya dönüştürür. Örneğin, 1 (123). to_i == 123 (123.4567). to_i == 123 to_f Metodu : to_f metodu bir sayısal değeri float tipe dönüştürür. Float tipleri aynı bırakır, tam sayıların sağına.0 ekleyerek onları float yapar. Sayının ondalık basamak sayısı çok fazla ise, Ruby onu yaklaşık float sayı olarak verir. Örneğin, (123). to_f == 123.0 (123.4567). to_f == 123.123.4567 3 ( 123. 45678901234567890123). to_f # => 123. 45678901234568 Float tan Tam Sayıya Dönüşüm

6.5. PARALEL ATAMALAR 81 Integer (123.4567) # => 123 String den Tam Sayıya Dönüşüm Bu metot to_i metoduna denktir. Integer ("123") # => 123 Hexadecimal dan Tam Sayıya Dönüşüm Integer (0x3BACF7) # => 3910903 Octal dan Tam Sayıya Dönüşüm Integer (012345670) # => 2739128 Binary den Tam Sayıya Dönüşüm Integer (0b10101010101011) # => 10923 Karakter den ASCII Koduna Dönüşüm "A".getbyte(0) # => 65 Integer den Float a Dönüşüm Bu metot to_f metoduna denktir. Float (123) # => 123.0 Hexadecimal den Float a Dönüşüm Float (0x1ABF9) # => 109561.0 Octal dan Float a Dönüşüm Float (01234567) # => 342391.0 Binary den Float a Dönüşüm Float (0b101010111) # => 343.0 Örnekler: Integer(17/4) # => 4 Float(17/4) # =>4.0 ( 4.25 değil) String den Float a Dönüşüm Float sayı string olarak yazılmışken, onu float sayıya dönüştürebiliriz. Ama aslı float olmayan stringler floata dönüştürülemez. Ruby, argument hatası olduğu uyarısını verir. Float ("12.4567") # => 12.4567 Float ("oniki") # =>ArgumentError: invalid value for Float(): "oniki" > 0. 99999 # => 0. 99999 ( 5 basamak ) 2 > 0. 9999999999999999 # => 0. 9999999999999999 ( 16 basamak ) > 0. 999999999999999999 # => 1. 0 ( 17 basamak ) > 0. 9999999999999999999999999 # => 1. 0 ( 25 basamak )

82 BÖLÜM 6. OPERATÖRLER > 0. 0000000000000000 # =>0.0 6.5.2 Mantıksal Operatörler Mantıksal operatörler (logical operators) true ya da f alse değer alan mantıksal deyimler üzerinde tanımlı operatörlerdir. Altı tanedirler operator and or &&! not Açıklama Mantıksal AND operatörüdür. (a and b) deyimi a ve b true ise true, değilse false verir. Mantıksal OR operatörüdür.(a or b) deyimi a ve b den en az birisi true ise true, değilse frue verir. Mantıksal AND operatörüdür. a ve b true iseler a&&b== true olur. Mantıksal OR operatörüdür. a ve b den birisi true ise a&&b== true olur. Mantıksal NOT operatörüdür. a true ise!a false, a false ise!a true olur. (not b) deyimi b nin olumsuzunu verir Tablo 6.4: Mantıksal Operatörler 6.6 Tip Dönüştürücüler to_s ve to_i Dönüşümleri to_s metodu Integer tipi istenilen tabana göre string e dönüştürür. to_i metodu String tipinde yazılı olan sayıyı Integer tipe dönüştürür. 6.6.1 Integer den String e Dönüşüm I n t e g e r. to_s ( tb ) deyimi Integer i tb tabanına göre string biçiminde yazar. Örnekler: 123. to_s (2) # => "1111011" 123. to_s (8) # => "173" 123. to_s (16) # => "7b" 4 123. to_s (10) # => "123" 123. to_s (3) # => "11120" 1024. to_s (2) # => "10000000000"

6.6. TIP DÖNÜŞTÜRÜCÜLER 83 6.6.2 String den Intege e Dönüşüm String.to_i(tb) deyimi String i tb tabanına göre yazılmış sayı olarak algılar ve onu Integer tipine dönüştürür. Örnekler: " 1111011 ". to_i (2) # => 123 " 173 ". to_i (8) # => 123 " 123 ". to_i (16) # => 123 4 " 123 ". to_s (10) # => 123 " 11120 ". to_i (3) # => 123 " 10000000000 ". to_i (2) # => 1024 6.6.3 Bitsel Operatörler Bitsel Operatörler (bitwise operators) ikil (binary) sistemde tamsayılar üzerinde işlem yapan operatötlerdir. Ruby de altı tane bitsel operatör vardır. Örnekler: Operatör Örnekler & 1 & 1== 1, 1&0==0, 0&1==0 1 1== 1, 1 0== 1, 0 1== 1, 0 0== 0 ^ 1^1== 0, 1^0== 1, 0^1==1, 0^0==0 ~ ~1== -2, ~0== -1 «1«1== 1*2, m«n==m*(2 n )» 1»1== 0, m»n== m*(2 n ) ~1 # => 2 ~ 2 # => 1 2.to_s (2) # => " 10" 4 " 10". to_i (2) # => 2 1 ~0 # => 1 ~ 1 # => 0 1.to_s (2) " 1". to_i (2) # => " 1" # => 1 Örnekler: m & n : Bitsel AND (bitwise and) işlemidir. m ile n sayılarının binary yazılışında aynı adlı basamakları AND ile birleştirilirken 1&1 == 1, 1&0== 0, 0&1== 0, 0&0== 0 alınır. Örneğin 12 & 7= 4 olur. 1 12 = 1100 7 = 111

84 BÖLÜM 6. OPERATÖRLER & 4 = 0100 m n : Bitsel OR (bitwise or) işlemidir. m ile n sayılarının binary yazılışında aynı adlı basamakları OR ile birleştirilirken 1 1== 1, 1 0== 1, 0 1== 1, 0 0== 0 alınır. Örneğin 12 7= 15 olur. 1 12 = 1100 7 = 111 15 = 1111 ~m : Bitsel olumsuzlama (bitwise negation) operatörü. -m-1 sayısıdır. 1 ~12 == 13 ~7 == 8 m ^n : Bitsel Dışlayan VEYA ("bitwise exclusive or") işlemidir. m ile n sayılarının binary yazılışında aynı adlı basamakları ^ile birleştirilirken 1^1== 0, 1^0== 1, 0^1== 1, 0^0== 0 alınır. Örneğin 12 ^7= 11 olur. 12 = 1100 7 = 111 3 ^ 11 = 1011 6.6.4 Basamak Kayması (shift) Fixnum ve Bignum sınıfları sola kayma («) ve sağa kayma (») operatörlerine sahiptir. Bunlar sırasıyla sayının ikil (binary) gösteriminideki basamakları, sırasıyla, sola ve sağa kaydırırlar. m «n : m sayısının ikil ifadesindeki her ikil basamak n basamak sola kayar. Sağda boş kalan basamakların yerine 0 gelir. m«n sayısı, m sayısının 2 n ile çarpımına eşittir. 1 12 << 7 == 1536 m» n : m sayısının ikil ifadesindeki her ikil basamak n basamak sağa kayar. Solda boş kalan basamakların yerine 0 gelir. m»n sayısı, m sayısının 2 n ile çarpımına eşittir. 12 >> 3 == 1

6.6. TIP DÖNÜŞTÜRÜCÜLER 85 ~1 == 2 ~0 == 1 1&1 == 1 4 1&0 == 0 0&1 == 0 0&0 == 0 1&1 == 1 1 1 == 1 9 1^1 == 0 1^0 == 1 1<<2 == 4 1>>2 == 0 >a = 0 b00111100 \# => 60 >b = 0 b00001101 \# => 13 3 a&b # => 12 # => "1100" a b # => 61 # => "111101" a^b # => 49 # => "110001" ~a # => 61 # => " 111101" a = 60 # a. to_s (2) = "111100" b = 13 # b. to_s (2) = "1101" 3 c = 0 # b. to_s (2) = " 0 " d = a & b # => 12 # d. to_s (2) # => "1100" e = a b ; # => 61 # e. to_s (2) # => "111101" f = a ^ b ; # => 49 # f. to_s (2) # => 110001" 8 g = ~a ; # => 61 # g. to_s (2) # => " 111101" h = a << 2 ; # => 240 # h. to_s (2) # => "11110000" k = a >> 2 ; # 15 # K. to_s (2) # => "1111" Örnekler: 0b1011<<1 # => 22 22>>1 # => 11 22. to_s (2) # => "10110" 11. to_s (2) # => "1011" 5 " 0b10110 ". to_i (2) # => 22 " 0b1011 ". to_i (2) # => 11 0b1<<3 # => 8 8. to_s (2) # => "1000" ~0 # => 1 ~ 1 # => 0 3 1.to_s (2) # => " 1" " 1". to_i (2) # => 1 1 (0 b1011 <<1). to_s (2) # => "10110" # => 22 (0 b1010&0b1100 ). to_s (2) # => "1000"

86 BÖLÜM 6. OPERATÖRLER 6.7 Koşullu Operatör Üçlü operatör de denilen bu operatör, if-then-else yönlendirmesinin kısa yoludur (bkz. Bölüm 11.2.4). 6.8 Operatörin Öncelik Sıraları Yukarıdan aşağıya göre sıralıdır. En üstteki en yüksek önceliğe, an alttaki en düşük önceliğe sahiptir. Liste 6.3. : :. [ ] 3 (unary ) +(unary )! ~ / % + << >> 8 & ^ > >= < <= <=> == ===!= =~! ~ && 13...... =(+=, =...) not and or Yukarıda verilen operatörlerden, şağıdakiler dışında kalanların hepsi birer netottur. Liste 6.4. =, : :,.,..,...,!, not, &&, and,, or,!=,! ~ Uyarı 6.1. Atama operatörleri kullanıcı tarfından yeniden tanımlanamaz.