1. yk0807

    Posted

    yk0807
Changes in title
+ここ5年ほどのJavaを簡単に振り返ってみる
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,30 @@
+転職が決まって、転職先でJavaを使うことになるので[ブログで書いた記事](https://yk0807.com/techblog/2019/03/29/%E3%81%93%E3%81%935%E5%B9%B4%E3%81%BB%E3%81%A9%E3%81%AEjava%E3%82%92%E7%B0%A1%E5%8D%98%E3%81%AB%E6%8C%AF%E3%82%8A%E8%BF%94%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/)をこちらにも投稿して見る。
+
+[Wikipediaのページ](https://ja.wikipedia.org/wiki/Java)や[JDK公式ページ](http://openjdk.java.net/projects/)によると、大体こんな感じ。
+2014年3月 [Java8](http://openjdk.java.net/projects/jdk8/features)(ラムダ式、型アノテーション、Date and Time API 、JavaFX(Swingより高機能なGUIツール)など)
+2017年9月 [Java9](http://openjdk.java.net/projects/jdk9/)(言語レベルでのモジュール化のサポートなど)
+2018年3月 [Java10](http://openjdk.java.net/projects/jdk/10/)(ローカル変数型推論など)
+2018年9月 [Java11](http://openjdk.java.net/projects/jdk/11/)(ネストベースのアクセスコントロールなど、**OracleJDKの有償化!!**)
+2019年3月 [Java12](http://openjdk.java.net/projects/jdk/12/)(JVM定数のAPIなど)
+
+こうして見ると、5年前のJava8で色々な機能が追加されたのが目につく。中でも、今更ながらラムダ式の導入はかなり大きかったのではないかと。
+ラムダ式の例としては、こんな感じ。
+
+```Java
+package Lambdatest;
+import java.util.function.*;
+
+public class LambdaTest {
+ public static void main(String[] args) {
+ double x1 = 3.0;
+ double y1 = 4.0;
+ BiFunction<Double, Double, Double> z = (x, y) -> Math.sqrt(x * x + y * y);
+ System.out.println(z.apply(x1, y1));
+ }
+}
+```
+
+これと同じことをラムダ式を使わずにやろうとすると、無名クラスを使ったり、結構ややこしいことになるんではと思う。
+そういえば、C++も言語仕様が大きく追加されたC++11からラムダ式が使えるようになったんだったな。
+
+他にも色々な機能が増えて、ここ数年で本当に進歩したんだなあ。とはいえ、いいことばかりではなくJava11からOracleJDKが有償化されてしまった(個人で使う分には大丈夫みたいですが)のは多くの人にとっては痛そうですね。。。OpenJDKの方は無償で使うことができるのですが、サポート期間が短かったりするので、悩みどころですね。