PerlとJavaの類似点は何ですか?[閉まっている]


14

私は自分の第二言語としてJavaを学んでいると心に決めています(私はPerl開発者です)。しかし、オンラインチュートリアルを少し読んだだけでは、この2つの間に類似点はまったく見当たりません。Javaを学習するとき、何を簡単に理解できますか?


「この言語が好きです!」と決めて、最初に始めてください。困難な何かに出くわしたときはいつでも、自分の決定を覚えて、歯ぎしりや髪の毛の引っ張りを省いてください。

1
推奨読書:ゴリラ対シャーク

回答:


32

Perlは、高レベル、汎用、マルチパラダイム、解釈、動的プログラミング言語です。Javaは、高レベルで汎用的な、主に単一パラダイムの静的に型付けされたプログラミング言語です。

したがって、両方とも高レベルです

高レベルのプログラミング言語は、コンピューターの詳細から強力に抽象化されたプログラミング言語です。

および汎用

コンピューターソフトウェアでは、汎用プログラミング言語(GPL)は、さまざまなアプリケーションドメインでソフトウェアを作成するために使用されるように設計されたプログラミング言語です。

つまり、PerlでできることはすべてJavaでもできるということです。@KyleHodgsonがASと言及し、その構文の両方がCやC ++から派生などの単純なもののための構文forループやif文は基本的に同じである-と@DipanMehtaのようノート、両方があるごみ収集します。そしてもちろん、どちらも非常に人気があり、活気のあるコミュニティがあります。

しかし、それは類似点が止まるところです。Perlはマルチパラダイムであり、幅広いプログラミングパラダイムをサポートしています。

Perlは単一のパラダイムを推奨しません。それらは本質的に同等であり、構築するものに最適なものを自由に選択できます。もちろん、単一のパラダイムに制限することなく、自由に組み合わせることができます。一方、Javaはほとんどがクラスベースのオブジェクト指向言語です。汎用プログラミングがサポートされていますが、初心者の方はJavaを厳密にクラスベースのオブジェクト指向言語と考える必要があります。

したがって、Perlではコードを構造化する方法は複数ありますが1、Javaは1つだけです。それは悪いことでも(良いことでもありません)、ただ違うだけです。オブジェクト指向のPerlコードを作成していない場合、最初はJavaが少し異質に見えるかもしれません。落胆しないでください。ソフトウェア開発のキャリアを考えている場合、オブジェクト指向は最終的に学習する必要があるものであり、Javaの学習はオブジェクト指向の基本概念を学ぶ良い方法です-完全な方法ではありませんが、間違いなく良い方法です。

そしてご存じのように、Perlは解釈されますが、Javaは...まあ... まったく別の獣です。Javaでは、Perlで行うようにコードを記述し、コンパイルします。結果は実行可能ファイルではなく、Javaバイトコードです。この中間形式は、(最終的に!)Java仮想マシンで実行されます。これは、Perlインタープリターにやや似ています。A JVMはsimirarlyあなたはPerlのスクリプトを実行するPerlインタプリタをインストールする必要がどのように実行するJavaプログラムのために、あらかじめインストールしておく必要があります2

Perlのバックグラウンドから来て、覚えておくべき最も重要なことは、バイトコードへのコンパイルのステップです。Javaソースファイルに変更を加えるたびに、それを再コンパイルする必要があります。最初はおかしく聞こえるかもしれませんが、コンパイルには非常に良い結果があります:この段階でコードのさまざまなエラーがチェックされ、コンパイラはプロセスがあればそれを終了することを拒否し、有用なメッセージ(常にメッセージがありますが、有用なメッセージは時々あります)。

最後の大きな違いに私たちをもたらします:

Perlは動的3です。

ダイナミックプログラミング言語とは、コンパイル時に他の言語が実行する可能性のある多くの一般的な動作を実行時に実行する高レベルプログラミング言語のクラスを記述するためにコンピューターサイエンスで広く使用される用語です。これらの動作には、プログラムの実行中に、新しいコードを追加する、オブジェクトと定義を拡張する、または型システムを変更することによる、プログラムの拡張が含まれます。

そして動的に型付けされた4

プログラミング言語は、その型チェックの大部分がコンパイル時ではなく実行時に実行されるときに動的に型付けされると言われています。

Javaは静的に型付けされます:

プログラミング言語は、実行時ではなくコンパイル時に型チェックが実行される場合、静的型付けを使用すると言われています。

これを可能な限り簡単に言えば、Javaでは変数とメソッドを使用する前にそれらの型を宣言する必要があるということです。他にも違いはありますが、自分でそれらを発見する楽しさを台無しにしたくないでしょう:)

そして最後に、非常に重要な違いが1つあります。Javaは学界5 企業の世界の恋人の言語であり、学術的な環境でPerlに出会うことはめったにありません(私が彼女に初めて会った場所)。 (まだかなりの数の仕事がありますが、Java、.Net言語、PHPほど多くはありません)。理由についてはコメントしませんが、(悲しい)事実を述べているだけです。あなたはまだ非常に若いので、Javaを学習することで、その道をたどることを選択した場合、コンピューターサイエンスの学位を取得する準備が少しできます。

もちろん、Perlをあきらめないで、Javaを探検してください。それらが類似よりも異なるという事実は、まったく異なるアプローチとプログラミング精神を学ぶことを意味します。それは難しい道ですが、最終的にはあなたがより良いプログラマーになるでしょう。

1 「ティムトーディ」

2 Perlコミュニティは、Parrotを介してPerl仮想マシンの可能性を積極的に調査しています。

3ダイナミックは常に動的型付けを意味するものではありません。

4 Perlはユーザー定義型に対して動的に型付けされ、配列、ハッシュ、スカラー、サブルーチンの区別に関して静的に型付けされ、を介して強く型付けされるuse strictため、本質的に可変型システム言語ですが、健全性を保つために動的に呼び出しましょう入力しました。

5ジョエル・スポルスキーがJavaSchoolsの危険に書いているように、悪用のポイントまで。


6
Perlと比較して、Javaは高級言語ではありません。Perlコードを実行するよりも、何かを記述するのにはるかに多くのJavaコードが必要です。
tchrist

1
@tchrist言語が高レベルであるか、別の言語よりも高い/低いレベルであるかどうかに関係するコードの量は何に関係しますか?
ヤニス

1
@YannisRizos答えるのはとても簡単です。より多くのコードが必要な場合、十分に高い抽象化レイヤーを扱っていません。顕著な例の1つは、Javaの危険な文字列処理です。Java 7の正規表現エンジンを除いて、抽象Unicodeコードポイントの高レベルの概念をサポートしていません。これは、言語JavaとPerlの低レベルの比較のため、非常に多くのマラキーになります。
tchrist

@tchristこの用語の主観性は、健全な比較の余地があまりなく、線がぼやけすぎており、両方の言語には非常に幅広い機能があり、その一部は非常に高レベルで低機能です。ですから、私は彼らを同じレベルにいると考え続け、それについてあまり心配しません。ここでも同様の会話があり、言語を比較する時間を失うことはありませんでした;)
yannis

@YannisRizos Perlには欠けているJavaの高レベルの概念は見つかりませんが、Javaに欠けているPerlには多くの高レベルの概念があります。したがって、Perlはより高いレベルです。Perlには関数ポインターがあります。Javaはしません。Perlには演算子のオーバーロードがあります。Javaはしません。Perlには決定論的なデストラクタがあります。Javaはしません。Perlは、戻り値の型によって関数をオーバーロードできます。Javaはできません。私はこの方法で非常に長い間続けることができます。もちろん、どんな理由であれ、あなたが最も喜ぶとはいえ、あなたは「感じ」続けますが、それは主観的な分析によるものではありません。
tchrist

2

さて、どちらもCのような構文-セミコロン、中括弧などを使用します。個人的に、私が数年前にPerlからJavaに切り替えようとしたとき、私をつまずかせた最大のことはオブジェクト指向プログラミングでした。Perlでいくつかのオブジェクトを開発しましたが、名詞王国での生活を想像しようとすると頭が痛くなりました。


@downvote、なぜ?(私は答えにあまり興味がありませんが、あなたがそんなに問題を見つけたものについて興味があります。)
カイルホジソン

1

現在選択されているものは2つの違いに焦点を当てているように見えるので、代替の答えに突き刺してください(実際にはPerlとJavaの間に多くの類似点はありません)。

類似点

  • どちらもCに似ています(ループとブレース、セミコロンがあります)
  • それらは主に必須です
  • どちらもコンパイル済みバイナリを生成しません
  • 彼らは両方とも非常に成熟しています
  • どちらもエンタープライズでの戦闘テスト済みです(Perlはopsグルーとして、Javaはアプリケーション/サービスとして)
  • どちらも人気があります
  • どちらもオブジェクト指向をサポートしています
  • どちらも幅広いフレームワークを利用できます
  • 彼らは両方ともそれらについて出版された本を持っています
  • どちらもC / assemblyよりも高レベルです
  • どちらも「遅い」(どちらもC /アセンブリではないという、さまざまな特定の遅いシナリオの場合)
  • どちらもメモリを自動的に管理します(「ガベージコレクション」)
  • 2012年夏の時点でどちらもヒップ/クールではありません
  • 彼らは両方ともオープンソースコミュニティに定着している
  • どちらも多くのプラットフォームで利用可能です

Perlコードが非常に厳密で直交的(十分にテストされ、十分に文書化され、Mooseまたは厳密なオブジェクト指向を使用)している場合、Javaは非常に直交的で表現力に乏しいため、これらの概念はJavaにも非常にうまく適用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.