Kabuk betikleri için harika bir dil: Ruby
(lucasoshiro.github.io)- 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.
systemveyapopenda kullanılabilir.`ls`- Komutun çıktısı bir değişkende saklanabilir.
my_date=`date`
Ö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_mapgibi fonksiyonel işlemleri metodlar olarak sunar. - Komut çıktısına
mapuygulanabilir.puts `ls`.lines.map { |name| name.strip.length } # dosya adlarının uzunluğunu yazdırır
Ö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
Özellik 7: Yerleşik dosya ve dizin işlemleri
- Ruby'de tüm dosya işlemleri
Filesınıfının metodları, dizin işlemleri iseDirsı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
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,,?!
Bir zamanlar çok sevdiğim Ruby... Umarım bu şekilde bile olsa(?) çok sevilen bir dil olarak kalır.
Hacker News görüşleri
binding.irbveyabinding.prykullanarak script içinde etkileşimli hata ayıklama yapılabiliyor.Pathname,File'a göre daha doğal bir API sunuyor.Parallelile paralel işlem daha da pratik hale geliyor.