😏

【初学者】JavaとRubyの違い

2023/12/17に公開

Javaをかじり始めて、序盤のほうはわりとRubyに似ているなあ~と思う場面もあり、実際はどのように違ってくるのか気なり始めたので調べてみました。

それぞれの特徴

まずはそれぞれの言語の特徴をざっくりと確認します。

Java

1.どんなOSでも使える

OSに依存しないため、あらゆる環境下において安定した動作を実現できます。

2.オブジェクト指向

Javaはオブジェクト指向なプログラミング言語です。オブジェクト指向とは、現実世界をモデル化し、モノ(オブジェクト)とその操作の方法をプログラムで表現する書き方を意味します。

3.マルチスレッド

Javaはマルチスレッドに対応しています。マルチスレッドとは、複数のスレッドを同時に走らせることができる能力のことです。

4.ガベージコレクション

Javaはガベージコレクションが自動で行われるため、メモリリークが原則として発生しないです。

ガベージコレクションとは

プログラムが動的に確保したメモリ領域のうち、不要となった領域を自動的に開放し、空き領域として再利用できるようにする機能のこと。

5.分散コンピューティング

Javaは分散コンピューティングに対応しています。

分散コンピューティングとは

複数のコンピュータを連携させて共通の問題を解決する方法。これにより、コンピュータネットワークは、複雑な課題に対処するために大規模なリソースを提供する強力な単一のコンピュータのように機能します。

Ruby

1.記述量が少ない

Rubyは他の言語と比べると記述量が少なくて済みます。

2.オブジェクト指向

Rubyはオブジェクト指向なプログラミング言語です。

3.スクリプト言語

Rubyはスクリプト言語であり、JavaやC言語と違いコンパイルする必要がありません。

4.動的型付け言語

変数の型を明示的に関連付ける必要はありません。

5.初心者向け

文法は自然言語に近く初心者向けで、また豊富なライブラリが用意されているため開発効率が高いです。

それぞれの違い

上記の特徴からそれぞれの違いを確認します。

1.文法の違い
  • Java
    「クラス」「メソッド」「変数」といったオブジェクト指向の要素が中心となっています。コードのブロックをセミコロンで区切り、波括弧 {} で囲んで表現します。
  • Ruby
    シンプルで自然な言語であり、「クラス」「メソッド」「変数」の宣言もシンプルで、コードのブロックは do...end{} で囲んで表現します。
2.型システムの違い
  • Java
    Javaは静的型付け言語です。つまり、変数の型は宣言時に明示的に指定し、コンパイラが型のエラーを検出します。
  • Ruby
    Rubyは動的型付け言語です。変数の型は動的に決定され、実行時に型のチェックが行われます。
3.メモリ管理の違い
  • Java
    メモリ管理はガベージコレクタによって自動的に行われます。不要になったオブジェクトは自動的に解放されます。
  • Ruby
    Rubyもガベージコレクタを備えていますが、Javaに比べると仕組みや挙動に若干の違いがあります。
4.パフォーマンスの違い
  • Java
    Javaは、コンパイルされてJVM上で実行されるため、高速な実行が期待できます。また、Javaは静的型付け言語であり、最適化が行いやすいという特徴もあります。
  • Ruby
    Rubyは、コードがインタプリタによって逐次的に解釈されるため、実行速度が比較的遅いとされています。
5.プログラミング手法の違い
  • Java
    Javaは、大規模でパフォーマンスを要求されるアプリケーションの開発に適しています。オブジェクト指向の特性を活かした設計や開発手法が一般的です。
  • Ruby
    Rubyは、柔軟性や開発効率を重視する小規模なアプリケーションやプロトタイプの開発に適しています。シンプルな文法と豊富な機能のライブラリが特徴です。

感想

今は初学者で扱える言語自体が少なく、そこまで考えていませんでしたが、今後は開発環境やプロジェクトの要件、自分自身のスキル等も考慮しながら開発言語の特徴を捉え選択できるようなレベルに到達したいと思います。

参考

https://web-camp.io/magazine/archives/55807
https://qiita.com/atsushi_1995/items/c2c74b0fda320d9126c0
https://e-words.jp/w/ガベージコレクション.html
https://aws.amazon.com/jp/what-is/distributed-computing/

Discussion