JVM言語のクイックガイド

JVM言語のクイックガイド

1. 前書き

Javaの他に、Scala、Kotlin、Groovy、Clojureなどの他の言語をJava仮想マシンで実行できます。

次のセクションでは、最も一般的なJVM言語の概要を説明します。

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

2. Java

2.1. 概要

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

A core feature of the language is the cross-platform portabilityは、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メソッドを定義しました。

次に、JVMで実行できるwe’ll use the javac command to generate the bytecode

javac HelloWorld.java

最後に、the java command executes the generated bytecode on JVM:

java HelloWorld

その他のJavaの例については、list of tutorialsを確認してください。

3. スカラ

3.1. 概要

Scalaは「スケーラブルな言語」を表します。 Scala’s a statically typed language which combines two important programming paradigms, namely object-oriented and functional programming. 

この言語は2004年に始まりましたが、近年ではより一般的になりました。

Scalaは、it doesn’t support primitivesとしての純粋なオブジェクト指向言語です。 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 is a statically typed, general-purpose, open-source language developed by JetBrains team。これは、オブジェクト指向と機能のパラダイムをまとめたものです。

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

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

Kotlinの重要な機能:

  • オブジェクト指向+機能

  • 強く静的に型付けされた

  • 簡潔

  • Javaと相互運用可能

introduction to Kotlinには、機能の詳細も含まれています。

4.2. 例

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

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

上記のコードは、helloWorld.kt.という新しいファイルに記述できます。

次に、we’ll use the kotlinc command to compile thisを実行し、JVMで実行できるバイトコードを生成します。

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

-dオプションは、classファイルの出力ファイルまたは.jarファイル名を示すために使用されます。 The -include-runtime option makes the resulting .jar file self-contained and runnable by including the Kotlin runtime library in it.

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

java -jar helloWorld.jar

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

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

5. グルーヴィーな

5.1. 概要

Groovyis an object-oriented, optionally typed, dynamic domain specific language (DSL)、静的型付けおよび静的コンパイル機能をサポートします。 構文を簡単に習得できるため、開発者の生産性を向上させることを目的としています。

Groovy integrates easily with any Java programを実行すると、スクリプト機能、ランタイムおよびコンパイル時のメタプログラミング、関数型プログラミング機能などの強力な機能がすぐに追加されます。

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

  • 高次関数、カリー化、クロージャなどの機能的特徴を備えたオブジェクト指向

  • タイピング–ダイナミック、スタティック、ストロング、ダック

  • ドメイン固有言語

  • Javaとの相互運用性

  • 簡潔さによる生産性

  • オペレータの過負荷

5.2. 例

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

println("Hello world")

上記のコードをHelloWorld.groovyという新しいファイルに記述しました。 今we can run this code in two ways: by compiling then executing or by just running uncompiled code.

次のように、groovycコマンドを使用して.groovyファイルをコンパイルできます。

groovyc HelloWorld.groovy

次に、javaコマンドを使用してgroovyコードを実行します。

java -cp \embeddable\groovy-all-.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"}

introduction articleにあるGroovyの例をもっと見てください。

6. クロージュ

6.1. 概要

Clojureis a general-purpose functional programming language.言語はJVMとMicrosoftのCommon Language Runtimeで実行されます。 Clojureはまだコンパイルされた言語ですが、その機能は実行時にサポートされるため、動的なままです。

Clojureの設計者は、JVMで実行できる最新のLispを設計したいと考えていました。 そのため、Lispプログラミング言語の方言としても知られています。 Similar to Lisps, Clojure treats code as data and has a macro system as well.

Clojureの重要な機能:

  • 機能的

  • 入力–動的、強力、最近gradual typingのサポートを開始

  • 並行性のために設計

  • ランタイムポリモーフィズム

6.2. 例

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

例の実行には、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"]])

これで、コードを更新して「Hello、World!」を出力する準備が整いました。 ./src/hello-world/core.cljファイル内:

(ns hello-world.core)

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

最後に、プロジェクトのルートディレクトリに移動した後、leinコマンドを使用して上記のコードを実行します。

cd hello-world
lein run

7. 他のJVM言語

7.1. Jython

JVMで実行されるJythonis the Java platform implementation of Python

この言語は当初、対話性を犠牲にすることなく高性能アプリケーションを作成できるように設計されました。 Jython is object-oriented, multi-threaded and uses Java’s garbage collector for efficiently cleaning up the memory.

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

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

print "Hello, world!"

7.2. JRuby

JRubyは、Java仮想マシンで実行するRubyプログラミング言語の実装です。

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

「Hello、World!」を印刷してみましょう。 JRubyで:

require "java"

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

8. 結論

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

これまでのところ、JVMが1995年にさかのぼっても、現在のプログラミング言語にとって非常に関連性のある魅力的なプラットフォームであることが示されています。