Python dan Ruby biasanya dianggap sebagai sepupu dekat (meskipun dengan bagasi sejarah yang sangat berbeda) dengan ekspresi dan kekuatan yang serupa. Tetapi beberapa orang berpendapat bahwa kesuksesan besar kerangka kerja Rails benar-benar berkaitan dengan bahasa tempatnya dibangun: Ruby itu sendiri. Jadi mengapa Ruby lebih cocok untuk kerangka seperti itu daripada Python?
python
ruby-on-rails
ruby
web-frameworks
Victor Yan
sumber
sumber
Jawaban:
Mungkin ada dua perbedaan utama:
Ruby memiliki penutupan anonim yang elegan.
Rails menggunakannya untuk efek yang baik. Berikut contohnya:
class WeblogController < ActionController::Base def index @posts = Post.find :all respond_to do |format| format.html format.xml { render :xml => @posts.to_xml } format.rss { render :action => "feed.rxml" } end end end
Penutupan / lambda anonim membuatnya lebih mudah untuk meniru fitur bahasa baru yang akan mengambil blok. Di Python, closure ada, tapi harus diberi nama agar bisa digunakan. Jadi, alih-alih dapat menggunakan closure untuk meniru fitur bahasa baru, Anda dipaksa untuk menjelaskan fakta bahwa Anda menggunakan closure.
Ruby memiliki metaprogramming yang lebih bersih dan lebih mudah digunakan.
Ini digunakan secara ekstensif di Rails, terutama karena betapa mudahnya digunakan. Untuk lebih spesifiknya, di Ruby, Anda dapat mengeksekusi kode arbitrer dalam konteks kelas. Cuplikan berikut ini setara:
class Foo def self.make_hello_method class_eval do def hello puts "HELLO" end end end end class Bar < Foo # snippet 1 make_hello_method end class Bar < Foo; end # snippet 2 Bar.make_hello_method
Dalam kedua kasus tersebut, Anda kemudian dapat melakukan:
Bar.new.hello
yang akan mencetak "HALO". Itu
class_eval
Metode juga mengambil String, jadi itu mungkin untuk menciptakan metode on the fly, sebagai kelas sedang dibuat, yang berbeda semantik berdasarkan parameter yang berlalu dalam.Sebenarnya, dimungkinkan untuk melakukan metaprogramming semacam ini dengan Python (dan bahasa lain, juga), tetapi Ruby memiliki keunggulan karena metaprogramming bukanlah gaya pemrograman khusus. Ini mengalir dari fakta bahwa di Ruby, semuanya adalah objek dan semua baris kode dieksekusi secara langsung. Akibatnya,
Class
es itu sendiri adalah objek, badan kelasself
menunjuk ke Kelas, dan Anda dapat memanggil metode pada kelas saat Anda membuatnya.Ini sebagian besar bertanggung jawab atas tingkat deklaratifitas yang mungkin dilakukan di Rails, dan kemudahan dalam mengimplementasikan fitur deklaratif baru yang terlihat seperti kata kunci atau fitur bahasa blok baru.
sumber
Mereka yang membantahnya
adalah (IMO) salah. Keberhasilan itu mungkin lebih banyak disebabkan oleh pemasaran yang cerdas dan berkelanjutan daripada kecakapan teknis apa pun. Django bisa dibilang melakukan pekerjaan yang lebih baik di banyak area (misalnya admin kick-ass bawaan) tanpa memerlukan fitur Ruby apa pun. Saya sama sekali tidak meremehkan Ruby, hanya membela Python!
sumber
Komunitas python percaya bahwa melakukan sesuatu dengan cara yang paling sederhana dan mudah adalah bentuk keanggunan tertinggi. Komunitas ruby percaya melakukan sesuatu dengan cara cerdas yang memungkinkan kode keren adalah bentuk keanggunan tertinggi.
Rel adalah tentang jika Anda mengikuti konvensi tertentu, banyak hal lain yang secara ajaib terjadi untuk Anda. Itu cocok dengan cara ruby dalam memandang dunia, tetapi tidak benar-benar mengikuti cara python.
sumber
Apakah debat ini merupakan debat baru "vim versus emacs"?
Saya seorang programmer Python / Django dan sejauh ini saya tidak pernah menemukan masalah dalam bahasa / kerangka kerja itu yang akan mengarahkan saya untuk beralih ke Ruby / Rails.
Saya dapat membayangkan bahwa itu akan sama jika saya berpengalaman dengan Ruby / Rails.
Keduanya memiliki filosofi yang sama dan melakukan pekerjaan dengan cara yang cepat dan elegan. Pilihan yang lebih baik adalah apa yang sudah Anda ketahui.
sumber
Secara pribadi, saya menemukan ruby lebih unggul dari python dalam banyak hal yang terdiri dari apa yang saya sebut 'ekspresifitas yang konsisten'. Misalnya, di ruby, join adalah metode pada objek array yang mengeluarkan string, jadi Anda mendapatkan sesuatu seperti ini:
numlist = [1,2,3,4] #=> [1, 2, 3, 4] numlist.join(',') #=> "1,2,3,4"
Dalam python, join adalah metode pada objek string tetapi yang memunculkan kesalahan jika Anda meneruskannya selain string sebagai hal yang akan digabungkan, jadi konstruksi yang sama adalah seperti:
numlist = [1,2,3,4] numlist #=> [1, 2, 3, 4] ",".join([str(i) for i in numlist]) #=> '1,2,3,4'
Ada banyak perbedaan kecil yang bertambah seiring waktu.
Juga, saya tidak bisa memikirkan cara yang lebih baik untuk memperkenalkan kesalahan logika yang tidak terlihat selain membuat spasi kosong menjadi signifikan.
sumber
Jawaban sebenarnya adalah baik Python atau Ruby adalah kandidat yang lebih baik / lebih buruk untuk kerangka kerja web. Jika Anda menginginkan objektivitas, Anda perlu menulis beberapa kode di keduanya dan melihat mana yang paling sesuai dengan preferensi pribadi Anda, termasuk komunitas.
Kebanyakan orang yang memperdebatkan satu atau lainnya tidak pernah menggunakan bahasa lain secara serius atau 'memilih' untuk preferensi pribadi mereka.
Saya kira kebanyakan orang memutuskan dengan siapa mereka pertama kali melakukan kontak karena itu mengajarkan mereka sesuatu yang baru (MVC, pengujian, generator, dll.) Atau melakukan sesuatu yang lebih baik (plugin, templat dll). Saya biasa mengembangkan dengan PHP dan berhubungan dengan RubyOnRails. Jika saya telah mengetahui tentang MVC sebelum menemukan Rails, saya kemungkinan besar tidak akan pernah meninggalkan PHP. Tetapi begitu saya mulai menggunakan Ruby, saya menikmati sintaks, fitur, dll.
Jika saya telah menemukan Python dan salah satu kerangka MVC-nya terlebih dahulu, saya kemungkinan besar akan memuji bahasa itu!
sumber
Python memiliki banyak kerangka kerja mirip Rails. Ada begitu banyak lelucon sehingga selama pembicaraan umum di PyCon setidaknya satu kerangka web akan melihat cahaya.
Argumen bahwa pemrograman meta Ruby akan membuatnya lebih cocok adalah IMO salah. Anda tidak perlu metaprogramming untuk framework seperti ini.
Jadi saya pikir kita dapat menyimpulkan bahwa Ruby tidak lebih baik (dan kemungkinan tidak lebih buruk) dari Python dalam hal ini.
sumber
Karena Rails dikembangkan untuk memanfaatkan set fitur Ruby.
Pertanyaan serupa yang tidak biasa adalah "Mengapa Python lebih cocok untuk Django daripada Ruby?".
sumber
Saya kira kita seharusnya tidak membahas fitur bahasa itu sendiri, melainkan aksen yang dibuat komunitas terkait pada fitur bahasa. Misalnya, dengan Python, membuka kembali kelas sangat mungkin dilakukan tetapi tidak umum; di Ruby, bagaimanapun, membuka kembali kelas adalah sesuatu dari praktik sehari-hari. hal ini memungkinkan kustomisasi kerangka kerja yang cepat dan langsung dengan kebutuhan saat ini dan menjadikan Ruby lebih disukai untuk kerangka kerja mirip Rails daripada bahasa dinamis lainnya. Oleh karena itu jawaban saya: penggunaan umum kelas pembukaan kembali.
sumber
Beberapa orang mengatakan bahwa jenis metaprogramming yang diperlukan untuk membuat ActiveRecord (komponen kunci rel) mungkin lebih mudah dan lebih alami untuk dilakukan di ruby daripada di python - Saya belum tahu python;), jadi saya pribadi tidak dapat mengkonfirmasi pernyataan ini.
Saya telah menggunakan rel secara singkat, dan penggunaan catchalls / interseptor dan evaluasi dinamis / injeksi kode memungkinkan Anda untuk beroperasi pada tingkat abstraksi yang jauh lebih tinggi daripada beberapa kerangka kerja lainnya (sebelum waktunya). Saya memiliki sedikit atau tidak ada pengalaman dengan kerangka kerja Python - tetapi saya pernah mendengarnya sama-sama mampu - dan bahwa komunitas python melakukan pekerjaan yang hebat dalam mendukung dan membina usaha pythonic.
sumber
Menurut saya sintaksnya lebih bersih dan Ruby, paling tidak bagi saya, jauh lebih "menyenangkan" - sama subjektifnya dengan itu!
sumber
Dua jawaban:
Sebuah. Karena rel ditulis untuk ruby.
b. Untuk alasan yang sama C lebih cocok untuk Linux daripada Ruby
sumber
Semua ini BENAR-BENAR "IMHO"
Di Ruby ada SATU kerangka aplikasi web, jadi itu adalah satu-satunya kerangka kerja yang diiklankan untuk bahasa itu.
Python telah memiliki beberapa sejak awal, hanya untuk beberapa nama: Zope, Twisted, Django, TurboGears (itu sendiri merupakan campuran dari komponen kerangka kerja lainnya), Pylons (semacam tiruan dari kerangka Rails), dan seterusnya. Tak satu pun dari mereka yang didukung komunitas python-wide sebagai "THE one to use" sehingga semua "groundswell" tersebar di beberapa proyek.
Rails memiliki ukuran komunitas semata-mata, atau setidaknya sebagian besar, karena Rails.
Baik Python dan Ruby sangat mampu melakukan pekerjaan sebagai kerangka aplikasi web. Gunakan yang ANDA (dan tim pengembangan potensial Anda) suka dan dapat menyelaraskan.
sumber