JShellで気軽にJavaを始めてみた。
最近自宅用にメカニカルキーボードを購入して勉強している自分に酔ってる髙田です。
最近Javaを少しずつ勉強しているのですが、Java初心者にはありがたいJShellというツールを使ってみたので、備忘録として残したいなと思います!
JShellについて
即座にコマンドでJavaコードを試すことができるツールです!
Javaは処理を実行するため最低限下記の記述が必要になります。
class Hello{
public static void main(String[] args) {
System.out.println("Hello World");
}
}
クラス作成→処理を書く→コンパイル→実行…ちょっと確認したいだけなのに!とJava始めたての私には少し面倒だなと感じることもしばしば…。
(ホットデプロイ環境作れ!は一旦置いといて…)
そこでターミナルでさくっとJavaを動かすことができるツールがJshellになります!
さっそく使ってみましょう!
環境設定
Dockerをインストールされている方は、以下の手順でコマンドを叩いていただくとJShellをお試しいただけます!
//エイリアスを登録
alias jshell='docker run -it --rm openjdk:11-jdk jshell'
//jshellと入力してEnter
$ jshell
JShell>
Jshellの終了タグである「/exit」を入力することでコンテナも削除されるため、ローカルに残る心配はありません。
もしDockerをインストールされていない方は、JDKをこちらからインストールしていただく必要があります。
お使いのOSに合わせてインストールをお願い致します。
https://www.oracle.com/java/technologies/downloads/
JShellでできること
先にJShellの終了方法ですが、「/exit」コマンドを実行します。
JShell> /exit
JShellコマンド一覧はこちらに記載されています。
ここからJShellでできることの一部をお見せしたいと思います!
演算子
jshell> 5 + 5
$1 ==> 10
「$1 ==>」のあとが結果になり、$1の部分は処理を実行するごとに増えていきます。
文字列の結合
jshell> "Marvericks" + "Corporation"
$2 ==> "MarvericksCorporation"
変数
変数の値は、メソッドやクラスなどでも使用できます。
jshell> var hoge = 123
hoge ==> 123
比較演算子
さきほど設定したhogeを使っています。
jshell> hoge > 100 ? "yes" : "no"
$3 ==> "yes"
配列
jshell> int[] array = {1, 2, 3}
array ==> int[3] { 1, 2, 3 }
jshell> array[0]
$4 ==> 1
メソッド
カッコを開いた状態で改行することで、メソッドなどの複数行の処理を実行することもできます!
編集中に抜けたい場合は、ctr + cで戻ることができますが、編集中コードは破棄されます。
jshell> int multiplied(int a, int b) {
...> return a * b;
...> }
| created method multiplied(int,int)
//変数hogeを使用。
jshell> multiplied(hoge, 5)
$5 ==> 615
メソッドの名前を忘れてしまったときや、メソッド一覧を見たいときは、
以下の例の場合、「”test”.」とドットまで入力した状態でTabキーを押すと一覧が表示されます。
jshell> "test".
charAt( chars() codePointAt(
codePointBefore( codePointCount( codePoints()
compareTo( compareToIgnoreCase( concat(
contains( contentEquals( endsWith(
equals( equalsIgnoreCase( getBytes(
getChars( getClass() hashCode()
indexOf( intern() isBlank()
isEmpty() lastIndexOf( length()
lines() matches( notify()
notifyAll() offsetByCodePoints( regionMatches(
repeat( replace( replaceAll(
replaceFirst( split( startsWith(
strip() stripLeading() stripTrailing()
subSequence( substring( toCharArray()
toLowerCase( toString() toUpperCase(
trim() wait(
クラス
jshell> public class Person {
...> private String name;
...> public Person(final String name) {
...> this.name = name;
...> }
...> public String getName() {
...> return name;
...> }
...> }
| 次を作成しました: クラス Person
jshell> Person hogehoge = new Person("Pikachu");
jshell> hogehoge.getName()
$6 ==> "Pikachu"
例外・構文エラー
例文
jshell> var fruits = List.of("banana", "apple", "orange")
fruits ==> [banana, apple, orange]
jshell> fruits.get(1)
$7 ==> "apple"
ではList.ofで指定したListに対して、addメソッドを使用してみると…
jshell> fruits.add("cherry")
| Exception java.lang.UnsupportedOperationException
| at ImmutableCollections.uoe (ImmutableCollections.java:72)
| at ImmutableCollections$AbstractImmutableCollection.add (ImmutableCollections.java:76)
| at (#9:1)
例外UnsupportedOperationExceptionが発生し、変更できないよと促してくれます。
at (#9:1)は例外が発生した場所になりますが、JShellではあまり関係ありません。
構文エラー
ArrayListオブジェクトで構文エラーを表示してみます。
jshell> var sample = new ArrayList<String>()
sample ==> []
jshell> sample.add("hoge1")
$8 ==> true
jshell> sample.add("hoge2")
$9 ==> true
//構文エラー
jshell> sample.add(1000)
| Error:
| incompatible types: int cannot be converted to java.lang.String
| sample.add(1000)
| ^--^
このように、int型をString型に変換できませんよ〜と構文エラーを表示して教えてくれます!
まとめ
かなり簡単なコードでご説明しましたが、こんなツールがあってこんな使い方ができるんだ〜と知っていただけたら嬉しいです!
Java難しそうだし、動かすまでの環境構築で断念しそう…
とりあえず動かしてみたいけどちょっとめんどくさそう…
という方にはぴったりなツールかなと思います!
がっつり開発したい!という方は、以前@かりーさんがJavaでホットデプロイ環境構築する記事を書いているので、こちらをお試しください!
https://ma-vericks.com/blog/spring-hotdeploy/
ではまた〜!