JavaとPythonを比較
JavaとPythonを比較
2011年4月18日
1. 難易度的に。 Python は Java よりもはるかに単純です。
2.開発スピード。 Python は Java よりもはるかに優れています
3. 実行速度。 Java は標準の Python よりもはるかに優れており、pypy と cython は Java に追いつくことができますが、どちらもプロジェクトを実行できるほど成熟していません。
4.利用可能なリソース。 Java リソースはたくさんありますが、Python リソース、特に中国語リソースはほとんどありません。
5. 安定性。 Python 3 と 2 には互換性がないため、ある程度の混乱が生じ、多数のクラス ライブラリで障害が発生します。 Java は企業サポートがあるため、はるかに安定しています。
6. オープンソースですか? Python は最初から完全にオープンソースでした。 Java は sun によって開発されていますが、現在では GUN 用の Openjdk が利用できるので、心配する必要はありません。
7. コンパイルまたは解釈します。どちらも解釈的なものです。
Cはマニュアルトランスミッション車(コンパイル言語)、JavaやPython(インタープリタ言語)はオートマチックトランスミッション車のようなものだと理解しています。一番速い車はマニュアルトランスミッションですが、運転が苦手な人はオートマチックトランスミッションの方が速いです。
Knoさんの記事でプログラミング言語の選択について「まずニーズを決めなさい」、言語の単純さ、複雑さで決めるな。本当に役に立つと思うプログラムを書けることによってのみ、満足感を得て学習を続けることができます。
では、JavaやPythonはどのような環境に適しているのでしょうか?これは、sourceforge.net から見ることができます:
最も有名で実績のある一般的なアプリケーションは、基本的に C++ で書かれています。たとえば、emule、7-zip、WinSCP、FileZilla などです。
最も有名なOpenOfficeなど、一部はJavaで開発されています。
PidginやFireBirdのようなPythonライターは非常に少ないです。
開発言語のランキング(この言語でどれだけのプログラムが開発されているか)は以下の通りです。
#Java46,202
#C++36,895
#php30,048
#C28,075
#C#13,476
# Python13,379
# Javascript11,285
# Perl9,216
よりまともです。
Java は GNU と商業分野の両方で最も広く使用されている言語であることがわかります。 C は主にシステムの最下層を構築するために使用されます。 C++ と Java は、中間アプリケーション層の構築に使用されます。リソースが十分な場合は、実行速度を重視して C++ 開発が選択され、そうでない場合は、開発速度を重視して Java 開発が使用されます。 Python はあらゆる面で Java よりも優れており、次世代言語と言えます。しかし、最も物議を醸しているのは、Pure Python の速度が Java よりもはるかに遅いことと、その安定性が批判されている点です。これまでのところ、Python は主に商用レベルで他の言語 (主に C/C++) のクラス ライブラリをバインドするための接着言語として使用されています。 GNU 分野では、主に小規模アプリケーションやパーソナライズされたアプリケーションに限定されます。リバース エンジニアリング (ハッキング) アプリケーション。
なぜJavaはサーバー側では広く使われているのに、クライアント側ではあまり使われていないのでしょうか?サーバー側の計算量が少ないからでしょうか?これは、C++ と比較して、Java の速度がまだ許容できることを示していると思います。許容できないのは、JRE プラットフォームと、JRE プラットフォームの起動時にスタックする瞬間です。以前、Javaで書かれたプログラムのパフォーマンスは低いと思っていました。
Python ユーザーがよく言うことの 1 つは、Python が遅いわけではない。Python は実行時に多数の C ライブラリを呼び出すからであり、C は非常に高速だからです。逆に考えると、これは、どの言語でも C ライブラリを呼び出すことができるという事実を反映しています。ライブラリ全体が Python で構成されている場合、その動作効率は...言及しないでください。他の人のライブラリをプログラミングに常に使用できるわけではありません。
----
Python プログラミング言語を現在使用するには、継続的な学習が必要です。以下では、関連知識をより効果的に学ぶ方法を詳しく見ていきます。最近、wxPython に基づく GUI アプリケーションのコードを調べています。これは約 45.5KLOC ですが、これには使用するライブラリ (Twisted など) は含まれていません。
このコードは、Python を初めて使用する Java 開発者によって書かれているため、重大なパフォーマンスの問題 (起動時間 30 秒など) があります。コードをチェックすると、Java では意味をなすが、Python プログラミング言語では受け入れられにくいものがたくさん書かれていることがわかりました。それは「Python が Java よりも遅い」からではなく、Java では不可能なことであっても、Python では同じ目標を達成するためのより便利な方法があるからです。
それで、悲しいことに、彼らは半分の労力で半分の結果を得ており、彼らが書くコードは Python プログラミング言語で実装されるべきものよりもはるかに遅いということです。以下、いくつかの例を見てみましょう:
◆Javaの静的メソッドをPythonのクラスメソッドに変換することはできません。ああ、確かに、多かれ少なかれ同じ効果が得られますが、クラス メソッドの目的は実際には、Java では通常は不可能なこと (デフォルトではないデフォルト関数の継承など) を実行することです。 Java 静的メソッドの慣用的な変換は、通常、クラス メソッドや静的メソッドではなく、モジュール レベルの関数に変換されます。 (そして、静的定数はモジュールレベルの定数に変換される必要があります。)
これはパフォーマンスの問題ではありませんが、Python プログラミング言語のプログラマーが Foo.someMethod を呼び出したい場合、Foo.Foo.someMethod のようなメソッドを使用する必要があります。もしそうなら、彼は気が狂ってしまうだろう。注意しなければならない点が 1 つあります。クラス メソッドの呼び出しには追加のストレージ スペースが必要ですが、静的メソッドまたは関数の呼び出しにはその必要はありません。
ちなみに、これらの Foo.Bar.Baz のプロパティ チェーン自体は、それ自体ではありません。 Java では、これらのドット名はコンパイラによって検索され、Python では実行時に検索プロセスが実行されます (Python では、注意すべき点が 1 つあります)。 「タイル構造は入れ子構造よりも優れている」ということですが、パフォーマンスよりも「読みやすさ」、そして「複雑よりもシンプルが優れている」ということかもしれません。)
◆ switch ステートメントを使用したいですか?大量の if-then ステートメントではなく、ハッシュ テーブルです。 Java の switch ステートメントではなく、文字列が含まれる多数の if-then ステートメントを使用したい場合は、やはりハッシュ テーブルになります。 CPython 辞書は、私たちが知る限り、この分野で最も優れたパフォーマンスを発揮するものの 1 つであると考えられるハッシュ テーブルを使用して実装されています。あなたがグイド、ティム・ピーターズ、レイモンド・ヘッティンガーの私生児で、遺伝子強化されていない限り、あなたが自分で書くコードはこれより優れたものにはなりません。
◆xmlは答えではありません。それも問題ではありません。 Jamie Zawinski の言葉を正規表現で言い換えると、「問題に遭遇すると、『わかった、XML を使おう』と考える人もいます。そのとき、彼らは 2 つの問題に直面します
これは、Java とは異なる状況です。」なぜなら、XML は Java コードに比べて柔軟で柔軟だからです。しかし、Python コードと比較すると、XML はアンカーであり負担になります。 Python では、XML はコア機能ではなく連携するために使用されます。その必要がないためです。 Java では、XML を使用すると、ドメイン固有言語を実装し、「コーディングなしで」アプリケーションの適応性を向上させることができるため、救世主となる可能性があります。 Java では、エンコードは再コンパイルを意味するため、エンコードを回避することは大きな利点です。ただし、Python では通常、XML よりもコードを記述する方が簡単です。また、Python は XML よりもはるかに高速にコードを処理します。 (それだけでなく、XML 処理コードを作成する必要があり、Python がすでにコードを作成しています。)
Java プログラマーであれば、それを実行するかどうかを直感的に考える必要はありません。 Python コアでは XML がアプリケーションの一部として使用されます。既存の XML 標準を実装していない場合、または何らかの入出力形式を確立していない場合、または情報交換のために何らかの XML エディタまたは処理ツールを構築していない場合は、それを行わないでください。絶対にやらないでください。それについては考えないでください。さて、その XML スキーマを捨てて、手を自由にしましょう。あなたのアプリケーションやプラットフォームが Python プログラミング言語開発者によって使用されることになっている場合、開発者は、作業に XML を使用する負担を加えないことに感謝するでしょう。
(ここでの唯一の例外は、対象読者が何らかの理由で実際に XML を使用する必要がある場合です。たとえば、彼らは Python を学ぶことを拒否しますが、XML を使用する場合はお金を払います。計画は、彼らに優れた GUI を提供することです。 XML を編集する場合、XML GUI が別の人によって作成され、それを無料で使用する権利が得られます。ただし、XML を使用する必要があるいくつかのまれなアーキテクチャ上の理由がある場合、それらはあなたのプログラムには適用されません。疑問がある場合は、上級 Python 開発者にユースケースを説明してください。あるいは、あなたが厚かましいので、笑われるのを気にしない場合は、Lisp プログラムでなぜ XML を使用する必要があるのかを尋ねてみてください。)
◆ゲッターズ。そしてセッターは邪悪です。悪魔です、悪魔です! Python プログラミング言語オブジェクトは Java Beans ではありません。ゲッターとセッターを作成せず、「プロパティ」に組み込みます。単純なアクセスよりももう少し複雑な機能が必要であることが証明できるまでは意味がありません。そうでない場合は、ゲッターとセッターを作成しないでください。これらは CPU 時間の無駄であり、さらに重要なことに、プログラマーの貴重な時間の無駄です。コードやテストを書く人だけでなく、コードやテストを読んで理解する人にも役立ちます。
Java では、ゲッターとセッターを使用する必要があります。パブリック フィールドでは、気が変わって後でゲッターとセッターを使用することができないためです。したがって、Java では、これらの「雑用」を事前に避けたほうがよいでしょう。Python では、クラスに影響を与えることなく、いつでも通常の機能から始めて気が変わることができるため、これは愚かです。したがって、ゲッター メソッドとセッター メソッドを作成しないでください。
◆コードの重複は通常、Java では避けられない災害であり、少し変更するだけで同じメソッドを何度も書かなければならないことがよくあります (通常、これは静的型の制約が原因です)。 Python でこれを行う必要も価値もありません (パフォーマンスを必要とするいくつかの関数をインライン化する必要があるいくつかの特定の場合を除いて)。ほとんど変更を加えずに同じコードを何度も書いていることに気付いた場合は、クロージャについて学ぶ必要があります。それらは実際にはそれほど怖いものではありません。
Python プログラミング スキルの概要
柔軟な Python プログラミング言語の簡単な紹介
短期間で Python プログラミング言語をマスターする
Python プログラミング言語の歴史の紹介
Python プログラミング言語の説明
これがあなたがしなければならないことです。関数を含む関数を作成します。ここでの内部関数は、繰り返し書きたい関数のテンプレートですが、その中にさまざまな状況に応じて変数を使用する関数を追加します。外側の関数は、発生したばかりの変数をパラメーターとして受け取り、結果として内側の関数を返します。その後、少し異なる関数を作成するたびに、外側の関数を呼び出して、「重複」関数に表示させたい名前に戻り値を代入するだけです。この動作方法を変更する必要がある場合は、1 か所、つまりテンプレートを変更するだけで済みます。
私がこれまで見てきたアプリケーション/プラットフォームの中で、この手法を使用して数百行の重いコードを削除する非常に簡単なプログラムは 1 つだけです。実際、開発者は特別な定型ファイルを使用してこのプラットフォーム用のプラグインを開発するため、サードパーティの開発者にとっては多くのコードが節約され、また、それらのプログラマーにとっても学習が簡単になります。
これは、Java -> Python プログラミング言語に対する考え方の変更の氷山の一角にすぎませんが、プログラムの詳細を深く掘り下げることなく、正しく変更を加えることができます。基本的に、Java をしばらく使用したことがあり、Python を初めて使用する場合は、自分の直感をあまり信頼しないでください。あなたの本能は Python ではなく Java によって調整されています。一歩下がって、最も重要なことは、あまりにも多くのコードを書くのをやめるということです。
これを行うには、Python がさらに必要であると自分自身に感じさせてください。あたかも Python が、何の努力もせずに何でもできる魔法の杖であるかのように装ってください。 「Python は私の問題をどのように解決しますか?」「私の問題に最も似ている Python 言語の機能は何ですか?」と尋ねてください。必要なものが何らかの形ですでに存在している場合は驚くでしょう。実際、この現象は経験豊富な Python プログラマーの間でもよく見られるため、Python コミュニティにはその名前が付けられています。私たちがそれを「GUIDO のタイム マシン」と呼んでいるのは、自分で使いこなす前は、それが必要なものを手に入れる唯一の方法であるように思えることがよくあるからです。
したがって、Python プログラミング言語を使用したときに Java を使用した場合よりも少なくとも 10 倍の生産性が感じられない場合は、いくつかの変更を加えたほうがよいでしょう (おそらく、そうしている可能性があります)。タイムマシンを使うのを忘れています) (同時に、まだ Java IDE が恋しい場合は、次のように考えることができます。なぜなら、あなたが書いた Python プログラムは必要以上に複雑だからです。)
上記はJava と Python の比較 その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。