web-dev-qa-db-ja.com

Rubyの学習中にPython開発者が知っておくべきことは何ですか?

私はPythonプログラマーで、約18か月間、1つのインターンシップといくつかのサイドプロジェクトで構成されています。自分自身は言語にかなり慣れていると思います。

しかし、プログラミングの分野ではRubyに多くの注意が払われているようですが、Python=にはあまり注意が払われていません。

それで、Rubyを学ぶ上で、Rubyの単なる悪い習慣であるPythonicなものがあるでしょうか?何に注意し、何を避けるべきですか?

16
C J

私はPlone/Zopeコンサルタントだった2003-5年にPythonをしました。その後、2006年にRubyの選択を始めました。私は振り返ったことがありません。プログラミング言語や文化が違えば人も違和感を感じると思いますが、私にとってはRubyはPythonよりもずっといいと感じています。

私は個人的に、Rubyと比較して、Pythonは信頼性の高い主力製品であり、偶然にも穏やかで穏やかなものだと思います。 Rubyはもっと楽しいです。これは見栄えの良い言語であり、その実践者を魅了し続ける多くの楽しくてファンキーなことをするように作ることができます。 Pythonの人々がRubyを危険すぎると攻撃していると聞いたことがあります。クラスを再度開いて、そのようなワイルドで無責任なことを行うのは簡単すぎると言っています。しかし、それは私にとってRubyをアクションアドベンチャーコメディロマンスのように感じさせるものの一部です。それとは対照的に、PythonはIkeaの家具に似ています。快適で、快適で、信頼できます。しかし、驚くことはなく、息を呑むことはありません。

Rubyの2つの優れた点は、私の観点から、RubyとPythonを明確に区別する2つの点です。まず、RubyはPerlの影響を強く受けます。 Pythonは反Perlであることを誇りに思っているようです。しかし、Perlから借りたものRubyは、実用的な価値が非常に高くなります。たとえば、正規表現を見てみましょう。 Rubyでは、自然に正規表現を記述できます。 _if mystring =~ /^\s+hello Word!/ ..._。なぜなら、Pythonは、すべてを一様に予測可能な構文に従うようにすることについて非常に肛門だからです。 Rubyでは、_input = STDIN.read_を使用してSTDINをすぐに取得できます。 Pythonでは、_import sys_、次にsys.stdin.read()を実行する必要があります。これらはほんの2つの例にすぎません。Perlから距離を置き、予想どおりに規則正しくなるようにするPythonの取り組みは、Rubyがそれぞれの場合に正しいと感じることを実行する意欲に負けています。

RubyをPythonと区別するもう1つの点は、RubyがLISPに非常に近いのに対し、Pythonは命令型プログラミング言語であることです。これはRubyにとって有利な点です。

Rubyには、Pythonよりも少ないコードでより多くのことを実行できるRubyのLISPに似た機能がたくさんあります。たとえば、Rubyのすべてのステートメントと制御構造は値を返します。returnステートメントを使用しなくても、Rubyで回避できます。 ifステートメントでも値に評価されるため、次のようなものを書くことができます

_result = if output == 'hello'
           [some code here]
           "world"
         else
           [some other code here]
           "there"
         end
_

Pythonでは、次のように記述する必要があります

_if output == "hello":
  [some code here]
  result = "world"
else:
  [some other code here]
  result = "there"
_

Pythonでは、_result =_を2回入力します。それはそれほどではありませんDRY(自分を繰り返さないでください)。 LISPのような品質のため、RubyがDRYよりもPythonになる例が多くあります。 Rubyの作成者であるMatzは、LISPの出身です。

Rubyは、メタプログラミング(動的プログラミングとも呼ばれます)におけるPythonのお尻も蹴る、と言う人もいます。 Python人々は、メタプログラミングは危険すぎると言うか、理論的にはPythonでできるすべてのメタプログラミングをRubyで実現できると言います。しかし、誰もが同意することの1つは、メタプログラミングはRubyよりもPythonで一般的ではないことです。メタプログラミングは旅なので、それはあまりにも悪いことです。

結局のところ、1日の終わりにRubyとPythonの両方が仕事を成し遂げることができるのはおそらく本当だと思います。 CやJavaと比較すると、RubyとPythonはほとんど同じです。それらは表現力豊かで生産性の高い高級言語です。

つまり、それはあなたの個性に要約されます。

物事が予測可能で、定期的で、安全であることが好きですか?命令型のプログラミングが好きですか?いつかGoogleで働きたいですか? Perlは地獄の無秩序なスポーンだと思いますか? Pythonに固執する。

プログラミングの結果を達成するための絶対的に最も簡潔な方法を見つけることに大きな喜びを感じますか?規則性と均一性に飽きていますか?自分だけのスタイルでコードを書く自由があり、自分のクールなトリックを思いつくためのスペースがたくさんありますか? CよりもLISPの方が好きですか。 Perlの画期的なソフトウェアプログラミングへの貢献に大きな賞賛を感じますが、それが少し不可解で醜いものになりたいと思っているだけですか?他の人が詩について考えるようなコードを思いますか? Rubyを試してください。

31
dan

場合によります。

私にとってpythonはRubyよりもはるかに簡単に理解できます。さらに、両方の言語の目的は異なります。

Pythonは、多くの低レベルのファンシーなものを備えたより古典的な言語であり、たとえばCと比較して、クリーンで簡単に保つことができます。 Pythonには、Rubyの野心はありません。Rubyには、より多くの高レベルの機能があります。

Rubyを学ぶのに害はありませんが、新しいことを発見しますが、Pythonは、Cの成功をもたらした単純なプログラミングパラダイムに近く、生産性を大幅に向上させます。 Rubyは、プログラミングの一般的な概念にさらに踏み込みたい人向けです。Schemeとすべての「優れた」言語です。

6
jokoon

短い答え:はい、はい。

新しい言語を学ぶことはほとんど常に有用であり、特にRuby Railsがまだ非常に人気があるためです。そして、知っているPythonを使用すると、Rubyを簡単に取得できます。構文にはいくつかの違いがあり、命名規則も異なりますが、共通点もたくさんあります。

これは大きな時間の投資ではありません。ツールボックスにツールを追加することは常にメリットがあるので、ぜひお試しください。

(私はPythonを約10年間使用しており、Ruby昨年取得しました。現在RoRプロジェクトでフルタイムで働いています)

3
shang

学ぶべきかRuby?はい。

新しい言語を学ぶことは常に価値があり(特に、それがあなたが知っているものとは異なるプログラミングパラダイムを実施する場合)、他の言語でプログラミングしているときでさえも、あなたはより熟練することがあります。たとえば、LISPから知っている関数型プログラミングのほとんどをピックアップし、必要なときにそれをPythonおよびRubyに適用します。

難しいですか? Pythonを学んだなら、確かにRubyも学べます。

また、今あなたが仕事を探しているときにも役立ちます。それは、テクノロジーに興味があり、自分で学ぶことができることを示しています。

RubyとPython on c2.com の間には良い比較があります。

すべてにニッチがあります。たとえば、Python(Django)はGoogleApp Engineの第一級市民ですが、多くのバイオインフォマティクスプロジェクトの言語または選択肢です。Pythonにはたくさんあります市場価値(Pythonで多くのことをしたからといって、多くの未承諾の仕事の見込みが出ます)がそうですが、Ruby-さまざまな分野でそうです。ここで聞いたことは間違いないでしょう。何度も、それは常により多くの言語を学ぶのに役立つので、はい、Rubyを学びます。それは複雑ですか?利用可能な言語とフレームワークは互いに類似しているため、COBOLを学ぶよりもはるかに複雑ではありません。 Rubyの gems およびpythonの pip

言語はツールであり、目的としてのすべてのツールであることを忘れないでください。知っているツールが多ければ多いほど、ツリーハウスをより速く、より簡単かつ正確に構築できます。

2
Arcege