Ruby Hile Sayfası
Son güncelleme
Hello World ve kod çalıştırma
Ruby şablon koda ihtiyaç duymaz - tek bir satır çalışır.
| İşlem | Söz dizimi |
|---|---|
| Satır sonuyla yazdır | puts "Hello, World!" |
| Satır sonu olmadan yazdır | print "Hello" |
| Bir değeri incele | p [1, 2, 3] |
| Dize interpolasyonu | puts "Hi #{name}" |
| Yorum | # this is a comment |
| Çok satırlı yorum | =begin ... =end |
| Bir dosyayı çalıştır | ruby app.rb |
| Etkileşimli kabuk | irb |
Değişkenler ve tipler
Ruby dinamik tiplidir; her şey bir nesnedir.
| İşlem | Söz dizimi |
|---|---|
| Yerel değişken | age = 30 |
| Sabit | PI = 3.14 |
| Örnek değişkeni | @name = "Ada" |
| Global değişken | $count = 0 |
| Sembol | :status |
| Nil / boolean | nil, true, false |
| Tipi kontrol et | 42.class, Integer döndürür |
| Tip dönüştür | "42".to_i, 42.to_s, "3.5".to_f |
Dizeler
Dizeler, zengin bir metot kümesine sahip değiştirilebilir nesnelerdir.
| İşlem | Söz dizimi |
|---|---|
| Uzunluk | "hello".length |
| Büyük / küçük harf | s.upcase, s.downcase |
| Boşlukları kırp | s.strip |
| Değiştir | s.gsub("a", "b") |
| Diziye böl | "a,b,c".split(",") |
| Alt dizeyi içerir mi | s.include?("ell") |
| Karakterleri dilimle | s[0..2] |
| Birleştir | "foo" + "bar", s << "!" |
| Tekrarla | "ab" * 3 |
| Biçimlendir | format("%05d", 42) |
Diziler
Sıralı, tam sayı indeksli koleksiyonlar.
| İşlem | Söz dizimi |
|---|---|
| Oluştur | nums = [1, 2, 3] |
| İndeksle eriş | nums[0], nums[-1] |
| Sona ekle | nums.push(4), nums << 4 |
| Sondan kaldır | nums.pop |
| Uzunluk | nums.length |
| Map | nums.map { |n| n * 2 } |
| Filtrele | nums.select { |n| n.even? } |
| İndirge (reduce) | nums.reduce(0) { |sum, n| sum + n } |
| Sırala | nums.sort |
| Dizeye birleştir | nums.join(", ") |
Hash'ler
Anahtar-değer koleksiyonları, genellikle sembollerle anahtarlanır.
| İşlem | Söz dizimi |
|---|---|
| Oluştur | user = { name: "Ada", age: 30 } |
| Değere eriş | user[:name] |
| Değer ayarla | user[:email] = "a@x.com" |
| Anahtar kontrol et | user.key?(:name) |
| Anahtar sil | user.delete(:age) |
| Anahtarlar / değerler | user.keys, user.values |
| Dolaş | user.each { |k, v| puts "#{k}: #{v}" } |
| Varsayılan değer | Hash.new(0) |
| Birleştir | h1.merge(h2) |
Kontrol akışı
Koşullar ve döngüler; Ruby'nin sondaki değiştiricilerine dikkat edin.
| İşlem | Söz dizimi |
|---|---|
| If / elsif / else | if x > 0 ... elsif x < 0 ... else ... end |
| Satır içi if (değiştirici) | puts "hi" if ready |
| Unless | unless done ... end |
| Üçlü (ternary) | x > 0 ? "pos" : "neg" |
| Case / when | case n; when 1 then ...; else ...; end |
| While döngüsü | while i < 10 ... end |
| Until döngüsü | until done ... end |
| Times | 5.times { |i| puts i } |
| Aralık üzerinde yineleme | (1..5).each { |i| puts i } |
| Break / next | break, next |
Metotlar
Son ifade örtük olarak döndürülür.
| İşlem | Söz dizimi |
|---|---|
| Bir metot tanımla | def add(a, b) ... end |
| Örtük return | def square(x) x * x end |
| Varsayılan argüman | def greet(name = "World") ... end |
| Anahtar kelime argümanları | def box(w:, h:) ... end |
| Splat (variadic) | def sum(*nums) ... end |
| ? ile biten metot | def valid? ... end |
| ! ile biten metot | def normalize! ... end |
| Parantezsiz çağır | greet "Ada" |
Block'lar, proc'lar ve lambda'lar
Block'lar metotlara geçirilen kod parçalarıdır; proc'lar ve lambda'lar onları saklar.
| İşlem | Söz dizimi |
|---|---|
| Block (süslü parantez) | [1, 2].each { |n| puts n } |
| Block (do/end) | [1, 2].each do |n| puts n end |
| Bir block'a yield et | def run; yield; end |
| Block verildi mi kontrolü | block_given? |
| Block'u parametre olarak yakala | def run(&blk); blk.call; end |
| Bir proc oluştur | square = proc { |x| x * x } |
| Bir lambda oluştur | square = ->(x) { x * x } |
| Bir proc / lambda çağır | square.call(3), square.(3) |
Sınıflar ve modüller
Sınıflar durum ve davranışı tutar; modüller ortak metotları karıştırır (mixin).
| İşlem | Söz dizimi |
|---|---|
| Bir sınıf tanımla | class Point ... end |
| Yapıcı (constructor) | def initialize(x, y) @x = x; @y = y; end |
| Örnek metodu | def dist ... end |
| Erişimci kısayolları | attr_accessor :x, :y |
| Örnek oluştur | p = Point.new(1, 2) |
| Kalıt al | class Circle < Shape ... end |
| Sınıf metodu | def self.origin ... end |
| Bir modül tanımla | module Drawable ... end |
| Bir modülü karıştır (mixin) | include Drawable |
| super çağır | super(args) |
En çok başvurduğunuz Ruby söz dizimi tek sayfada. Bu Ruby hile sayfası, temel dil için hızlı bir başvurudur - değişkenler ve tipler, dizeler, diziler ve hash'ler, kontrol akışı, metotlar ve Ruby'yi bu kadar anlaşılır kılan block'lar, proc'lar ve lambda'lar.
Buradaki her şey saf Ruby'dir ve herhangi bir standart yorumlayıcıda çalışır. İhtiyacınız olanı kopyalayın ya da her kod parçasını Ruby playground'da canlı deneyin - kurulum gerekmez.
Ruby hile sayfası SSS
Bu Ruby hile sayfası ücretsiz mi?
Block, proc ve lambda arasındaki fark nedir?
{ ... } veya do ... end ile geçirilen anonim bir kod parçasıdır - tek başına bir nesne değildir. Bir proc, bir block'u saklayabileceğiniz ve etrafta dolaştırabileceğiniz çağrılabilir bir nesnenin içine sarar. Bir lambda, argüman sayısını katı şekilde kontrol eden ve return'ü lambda'nın kendisinden dönmek olarak işleyen özel bir proc'tur; oysa sade bir proc, içinde bulunduğu metottan döner.Ruby'de semboller nedir?
:name gibi bir sembol, değiştirilemez, yeniden kullanılabilir bir tanımlayıcıdır. Aynı sembol her zaman bellekte aynı nesneyi gösterdiğinden, semboller hash anahtarları ve metot adları gibi şeyler için dizelerden daha hızlı ve bellek açısından daha verimlidir - bu yüzden hash'leri sıkça { name: "Ada" } şeklinde yazılmış görürsünüz.