1前書き

Java以外にも、Scala、Kotlin、Groovy、Clojureなどの他の言語をJava仮想マシンで実行することができます。

次のセクションでは、最も人気のあるJVM言語について概説します。

もちろん、JVM言語の前身であるJavaから始めましょう。


2 Java


2.1. 概要


Java

は、オブジェクト指向パラダイムを取り入れた汎用プログラミング言語です。

  • この言語の中心的な機能はクロスプラットフォームの移植性** です。これは、1つのプラットフォームで書かれたプログラムが適切なランタイムサポートを備えたソフトウェアとハ​​ードウェアの任意の組み合わせで実行可能であることを意味します。これは、プラットフォーム固有のマシンコードに直接ではなく、最初にコードをバイトコードにコンパイルすることによって実現されます。

Javaバイトコード命令はマシンコードに似ていますが、ホストオペレーティングシステムとハードウェアの組み合わせに固有のJava仮想マシン(JVM)によって解釈されます。

  • もともとオブジェクト指向言語でしたが、Javaは関数型プログラミングのような他のプログラミングパラダイムからの概念を採用し始めました。

Javaの主な機能のいくつかを簡単に見てみましょう。

  • オブジェクト指向

  • 強く静的に型付けされている

  • プラットフォームに依存しない

  • ごみ収集

  • マルチスレッド


2.2. 例

単純な「Hello、World!」の例がどのようになるか見てみましょう。

public class HelloWorld {
    public static void main(String[]args) {
        System.out.println("Hello, World!");
    }
}

この例では、

HelloWorld

という名前のクラスを作成し、コンソールにメッセージを表示するmainメソッドを定義しました。

次に、

javac

コマンドを使用して、JVM上で実行できるバイトコードを生成します。

javac HelloWorld.java

最後に、

java

コマンドはJVM上で生成されたバイトコードを実行します。

java HelloWorld

その他のJavaの例については、私たちのリンクをチェックしてください:/java-tutorial[チュートリアルのリスト]。


3 Scala


3.1. 概要


Scala

は「スケーラブル言語」を表します。

  • Scalaは、2つの重要なプログラミングパラダイム、すなわちオブジェクト指向プログラミングと関数型プログラミングを組み合わせた静的型付け言語です。 **

言語は2004年に始まったが近年ではより普及した。

Scalaは、** プリミティブをサポートしていないため、純粋なオブジェクト指向言語です。 Scalaは、特性、代数データ型、または型クラスなどの関数型プログラミング機能とともにクラス、オブジェクト、メソッドを定義する機能を提供します。

Scalaのいくつかの重要な機能は以下のとおりです。

  • 機能的、オブジェクト指向

  • 強く静的に型付けされている

  • 代数データ型

  • パターンマッチング

  • 強化された不変性サポート

  • レイジー計算

  • マルチスレッド


3.2. 例

まず、以前と同じ“ Hello、World!”の例を見てみましょう。今回はScalaです。

object HelloWorld {
    def main(args: Array[String]): Unit = println("Hello, world!")
}

この例では、

HelloWorld

という名前のシングルトンオブジェクトと

main

メソッドを作成しました。

次に、これをコンパイルするために、

scalac

を使用できます。

scalac HelloWorld.scala


scala

コマンドは、JVM上で生成されたバイトコードを実行します。

scala HelloWorld

4.

Kotlin


4.1. 概要


  • Kotlin

    は、https://en.wikipedia.org/wiki/JetBrains[JetBrains]チームによって開発された、静的に型付けされた汎用のオープンソース言語です。オブジェクト指向と機能のパラダイム

Kotlinを開発中の主な焦点は、Javaの相互運用性、安全性(例外処理)、簡潔さ、および優れたツールサポートでした。

Android Studio 3.0のリリース以降、Kotlinは、Androidプラットフォーム上でGoogleによって完全にサポートされているプログラミング言語です。これは、標準のJavaコンパイラの代わりとしてAndroid Studio IDEパッケージにも含まれています。

Kotlinの重要な機能

  • オブジェクト指向

  • 強く静的に型付けされている

  • 簡潔

  • Javaとの相互運用性

私たちのリンク:/kotlin[Kotlinの紹介]にも機能に関する詳細が含まれています。


4.2. 例

Kotlinの「Hello、World!」の例を見てみましょう。

fun main(args: Array<String>) { println("Hello, World!") }

上記のコードを

helloWorld.kt.

という新しいファイルに書き込むことができます。

それから、これをコンパイルするために

kotlinc

コマンドを使用し、JVM上で実行できるバイトコードを生成します。

kotlinc helloWorld.kt -include-runtime -d helloWorld.jar


-d

オプションは、

class

ファイルの出力ファイルまたは

.jar

ファイル名を示すために使用されます。 **

-include-runtime

オプションは、生成された

.jar

ファイルをKotlinランタイムライブラリを含めることによって自己完結型で実行可能にします。

次に、

java

コマンドがJVM上で生成されたバイトコードを実行します。

java -jar helloWorld.jar


for

ループを使用してアイテムのリストを印刷する別の例も見てみましょう。

fun main(args: Array<String>) {
    val items = listOf(1, 2, 3, 4)
    for (i in items) println(i)
}


5 Groovy


5.1. 概要


http://groovy-lang.org/


は、オブジェクト指向の、オプションで型付けされた、動的ドメイン固有言語(DSL)

で、静的型指定と静的コンパイル機能をサポートしています。構文の習得が容易で、開発者の生産性を向上させることを目的としています。

  • Groovyは、あらゆるJavaプログラムと簡単に統合でき、スクリプト機能、ランタイムおよびコンパイル時のメタプログラミング、機能的プログラミング機能などの強力な機能をすぐに追加します。

いくつかの重要な機能を強調しましょう。

  • 高階関数のような機能的特徴を持つオブジェクト指向

カレー、クロージャ
** タイピング – ダイナミック、スタティック、ストロング、ダック

  • ドメイン固有言語

  • Javaとの相互運用性

  • 簡潔さによる生産性

  • オペレータ過負荷


5.2. 例

まず、Groovyでの「Hello、World!」の例を見てみましょう。

println("Hello world")

上記のコードを

HelloWorld.groovy

という新しいファイルに書きました。これで、** コンパイルしてから実行するか、または未コンパイルのコードを実行するだけで、このコードを実行できます。

次のように

groovyc

コマンドを使用して

.groovy

ファイルをコンパイルできます。

groovyc HelloWorld.groovy

それから、groovyコードを実行するために

java

コマンドを使います。

java -cp <GROOVY__HOME>\embeddable\groovy-all-<VERSION>.jar;. HelloWorld

たとえば、上記のコマンドは次のようになります。

java -cp C:\utils\groovy-1.8.1\embeddable\groovy-all-1.8.1.jar;. HelloWorld

また、

groovy

コマンドを使用してコンパイルせずに

.groovy

ファイルを実行する方法も見てみましょう。

groovy HelloWorld.groovy

最後に、インデックス付きのアイテムのリストを印刷する別の例を示します。

list =[1, 2, 3, 4, 5, 6, 7, 8, 9]list.eachWithIndex { it, i -> println "$i: $it"}

Groovyのその他の例については、/groovy-language[導入記事]をご覧ください。


6. クロージュ


6.1. 概要


https://clojure.org/


は汎用の関数型プログラミング言語です。

この言語は、Microsoftのhttps://en.wikipedia.org/wiki/Common

Language

Runtime[Common Language Runtimeと同じようにJVM上でも動作します。]。 Clojureはコンパイルされた言語であり、その機能は実行時にサポートされているため動的です。

Clojureの設計者たちは、JVM上で動くことができる現代的なhttps://en.wikipedia.org/wiki/Lisp

(programming

language)[Lisp]をデザインしたいと考えていました。だからこそ、それはLispプログラミング言語の方言としても知られています。 Lispと同様に、Clojureはコードをデータとして扱い、マクロシステムも持っている。

Clojureの重要な機能

  • 機能的

  • タイピング – ダイナミック、強力、最近サポートを開始しました


徐々に入力

** 並行性のために設計されています

実行時ポリモーフィズム


6.2. 例

他のJVM言語とは異なり、Clojureで単純な「Hello、World!」プログラムを作成するのはそれほど簡単ではありません。

例を実行するには、https://leiningen.org/[Leiningen]ツールを使用します。

まず、次のコマンドを使用して、デフォルトのテンプレートを使用して簡単なプロジェクトを作成します。

lein new hello-world

プロジェクトは次のファイル構造で作成されます。

./project.clj
./src
./src/hello-world
./src/hello-world/core.clj

それでは、メインソースファイルを設定するために、次の内容で

./project.ctj

ファイルを更新する必要があります。

(defproject hello-world "0.1.0-SNAPSHOT"
  :main hello-world.core
  :dependencies[[org.clojure/clojure "1.5.1"]])


__./src/hello-world/core.

__cljファイルで、「Hello、World!」を印刷するようにコードを更新します。

(ns hello-world.core)

(defn -main[& args]    (println "Hello, World!"))

最後に、プロジェクトのルートディレクトリに移動した後、

lein

コマンドを使用して上記のコードを実行します。

cd hello-world
lein run

7.その他のJVM言語


7.1. Jython


http://www.jython.org/


は、JVM上で動作するhttps://www.python.org/[Python]

のJavaプラットフォーム実装です。

この言語は当初、対話機能を犠牲にすることなく高性能アプリケーションを書くことができるように設計されました。 Jythonはオブジェクト指向のマルチスレッドで、メモリを効率的にクリーンアップするためにJavaのガベージコレクタを使用しています。

Jythonには、Python言語の一部であるほとんどのモジュールが含まれています。 Javaライブラリから任意のクラスをインポートして使用することもできます。

簡単な「Hello、World!」の例を見てみましょう。

print "Hello, world!"


7.2. JRuby


  • JRuby

    は、Java仮想マシン上で動作するhttp://www.ruby-lang.org/en/[Ruby]プログラミング言語の実装です。

JRuby言語は高性能でマルチスレッド化されており、JavaやRubyから入手可能な多種多様なライブラリがあります。また、オブジェクト指向プログラミングやダックタイピングなど、両方の言語の機能を兼ね備えています。

JRubyで「Hello、World!」と印刷しましょう。

require "java"

stringHello= "Hello World"
puts "#{stringHello.to__s}"


8結論

この記事では、多くの人気のあるJVM言語と基本的なコード例を調べました。これらの言語は、オブジェクト指向、関数型、静的型付け、動的型付けなどのさまざまなプログラミングパラダイムを実装しています。

これまでのところ、1995年までさかのぼってJVMがあっても、それは現代のプログラミング言語にとって非常に関連性があり、説得力のあるプラットフォームであることを示しています。