Python vs Java: 何が違うのか?

Python vs Java: 何が違うのか?

  • ITOps・DevOps
6分で読めます 更新日 Nov 25, 2020

ポイント: PythonとJavaは異なるプログラミング言語で、それぞれ独自の利点があります。Pythonはユーザーフレンドリーでデータサイエンスに優れており、Javaはウェブ開発とパフォーマンスに優れています。

  • Pythonの簡潔な構文は学習の容易さと迅速な開発を促進します。
  • Javaの静的型付けはパフォーマンスとデバッグ能力を向上させます。

PythonはJavaよりも人気が高くなっています。Googleトレンドでは、2017年にPythonの人気がJavaを上回ったことが示されています:

(ソース)

この傾向は、Pythonの実験的な使用が非常に優れていることと、Javaが生産コードにより適していることによるものです。実験が生産コードよりも多いのです。

Javaは静的型付けのコンパイル言語であり、Pythonは動的型付けのインタプリタ言語です。この単一の違いが、Javaを実行時に速くし、デバッグを容易にしますが、Pythonは使いやすく、読みやすいのです。

Pythonはそのコミュニケーション能力のおかげで人気を得ており、人々はそれをより簡単に理解します。それにより、Pythonのライブラリは膨大であり、新しいプログラマーはゼロから始める必要がありません。Javaは古く、依然として広く使われているため、たくさんのライブラリとサポートコミュニティがあります。

では、これらを詳細に見て、PythonとJavaの違いを示すいくつかのコード例を見てみましょう。

Pythonの概要

Pythonは1991年に最初にリリースされました。これはインタプリタ型の高水準汎用プログラミング言語です。オブジェクト指向です。

Guido van Rossumによって設計されたPythonは、実際にはコードの可読性を中心にした設計哲学を持っています。Pythonコミュニティは、お互いのコードをPythonicであるかどうかに基づいて評価します。

Pythonを使用する時

Pythonのライブラリにより、プログラマーは迅速に開始できます。ほとんどの場合、ゼロから始める必要はありません。プログラマーが機械学習に飛び込もうとする場合、そのためのライブラリがあります。美しいチャートを作成したい場合、そのためのライブラリがあります。CLIに進捗バーを表示したい場合、そのためのライブラリがあります。

一般的に、Pythonはプログラミング言語のレゴです。使い方の指示がある箱を見つけて作業を始めます。ゼロから始める必要がほとんどありません。

その可読性のおかげで、Pythonは次のことに優れています:

  1. 新しいプログラマー
  2. アイデアの迅速な表現
  3. 他者とのコード共有

Javaの概要

Javaは古く、一般的な目的のプログラミング言語で、クラスを利用し、Pythonと同様にオブジェクト指向です。

JavaはJames GoslingによってSun Microsystemsで開発され、1995年にSun MicrosystemsのJavaプラットフォームの一部としてリリースされました。Javaはウェブ体験をシンプルなテキストページから、ビデオやアニメーションのあるページに変革しました。

クラス

Javaを使用する時

Javaはどこでも実行できるように設計されています。コンパイルされたコードを解釈するためにJava仮想マシン(JVM)を使用します。JVMは独自のインタプリタおよびエラーチェッカーとして機能します。

Sun Microsystemsとの結びつきにより、Javaは最も広く使用されていたサーバーサイド言語でした。現在はそうではありませんが、Javaは長い間君臨し、大きなコミュニティを持っているため、依然として多くのサポートを受けています。

Javaでのプログラミングは簡単である場合があります。なぜなら、Javaにはその上に構築された多くのライブラリがあり、特定の目的のために既に書かれたコードを見つけるのが簡単だからです。

PythonとJavaを使用しているのは誰か?

Pythonは新しいプログラマーやジュニア開発者がデータサイエンスの役割に入る際によく使用されます。大規模な機械学習ライブラリであるTensorFlowとpyTorchは、どちらもPythonで書かれています。

Pythonには、PandasとDaskを使用した優れたデータ処理ライブラリがあり、MatplotlibやSeabornなどのパッケージを使用した良好なデータ視覚化機能があります。

Javaはウェブ開発に多く使用されており、シニアレベルのプログラマーの間でより一般的です。非同期プログラミングを可能にし、適切な自然言語処理のコミュニティも持っています。

両方の言語はAPIの相互作用や機械学習に使用できます。Javaはウェブアプリケーションを構築するためにより発展しています。PythonのFlaskライブラリは、PythonベースのUIの基本を構築することしかできませんが、APIエンドポイントを持つPythonバックエンドを作成するのには最適です。

コードにおけるPythonとJava

JavaとPythonがどのように異なるか見てみましょう。

構文

Pythonはインタプリタ型言語なので、その構文はJavaよりも簡潔で、始めやすく、プログラムをすぐにテストするのが簡単です。ターミナルに直接行を入力できますが、Javaはプログラム全体をコンパイルする必要があります。

pythonと入力し、次に3+2と入力すると、コンピューターは5と応答します。

    python

3+2
5

Javaでこれを考えてみてください。Javaにはコマンドラインインタプリタ(CLI)がないため、上記のように5を印刷するには、完全なプログラムを書いてコンパイルする必要があります。Print5.javaは次のとおりです:

    public class Print5 {

       public static void main(String[] args) {
        System.out.println("3+2=" + (Integer.toString(3+2)));
       }
}

これをコンパイルするには、javac Print5.javaと入力し、java Print5で実行します。

    java Print5
3+2=5

Javaでは、5を印刷するために完全なプログラムを作成する必要がありました。それにはクラスとmain関数が含まれており、Javaがどこから始めるかを指示します。

Pythonにもmain関数がある場合がありますが、通常は引数を渡したいときに行います。それは次のように見えます:

    def main():
  print('3+2=', 3+2)

if __name__== "__main__":
  main()

Pythonのコードは上から下へ実行されますが、どこから始めるべきかを指示するまでそうします。しかし、Javaのようにクラスを作成することもできます。このように:

Pythonクラス

    class Number:
  def __init__(self, left, right):
      self.left = left
      self.right = right

number = Number(3, 2)

print("3+2=", number.left + number.right)

クラスNumberには2つのメンバ変数leftとrightがあります。デフォルトのコンストラクタは__init__です。私たちはコンストラクタnumber = Number(3, 2)を呼び出すことでオブジェクトをインスタンス化します。次に、クラス内の変数をnumber.leftやnumber.rightとして参照できます。このように直接変数を参照することはJavaでは好ましくありません。代わりに、以下のようにgetterおよびsetter関数が使用されます。

同じことをJavaでどのように行うかは次のとおりです。見ての通り、これは冗長であり、これが人々がJavaに対して持っている主な不満です。以下でこのコードのいくつかを説明します。

getterおよびsetter関数を持つJavaクラス

    class PrintNumber {
      int left;
      int right;

      PrintNumber(int left, int right) {
          this.left = left;
          this.right = right;
      }

      public int getleft() {
          return left;
      }
      public int getRight() {
          return right;
      }
}

public class Print5 {

      public static void main(String[] args) {
          PrintNumber printNumber = new PrintNumber (3,2);
          String sum = Integer.toString(printNumber.getleft()
                + printNumber.getRight() );
          System.out.println("3+2=" + sum);
      }
}

Pythonは変数に対して穏やかな扱いをします。例えば、辞書オブジェクトを自動的に印刷することができます。Javaでは、辞書を特定に印刷するための関数を使用する必要があります。Pythonはまた、文字列と整数を簡単に印刷できるように、ある型の変数を別の型にキャストします。

一方、Javaは厳格な型チェックを持っています。これは実行時エラーを回避するのに役立ちます。以下に、文字列の配列であるargsを宣言します。

    String[] args

通常、各Javaクラスをそれぞれのファイルに配置します。しかしここでは、コンパイルとコードの実行を簡単にするために、1つのファイルに2つのクラスを配置します。私たちには:

    class PrintNumber {

    int left;
    int right;
}

そのクラスには2つのメンバ変数leftとrightがあります。Pythonでは、最初にそれらを宣言する必要はありませんでした。私たちはselfオブジェクトを使用して即座にそれを行いました。

ほとんどの場合、Javaの変数はprivateであるべきであり、つまりクラスの外で直接参照することはできません。代わりに、getter関数を使用してその値を取得します。このように。

    public int getleft() {
    return left;
}

したがって、main関数内で、そのクラスをインスタンス化し、その値を取得します:

    public int getleft() {
    return left;
}

public static void main(String[] args) {
    PrintNumber printNumber = new PrintNumber (3,2);
    String sum = Integer.toString(printNumber.getleft()
         + printNumber.getRight() );
}

Pythonが変数に対して穏やかな扱いをするのに対し、Javaはそうではありません。

例えば、私たちは“3+2=” + 3 + 2のように数字と文字を連結して印刷することはできません。したがって、整数を文字列に変換するために上記の関数を使用して、2つの文字列を連結して印刷する必要があります。

JavaとPythonの両方を学びましょう

両方のプログラミング言語は多くの人々に適しており、それぞれに大きなコミュニティがあります。一方を学ぶことは、他方を学べないことを意味するわけではありません。多くのプログラマーが複数の言語に挑戦します。そして、複数の言語を学ぶことで、プログラミング言語の理解が強化されることがあります。

多くの指標で、Pythonは学ぶのが簡単な方であり、その後Javaに移行することも可能です。

関連する読み物

これらの投稿は私のものであり、BMCの立場、戦略、または意見を必ずしも代表するものではありません。

ITOps・DevOpsの関連記事

BMCからのさらなる情報に興味がありますか?

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーションに関する月刊メールです:研究、顧客ストーリー、製品ニュース、イベント。

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ザ・ブリーフに登録しました

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーション—BMC AMIおよびControl-M—に関するアナリストの研究、顧客の展開、両者にわたるイベントを網羅しています。