PythonとRubyは通常、似た表現力とパワーを持つ近い従兄弟であると考えられます(ただし、歴史的な手荷物はかなり異なります)。しかし、Railsフレームワークの計り知れない成功は、Ruby自体がその基盤とする言語と本当に関係があると主張する人もいます。では、RubyがPythonよりもそのようなフレームワークに適しているのはなぜでしょうか。
PythonとRubyは通常、似た表現力とパワーを持つ近い従兄弟であると考えられます(ただし、歴史的な手荷物はかなり異なります)。しかし、Railsフレームワークの計り知れない成功は、Ruby自体がその基盤とする言語と本当に関係があると主張する人もいます。では、RubyがPythonよりもそのようなフレームワークに適しているのはなぜでしょうか。
回答:
おそらく2つの大きな違いがあります。
Railsはそれらを使用して効果を上げています。次に例を示します。
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
匿名のクロージャー/ラムダにより、ブロックを取る新しい言語機能を簡単にエミュレートできます。Pythonにはクロージャが存在しますが、使用するには名前を付ける必要があります。したがって、クロージャーを使用して新しい言語機能をエミュレートできるのではなく、クロージャーを使用しているという事実を明示する必要があります。
これは主にRailsで広く使用されています。具体的には、Rubyでは、クラスのコンテキストで任意のコードを実行できます。以下のスニペットは同等です。
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
どちらの場合も、次に行うことができます。
Bar.new.hello
「HELLO」と表示されます。このclass_eval
メソッドは文字列も受け取るため、クラスが作成されるときに、渡されたパラメーターに基づいて異なるセマンティクスを持つメソッドをその場で作成できます。
実際、この種のメタプログラミングをPython(および他の言語でも)で実行することは可能ですが、メタプログラミングは特別なプログラミングスタイルではないため、Rubyは足を踏み入れています。それはRubyではすべてがオブジェクトであり、コードのすべての行が直接実行されるという事実から流れています。その結果、Class
esはそれ自体がオブジェクトであり、クラス本体はself
Classを指しているので、クラスを作成しながらクラスのメソッドを呼び出すことができます。
これは、Railsで可能な宣言性の程度と、キーワードや新しいブロック言語機能のように見える新しい宣言機能を簡単に実装できる責任の大部分を占めています。
と主張した者たち
Railsフレームワークの計り知れない成功は、それが構築されている言語と本当に関係があります
(IMO)が間違っています。その成功はおそらく、技術力よりも巧妙で持続的なマーケティングのおかげです。Djangoは、Rubyの機能を必要とせずに、多くの分野(組み込みのキックアス管理者など)で間違いなくより良い仕事をします。私はRubyをまったく嫌うのではなく、Pythonに立ち向かうだけです!
Pythonコミュニティは、可能な限り最も単純で簡単な方法で物事を行うことが、エレガンスの最高の形であると信じています。Rubyコミュニティは、クールなコードを可能にする巧妙な方法で物事を行うことが、エレガンスの最高の形であると信じています。
Railsはすべて、特定の規則に従うと、魔法のように他の多くのことが起こります。これは、ルビの世界の見方には非常によく対応していますが、Pythonの方法にはあまり従っていません。
個人的には、ルビは私が「一貫した表現力」と呼ぶものを構成する多くの点でpythonより優れていると思います。たとえば、Rubyでは、joinは文字列を出力する配列オブジェクトのメソッドなので、次のようになります。
numlist = [1,2,3,4]
#=> [1, 2, 3, 4]
numlist.join(',')
#=> "1,2,3,4"
Pythonでは、joinは文字列オブジェクトのメソッドですが、結合するものとして文字列以外のものを渡すとエラーがスローされるため、同じ構成は次のようになります。
numlist = [1,2,3,4]
numlist
#=> [1, 2, 3, 4]
",".join([str(i) for i in numlist])
#=> '1,2,3,4'
時間の経過とともに、これらの小さな種類の違いがたくさんあります。
また、目に見えない論理エラーを導入するより良い方法を考えて、空白を大きくすることはできません。
本当の答えは、 PythonとRubyのどちらも Webフレームワークのより良い/悪い候補です。客観性が必要な場合は、両方にコードを記述し、コミュニティを含め、個人の好みに最も適したコードを確認する必要があります。
どちらか一方を主張するほとんどの人は、他の言語を真剣に使用したことがないか、個人的な好みに「投票」しています。
ほとんどの人は、何か新しいこと(MVC、テスト、ジェネレーターなど)を教えたり、何か良いこと(プラグイン、テンプレートなど)を教えたりするので、どちらに最初に接触しても問題はないと思います。私は以前PHPで開発していて、RubyOnRailsと連絡を取りました。Railsを見つける前にMVCについて知っていたとしたら、PHPを置き去りにすることはおそらくないでしょう。しかし、Rubyを使い始めたら、構文や機能などを楽しんだ。
もし私が最初にPythonとそのMVCフレームワークの1つを見つけていたら、代わりにその言語を賞賛するでしょう。
一部の人は、ActiveRecord(レールの主要コンポーネント)を可能にするために必要なメタプログラミングのタイプは、PythonよりもRubyで実行する方が簡単で自然であると言っています。そのため、私は個人的にはこのステートメントを確認できません。
私は手短にレールを使用しましたが、キャッチオール/インターセプターと動的評価/コードインジェクションを使用することで、他の一部のフレームワークよりもはるかに高い抽象化レベルで操作できるようになります(それ以前)。私はPythonのフレームワークについてはほとんどまたはまったく経験がありませんが、Pythonのフレームワークは同等の能力があると聞いています。また、PythonコミュニティはPythonicの取り組みをサポートおよび育成する上で素晴らしい仕事をしていると思います。
2つの答え:
a。Railsはルビーのために書かれたからです。
b。同じ理由で、CはRubyよりもLinuxに適しています
このすべてが完全に「私見」です
Rubyには1つのWebアプリケーションフレームワークがあるため、その言語用に宣伝されているのはそれだけです。
Pythonは当初からいくつかありますが、Zope、Twisted、Django、TurboGears(それ自体は他のフレームワークコンポーネントの混合)、Pylons(Railsフレームワークの一種のクローン)などです。それらはどれもpython-community-wideで「THE one to use」としてサポートされていないため、すべての「groundswell」は複数のプロジェクトに広がっています。
Railsのコミュニティサイズは、Railsのおかげで、単独で、または少なくとも大部分が占めています。
PythonとRubyはどちらも、Webアプリケーションフレームワークとして完全に機能します。YOU(およびあなたの潜在的な開発チーム)を好きなように使ってください。