LoginSignup
14
14

More than 5 years have passed since last update.

Eclipseで始めるScala、Groovy 比較編

Last updated at Posted at 2015-09-11

準備

とりあえず環境構築については前回を参照
あとClojureはIDE使って開発する文化ではなさそうなんで割愛

今回のテーマ

割とよくあるネット上のJSONデータを取得して
一覧にして表示させるというプログラムを
それぞれの言語で書いてみて比較してみようと思う。

前提条件として以下を使用

  • 元データはQiitaのAPIを叩く
  • JSONのパースにはGSONを使う

Qiitaで書いてる&JSONでデータ返してくれるのでおあつらえ向き
GSONはJSONパースを楽する面+Javaのライブラリをどんな感じで処理するのかの目安にもなるかなと

Java

とりあえず比較の基本となるJavaで書いてみる

JavaTest.java
package net.zantetu;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

import com.google.gson.Gson;

public class JavaTest {

    public static void main(String[] args) throws Exception {
        try(BufferedReader br = new BufferedReader(new InputStreamReader(new URL("https://qiita.com/api/v2/users/aono-masashi/items").openStream()))){
            for(QiitaItem item : new Gson().fromJson(br, QiitaItem[].class)){
                System.out.println(item.getTitle() + "\t" + item.getUrl());
            }

        }
    }

    private class QiitaItem {

        private String title;
        private String url;

        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public String getUrl() {
            return url;
        }
        public void setUrl(String url) {
            this.url = url;
        }
    }
}
実行結果
エポックタイムの扱いでハマった話    http://qiita.com/aono-masashi/items/d1519010919c3915e291
Eclipseで始めるScala、Clojure、Groovy 準備編   http://qiita.com/aono-masashi/items/fad9560faf8c52ff1d30
ナイーブベイズ分類器をjavaで実装してみる  http://qiita.com/aono-masashi/items/fd633c3efe1b361d4088
neologd使って形態素解析したい。できれば依存関係とかは丸投げで。 http://qiita.com/aono-masashi/items/c4f2d1b62589938a6238
javaでjsonから各種ライブラリに対応するbeanを簡単に作成する方法 http://qiita.com/aono-masashi/items/c34031008729a0868021
XMLからJAXBのbeanを簡単に作る方法    http://qiita.com/aono-masashi/items/a8b30d1892732e7e5f1b

うーん、java7からautocloseableとかできて大分簡潔にかけるようになったけどやっぱちょっとコード量多いな
GSONの受け取りObjectとしてPOJOを作ってるところも煩雑

Scala

ScalaTest.scala
package net.zantetu

import com.google.gson.Gson
import java.io.BufferedReader
import scala.io.Source

object ScalaTest extends App {
  for(item:QiitaItem <- new Gson().fromJson(Source.fromURL("https://qiita.com/api/v2/users/aono-masashi/items").reader(), classOf[Array[QiitaItem]])) {
    println(item.title + "\t" + item.url)
  }
}

class QiitaItem {
  var title: String = _
  var url: String = _
}
実行結果
エポックタイムの扱いでハマった話    http://qiita.com/aono-masashi/items/d1519010919c3915e291
Eclipseで始めるScala、Clojure、Groovy 準備編   http://qiita.com/aono-masashi/items/fad9560faf8c52ff1d30
ナイーブベイズ分類器をjavaで実装してみる  http://qiita.com/aono-masashi/items/fd633c3efe1b361d4088
neologd使って形態素解析したい。できれば依存関係とかは丸投げで。 http://qiita.com/aono-masashi/items/c4f2d1b62589938a6238
javaでjsonから各種ライブラリに対応するbeanを簡単に作成する方法 http://qiita.com/aono-masashi/items/c34031008729a0868021
XMLからJAXBのbeanを簡単に作る方法    http://qiita.com/aono-masashi/items/a8b30d1892732e7e5f1b

Javaに比べれば大分すっきりしている。
一番ハマったところはclassOf[Array[QiitaItem]]で配列のClassオブジェクトを取得してるところ
scalaだとQiitaItem[].classみたいな感じでClassオブジェクトを取得できないみたい
GSONの受け取り用クラスQiitaItemは大分すっきりしてる。

Groovy

GroovyTest.groovy
import com.google.gson.Gson

new Gson().fromJson(new URL("https://qiita.com/api/v2/users/aono-masashi/items").newReader(), Object[]).each {
    println it.title + "\t" + it.url
}
実行結果
エポックタイムの扱いでハマった話    http://qiita.com/aono-masashi/items/d1519010919c3915e291
Eclipseで始めるScala、Clojure、Groovy 準備編   http://qiita.com/aono-masashi/items/fad9560faf8c52ff1d30
ナイーブベイズ分類器をjavaで実装してみる  http://qiita.com/aono-masashi/items/fd633c3efe1b361d4088
neologd使って形態素解析したい。できれば依存関係とかは丸投げで。 http://qiita.com/aono-masashi/items/c4f2d1b62589938a6238
javaでjsonから各種ライブラリに対応するbeanを簡単に作成する方法 http://qiita.com/aono-masashi/items/c34031008729a0868021
XMLからJAXBのbeanを簡単に作る方法    http://qiita.com/aono-masashi/items/a8b30d1892732e7e5f1b

圧倒的なコード量の無さ・・・
Groovyだと拡張してるメソッドがいろいろあってIO周りはダントツに使いやすい
しかもそれをクロージャで受け取って書けるので煩雑になりにくい
GSONの受け取りクラスも動的型付けしてくれるので配列になることだけを入れればいい
しかも.classもいらない・・・

総評

個人的にはJavaのエンジニアなのでGroovyが一番そそられる
圧倒的なコード量の無さと動的型付けでJavaの煩わしい部分が大分解消される
しばらくはGroovyもいじってみようかなと思った。
理由としては

  1. Javaのコードをそのまま書いてもほぼ動く
  2. ↑の理由から過去の遺産の再利用が楽
  3. IO周りの処理が多いバッチ系を作るときには相性バッチリ
  4. GradleってGroovyで動いてるのでGradle覚えるついでに覚えれる

って感じです。

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14