class: center, middle # Ruby'e Giriş --- # İçerik 1. Hello World 2. Ruby Syntax'ı 3. Veri Tipleri 4. Koşul İfadeleri 6. İterasyon 7. Methodlar 8. Obje ve Sınıflar 9. Modüller --- # 1. Hello World ```ruby puts "Hello World" ``` --- # Ruby'nin öne çıkan özellikleri * Geliştici mutluluğunu hedefler * İngilizce diline çok yakın * Gemler * Object Oriented * Açık Sınıflar * Dinamik Tipler --- # Ruby Syntax'ı ```ruby i = 5 name = "Ruby on Rails" ``` ```ruby if i == 1 puts "X" else puts "Y" end ``` ```ruby class Bike def initialize(color, size) ... end end ``` --- # Veri Tipleri * String * Numeric * NilClass * Symbol * Hash * Array --- # String ```ruby name = "Ruby on Rails" name.class => String name.length => 13 name.reverse => "sliaR no ybuR" welcome = "Welcome to #{name}" => "Welcome to Ruby on Rails" ``` --- # Numeric .center[![Numeric](http://assets.devx.com/articlefigs/16002.gif)] --- # Numeric ```ruby x = 5 y = 2.5 x.class => Fixnum Fixnum.superclass => Integer Integer.superclass => Numeric y.class => Float y.superclass => Numeric x*y => 12.5 ``` --- # NilClass * Ruby'de **null** değeri **nil** ile gösterilir. * **nil** de aslında bir objedir **NilClass** sınıfından türetilir. ```ruby x = nil x.class => NilClass x.foobar => NoMethodError: undefined method `foobar` for nil:NilClass ``` --- # Symbol * Semboller, string'e benzer bir veri tipidir. * Stringlere göre daha az memory kullanılır ve daha hızlı çalışır * Genelde Hash içerisinde key olarak kullanılır ```ruby key = :name key.to_s => "name" people = {...} people[:ahmet] => ... people[:ali] => ... ``` --- # Hash * Hash'ler sözlük gibi çalışır * Hash içerisindeki objelere, key kullanara erişebilirsiniz ```ruby person = {name: "Ahmet", job: "Developer"} person = {:name => "Ahmet", :job => "Developer"} # Eski syntax person[:name] => "Ahmet" person.keys => [:name, :job] ``` --- # Array * Array'lerin boyutu dinamiktir * Array içerisine her tipte objeyi ekleyebilirsiniz ```ruby people = ["Ali", "Ahmet", "Veli"] people[0] => "Ali" people.count => 3 random_array = [1, 2.5, true, "foobar"] ``` --- # Kosul İfadeleri ```ruby if x == 0 puts "A" elsif x == 1 puts "B" else puts "C" end if x != 1 puts "K" end unless x == 1 puts "K" end puts "L" if x == 5 puts "M" unless x == 5 while x == 10 puts x x = x + 1 end ``` --- # İterasyon ```ruby people = ["Ali", "Ahmet", "Veli"] people.each do |person| puts "Kişi: #{person}" end # Kişi: Ali # Kişi: Ahmet # Kişi: Veli people.each_with_index do |person, i| puts "Kişi #{i}: #{person}" end # Kişi 0: Ali # Kişi 1: Ahmet # Kişi 2: Veli ``` --- # Method (Function) ```ruby def add(x,y) x + y end def add(x,y) return x + y end add(5, 3) => 8 ``` --- # Sınıflar ```ruby class Person attr_accessor :first_name #Getter ve Setter attr_accessor :last_name def initialize(first_name, last_name) @first_name = first_name @last_name = last_name end def full_name "#{first_name} #{last_name}" end end p = Person.new("John", "Doe") p.first_name => "John" p.full_name => "John Doe" ``` --- # Sınıflar ```ruby class Entity attr_accessor :type end class Person < Entity attr_accessor :first_name #Getter ve Setter attr_accessor :last_name def initialize(first_name, last_name) @first_name = first_name @last_name = last_name @type = "Person" end def full_name "#{first_name} #{last_name}" end end p = Person.new("John", "Doe") p.type => "Person" ``` `kod/siniflar_1.rb` --- # Modüller(Module) ```ruby module FullName def full_name "#{first_name} #{last_name}" end end class Person include FullName attr_accessor :first_name attr_accessor :last_name def initialize(first_name, last_name) @first_name = first_name @last_name = last_name end end p = Person.new("John", "Doe") p.full_name => "John Doe" ``` `kod/moduller_1.rb` --- ```ruby class Person attr_accessor :first_name attr_accessor :last_name @@population = 0 def initialize(first_name, last_name) @first_name = first_name @last_name = last_name @@population += 1 end def self.population @@population end def full_name "#{self.first_name} #{self.last_name}" end end p = Person.new("John", "Doe") p = Person.new("Jane", "Doe") Person.population => 2 p.full_name => Jane Doe ``` `kod/self_1.rb` --- # Open Class Ruby'de class'lar istenildiği zaman genişletilebilir. Var olan methodlar override edilebilir, yeni methodlar eklenebilir. ```ruby class Integer def even? (self % 2) == 0 end end 5.even? => false 2.even? => true ``` --- # Referanslar http://nithinbekal.com/slides/ruby-101/ http://www.slideshare.net/peter_marklund/ruby-on-rails-101-presentation-slides-for-a-five-day-introductory-course/29-VariableMethodAmbiguity_Gotchaclass_Person_attrwriter_paid