logo
eng-flag

Ruby Notları ve İpuçları

İçindekiler

  1. Temel Sözdizimi
  2. Veri Türleri
  3. Değişkenler
  4. Operatörler
  5. Kontrol Akışı
  6. Metotlar
  7. Diziler ve Hash'ler
  8. Nesne Yönelimli Programlama
  9. Modüller ve Mixin'ler
  10. Bloklar, Proc'lar ve Lambda'lar
  11. İstisna İşleme
  12. Dosya İşleme
  13. Ruby Gem'leri ve Bundler
  14. Metaprogramlama

Temel Sözdizimi

Yorumlar

# Bu bir tek satırlık yorum

=begin
Bu çok
satırlı bir
yorumdur
=end

Merhaba Dünya

puts "Merhaba, Dünya!"

Veri Türleri

Sayılar

tamsayi = 42
ondalikli = 3.14

Dizeler

tek_tirnak = 'Merhaba'
cift_tirnak = "Dünya"
interpolasyon = "#{tek_tirnak}, #{cift_tirnak}!"

Semboller

sembol = :benim_sembolum

Boolean'lar

dogru_deger = true
yanlis_deger = false

Diziler

dizi = [1, 2, 3, 4, 5]

Hash'ler

hash = { "anahtar" => "değer", :sembol_anahtar => "başka bir değer" }

Değişkenler

# Yerel değişken
yerel_degisken = "Ben yerelim"

# Örnek değişkeni
@ornek_degisken = "Ben bir örnek değişkenim"

# Sınıf değişkeni
@@sinif_degiskeni = "Ben bir sınıf değişkeniyim"

# Global değişken
$global_degisken = "Ben globalim"

# Sabitler
SABIT = "Ben bir sabitim"

Operatörler

Aritmetik Operatörler

a, b = 10, 3

puts a + b  # Toplama: 13
puts a - b  # Çıkarma: 7
puts a * b  # Çarpma: 30
puts a / b  # Bölme: 3
puts a % b  # Mod alma: 1
puts a ** b # Üs alma: 1000

Karşılaştırma Operatörleri

x, y = 5, 10

puts x == y # Eşittir: false
puts x != y # Eşit değildir: true
puts x > y  # Büyüktür: false
puts x < y  # Küçüktür: true
puts x >= y # Büyük eşittir: false
puts x <= y # Küçük eşittir: true

Mantıksal Operatörler

a, b = true, false

puts a && b # Mantıksal VE: false
puts a || b # Mantıksal VEYA: true
puts !a     # Mantıksal DEĞİL: false

Kontrol Akışı

If-Else İfadesi

x = 10

if x > 0
  puts "Pozitif"
elsif x < 0
  puts "Negatif"
else
  puts "Sıfır"
end

# Tek satırlık if ifadesi
puts "Pozitif" if x > 0

Case İfadesi

not = 'B'

case not
when 'A'
  puts "Mükemmel!"
when 'B'
  puts "İyi iş!"
when 'C'
  puts "Geçtin."
else
  puts "Daha çok çalışman gerekiyor."
end

Döngüler

# While döngüsü
i = 0
while i < 5
  puts i
  i += 1
end

# For döngüsü
for i in 0..4
  puts i
end

# Each döngüsü
(0..4).each do |i|
  puts i
end

# Times döngüsü
5.times { |i| puts i }

Metotlar

# Metot tanımı
def selamla(isim)
  "Merhaba, #{isim}!"
end

# Metot çağrısı
puts selamla("Ali")

# Varsayılan argümanlı metot
def us_al(taban, us = 2)
  taban ** us
end

puts us_al(3)    # 9
puts us_al(3, 3) # 27

# Değişken sayıda argüman
def toplam(*sayilar)
  sayilar.inject(0, :+)
end

puts toplam(1, 2, 3, 4, 5) # 15

Diziler ve Hash'ler

Diziler

meyveler = ["elma", "muz", "kiraz"]

puts meyveler[0]  # elma
meyveler << "hurma"  # Sona ekleme
meyveler.push("mürver")  # Sona eklemenin başka bir yolu
meyveler.unshift("kayısı")  # Başa ekleme

puts meyveler.length  # 6
puts meyveler.include?("muz")  # true

meyveler.each { |meyve| puts meyve }

Hash'ler

kisi = { "ad" => "Ahmet", "yaş" => 30, "şehir" => "İstanbul" }

puts kisi["ad"]  # Ahmet
kisi[:meslek] = "Mühendis"  # Yeni bir anahtar-değer çifti ekleme

kisi.each do |anahtar, deger|
  puts "#{anahtar}: #{deger}"
end

# Sembol anahtarlar (Ruby'de yaygın)
secenekler = { yazı_tipi: "Arial", boyut: 12, renk: "mavi" }
puts secenekler[:yazı_tipi]  # Arial

Nesne Yönelimli Programlama

Sınıf Tanımı

class Araba
  attr_accessor :marka, :model

  def initialize(marka, model)
    @marka = marka
    @model = model
  end

  def calistir
    puts "#{marka} #{model} çalışıyor..."
  end
end

# Nesne oluşturma
benim_arabam = Araba.new("Toyota", "Corolla")
benim_arabam.calistir

Kalıtım

class ElektrikliAraba < Araba
  attr_accessor :batarya_kapasitesi

  def initialize(marka, model, batarya_kapasitesi)
    super(marka, model)
    @batarya_kapasitesi = batarya_kapasitesi
  end

  def calistir
    puts "#{marka} #{model} sessizce çalışıyor..."
  end
end

Modüller ve Mixin'ler

module Surulebilir
  def sur
    puts "Araç hareket ediyor"
  end
end

class Araba
  include Surulebilir
end

benim_arabam = Araba.new
benim_arabam.sur  # Araç hareket ediyor

Bloklar, Proc'lar ve Lambda'lar

# Blok
[1, 2, 3].each { |sayi| puts sayi }

# Çok satırlı blok
[1, 2, 3].each do |sayi|
  puts sayi
end

# Proc
kare = Proc.new { |x| x ** 2 }
puts kare.call(5)  # 25

# Lambda
kup = ->(x) { x ** 3 }
puts kup.call(3)  # 27

İstisna İşleme

begin
  # İstisna oluşturabilecek kod
  sonuc = 10 / 0
rescue ZeroDivisionError => e
  puts "Sıfıra bölünemez: #{e.message}"
rescue StandardError => e
  puts "Bir hata oluştu: #{e.message}"
else
  puts "İstisna oluşmadı"
ensure
  puts "Bu her zaman çalışır"
end

# İstisna oluşturma
def yas_kontrol(yas)
  raise ArgumentError, "Yaş negatif olamaz" if yas < 0
end

Dosya İşleme

# Dosyaya yazma
File.open("cikti.txt", "w") do |dosya|
  dosya.puts "Merhaba, Dünya!"
end

# Dosyadan okuma
File.open("girdi.txt", "r") do |dosya|
  dosya.each_line do |satir|
    puts satir
  end
end

# Tüm dosya içeriğini okuma
icerik = File.read("girdi.txt")

Ruby Gem'leri ve Bundler

# Gem kurulumu
# gem install rails

# Bundler kullanımı
# Gemfile oluşturun:
# source 'https://rubygems.org'
# gem 'rails'

# Ardından çalıştırın:
# bundle install

# Ruby dosyanızda:
require 'bundler/setup'
require 'rails'

Metaprogramlama

# Metodu dinamik olarak tanımlama
class BenimSinifim
  define_method :benim_metodum do |arg|
    puts "#{arg} ile çağrıldı"
  end
end

nesne = BenimSinifim.new
nesne.benim_metodum("Merhaba")  # Merhaba ile çağrıldı

# method_missing
class BenimSinifim
  def method_missing(metod_adi, *args)
    puts "'#{metod_adi}' metodunu #{args} argümanlarıyla çağırdınız"
  end
end

nesne = BenimSinifim.new
nesne.var_olmayan_metod(1, 2, 3)  # 'var_olmayan_metod' metodunu [1, 2, 3] argümanlarıyla çağırdınız

2024 © Tüm hakları saklıdır - buraxta.com