12 puan yazan GN⁺ 2024-06-24 | 3 yorum | WhatsApp'ta paylaş
  • Ruby çoğunlukla Rails framework'ü ile ilişkilendirildiği için, bu dilin ne kadar güçlü olduğunu sık sık unutuyoruz
  • Ruby çok zengin ve olgun bir dil; özellikle karmaşık kabuk betikleri yazarken faydalı
  • Bu yazının amacı
    • kabuk betiği yazarken yararlı olan Ruby özelliklerini göstermek ve Bash ile Python'la karşılaştırmak
    • Bash betiklerini Ruby betikleriyle tamamen değiştirmek değil

Özellik 1: Harici komut çağırma

  • Ruby'de harici komut çağırırken backtick(```) kullanılır.
  • Örneğin, backtick kullanarak harici komutun çıktısını bir değişkende saklayabilirsiniz.
  • system veya popen da kullanılabilir.
    `ls`  
    
  • Komutun çıktısı bir değişkende saklanabilir.
    my_date=`date`  
    
Reklam

Özellik 2: Durum kodu

  • $? değişkeni kullanılarak son komutun durum kodu kontrol edilebilir
  • Bash'e çok benzer
    `true`  
    puts $? # 0  
    `false`  
    puts $? # 1  
    

Özellik 3: Tipli dil

  • Ruby statik tipli bir dil olmasa da tiplere sahiptir.
  • Nesne yönelimli bir dildir; her şey nesne olarak ele alınır.
  • Bash'ten farklı olarak, string dışındaki tipleri güvenli biçimde kullanabilirsiniz.
    total_lines = `wc -l my_file`.to_i # dosyadaki satır sayısını içeren tamsayı  
    half = total_lines.div 2           # tamsayı bölme  
    puts `head -n #{half} my_file`     # dosyanın yarısını yazdırır  
    

Özellik 4: Fonksiyonel bileşim

  • Ruby map, select (filtre), reduce, flat_map gibi fonksiyonel işlemleri metodlar olarak sunar.
  • Komut çıktısına map uygulanabilir.
    puts `ls`.lines.map { |name| name.strip.length } # dosya adlarının uzunluğunu yazdırır  
    
    Reklam

Özellik 5: Düzenli ifade eşleştirme

  • Ruby'de düzenli ifadeler bir tiptir ve bunları kullanan işlemler yerleşik olarak bulunur.
  • Örneğin, mevcut git branch adını alma yöntemi:
    current_branch_regex = /^\* (\S+)/  
    output_lines = `git branch`.lines  
    output_lines.each do |line|  
      if line =~ current_branch_regex # string ile düzenli ifade eşleştirme  
        puts $1                       # ilk grubun eşleşmesini yazdırır  
      end  
    end  
    

Özellik 6: Kolay thread'ler

  • Ruby'de birden fazla thread ile çalışmak çok kolaydır
  • Örneğin, birden fazla dosyayı aynı anda indirirken faydalıdır
    (1..10).map do |i|                       # 1'den 10'a kadar yineleme  
      Thread.new do  
        `wget http://my_site.com/file_#{i}`  # komut içinde değişken kullanılabilir  
      end  
    end.each { |thread| thread.join }        # do/end ve süslü parantezler aynı amaca hizmet eder  
    
    Reklam

Özellik 7: Yerleşik dosya ve dizin işlemleri

  • Ruby'de tüm dosya işlemleri File sınıfının metodları, dizin işlemleri ise Dir sınıfının metodları olarak sunulur.
  • Python'dan farklı olarak, dosya ve dizinlerle tutarlı bir şekilde çalışabilirsiniz.
    exists = File.exists? 'My File'           # boolean döndüren metodlar '?' ile biter  
    file_content = File.open('My File').read  
    File.delete 'My File'                     # belirsizlik yoksa parantezler isteğe bağlıdır  
    

Sonuç

  • Karmaşık kabuk betiklerini değiştirmek gerektiğinde Ruby'yi değerlendirmek önerilir
  • Elbette Bash'i tamamen bırakın denmiyor, ancak karmaşık işlerde Ruby daha iyi bir seçim olabilir
  • Python, Perl, JS vb. ile de yapılabilir ama kişisel olarak Ruby en tamamlanmış ve kullanımı en kolay dil gibi görünüyor

GN⁺ görüşü

  • Ruby, nesne yönelimli ve fonksiyonel programlamayı birlikte desteklediği için farklı programlama stillerine uyum sağlayabilir.
  • Python ile karşılaştırıldığında Ruby daha katı bir nesne yönelimli paradigma izler.
  • Kabuk betiği yazarken karmaşıklık arttıkça Ruby'nin avantajları daha belirgin hale gelir.
  • Ruby'nin thread işleme yetenekleri paralel işleri kolayca hayata geçirmeyi sağlar.
  • Dosya ve dizin işlemleri sezgisel ve tutarlı biçimde sunulduğundan üretkenliği artırır.

3 yorum

 
yangeok 2024-07-05

Betik yazımı için de kullanılsa fena olmazmış haha, sürümünü bilmiyorum ama Mac'e de varsayılan olarak kurulu geliyor değil mi,,?!

 
botplaysdice 2024-06-24

Bir zamanlar çok sevdiğim Ruby... Umarım bu şekilde bile olsa(?) çok sevilen bir dil olarak kalır.

 
GN⁺ 2024-06-24
Hacker News görüşleri
  • Ruby, Perl'den birçok shell script özelliğini miras aldı ve okunabilirliği kademeli olarak artırmaya yönelik seçenekler sunuyor.
  • binding.irb veya binding.pry kullanarak script içinde etkileşimli hata ayıklama yapılabiliyor.
  • Pathname, File'a göre daha doğal bir API sunuyor.
  • Backtick (`) ile basit shell komutları çalıştırılabiliyor, ancak daha karmaşık işler için Ruby'nin standart kütüphanesinden yararlanılabiliyor.
  • Ruby'nin thread'leri kullanımı kolay ve Parallel ile paralel işlem daha da pratik hale geliyor.
  • MacOS ile varsayılan gelen Ruby 2.6 kullanılabilir durumda, ancak daha güncel bir sürüme yükseltmek öneriliyor.
  • Ruby harika bir dil, ancak editör desteği Python'a kıyasla daha zayıf.
  • Shell komutlarını çalıştırmak için backtick (`) kullanmak verimsiz olabilir ve işletim sistemine göre farklı davranabilir.
  • Ruby'nin satır içi bağımlılık yönetimi özelliği çok kullanışlı ve Deno'ya benzer bir işlev sunuyor.
  • Ruby, güzel kod yazmayı mümkün kılıyor ve küçük script'ler yazmak için uygun.
  • Ruby, karmaşık otomasyon script'leri yazmada çok faydalı ve işleri bash veya PowerShell'e göre daha kolay hale getirebiliyor.
  • Ruby, büyük Rails monolith'leri kullanan şirketlerde hâlâ çok sayıda script ve araç yazımı için kullanılıyor.
  • İnternete erişimin olmadığı ortamlarda, temel dağıtımla gelen bir dili kullanmak önemli.
  • Ruby, shell otomatik tamamlama script'leri yazmakta faydalı ve hızlıca yardımcı araçlar üretmeye uygun. Rails ise MVP geliştirmek için elverişli.