Skip to content

Number (Sayılar)

Sayılar, temel öğe olmayıp, direk nesneden türemişlerdir. Türedikleri nesne de Ruby'nin sayılar için olan base class'ıdır.

Örneğin 3 sayısına bakalım:

3.class # => Fixnum
3.class.superclass # => Integer
3.class.superclass.superclass # => Numeric
3.class.superclass.superclass.superclass # => Object

Numeric sınıfıdır asıl olan. İlk türediği sınıfı Fixnumdır. Örnekte gördüğünüz gibi;

Fixnum > Integer > Numeric şeklinde bir hiyeraşi söz konusudur.

2014.class                  # => Fixnum
2_014.class                 # => Fixnum
201.4.class                 # => Float
1.2e3.class                 # => Float
7e4.class                   # => Float
7E-4.class                  # => Float
0664.class                  # => Fixnum
0xfff.class                 # => Fixnum
0b1111.class                # => Fixnum
45678327041234321312.class  # => Bignum

Ruby'de sayı işlerinde _ hiçbir etki yapmaz. Bir şekilde okumayı kolaylaştırmak için kullanılır. Örnekteki 2014 ile 2_014 aynı şeydir. Büyük sayıları yazarken; 1_345_201 gibi bir ifade 1345201'dir aslında.

Ondalık sayılarda . kullanılır. Octal yani 8'lik sayı sistemi için direk 0 ile 0664 gibi kullanılır. 16'lık yani Hexadecimal sayı sistemi için, css dünyasından tanıdığınız beyaz rengini ifade etmek için $fff yerine 0xfff şeklinde bir kullanım mevcut. 2'lik yani Binary sayı sistemi için 0b ile başlamak yeterlidir. Scientific Notation ifadeleri için de 1.2e3ya da 7e4gibi kullanımlar mümkündür.

Number Method'ları

5 sayısı Fixnum sınıfındandır ve neticede üst sınıfları;

Numeric -> Integer -> Fixnum

şeklinde olduğu için (en üsttte Numeric) ilgili üst sınıfların method'ları da Fixnum tarafından kullanılabilir durumdadır.

Her zamanki gibi, acaba bu sınıfa ait methodlar neymiş? dediğimiz an bir ton method gelir karşımıza;

5.methods # => [
    :to_s, 
    :inspect, 
    :-@, 
    :+, 
    :-, 
    :*, 
    :/, 
    :div, 
    :%, 
    :modulo, 
    :divmod, 
    :fdiv, 
    :**, 
    :abs, 
    :magnitude,
    :==,
    :===,
    :<=>,
    :>,
    :>=,
    :<,
    :<=,
    :~,
    :&,
    :|,
    :^,
    :[],
    :<<,
    :>>,
    :to_f,
    :size,
    :bit_length,
    :zero?,
    :odd?,
    :even?,
    :succ,
    :integer?,
    :upto,
    :downto,
    :times,
    :next,
    :pred,
    :chr,
    :ord,
    :to_i,
    :to_int,
    :floor,
    :ceil,
    :truncate,
    :round,
    :gcd,
    :lcm,
    :gcdlcm,
    :numerator,
    :denominator,
    :to_r,
    :rationalize,
    :singleton_method_added,
    :coerce,
    :i,
    :+@,
    :eql?,
    :remainder,
    :real?,
    :nonzero?,
    :step,
    :quo,
    :to_c,
    :real,
    :imaginary,
    :imag,
    :abs2,
    :arg,
    :angle,
    :phase,
    :rectangular,
    :rect,
    :polar,
    :conjugate,
    :conj,
    :between?,
    :nil?,
    :=~,
    :!~,
    :hash,
    :class,
    :singleton_class,
    :clone,
    :dup,
    :taint,
    :tainted?,
    :untaint,
    :untrust,
    :untrusted?,
    :trust,
    :freeze,
    :frozen?,
    :methods,
    :singleton_methods,
    :protected_methods,
    :private_methods,
    :public_methods,
    :instance_variables,
    :instance_variable_get,
    :instance_variable_set,
    :instance_variable_defined?,
    :remove_instance_variable,
    :instance_of?,
    :kind_of?,
    :is_a?,
    :tap,
    :send,
    :public_send,
    :respond_to?,
    :extend,
    :display,
    :method,
    :public_method,
    :singleton_method,
    :define_singleton_method,
    :object_id,
    :to_enum,
    :enum_for,
    :equal?,
    :!,
    :!=,
    :instance_eval,
    :instance_exec,
    :__send__,
    :__id__,
]

Bunların içinden en sık kullanılanlara ve kullanım şekillerine değineceğim.

5.to_s # => "5"
# Sayısal değeri String'e çevirdik

-5.abs # => 5
# Mutlak değer

5.zero? # => false
# Sıfır mı?

5.even? # => false
# Çift sayı mı?

5.odd?  # => true
# Tek sayı mı?

5.next # => 6
# Sonraki sayı?

5.pred # => 4
# Önceki sayı?

3.14.floor # => 3
# Taban değeri

3.14.ceil # => 4
# Tavan değeri

1.49.round # => 1
1.51.round # => 2
# Yuvarlama

1.bit_length # => 1
15.bit_length # => 4
255.bit_length # => 8
# Bit cinsinden uzunluğu/boyu

1.size        # => 8
10.size       # => 8
10242048.size # => 8
1024204810242048102420481024.size # => 12
# Byte cinsinden kapladığı yer

upto, downto gibi iterasyonla ilgili olanları Enumeration ve Iteration bölümünde göreceğiz!