もともとJava使い
自分がこの業界入った時はJava 1.5ぐらいでstruts 1.3でWebシステム作るのがモダンだった古き悪しき時代を乗り越えてきた、え~すけさんですよ。
そんなわけで、自分は転職組なので前の会社の話ですが、もれなく入社してから最初のプログラム研修はJavaを使って生のServlet/JSPや、strutsを使ってWEBシステムを作らされた記憶があり、大学でJavaのアプレットでなんか作るみたいなことはやってましたが、Webという覚えることだらけの魔境に四苦八苦してました。
ほら、WebってJavaだけじゃなくて、HTML/JavaScript/CSSが漏れなくついてくるから、覚えること増えるじゃん?
そんなこんなで、この業界に入ってから割とずっとJavaのプロジェクトをやってきており、実務ではJava 1.4/1.5/6/8/11ぐらいまでの記憶しかなかったですが、久々にAndroidStudioのバージョンアップしたら17以降を使えやコラみたいな警告が出てしまったので、今っていくつまで出てるのか調べたのと、Java8ぐらいが全盛期の人がどれだけうらしまたろう状態になってるかを簡単にまとめてみました。
とりあえずラムダ
Java8から出てきたやつ。
jQueryとかNode使いからすると、なんだチェーン的なアレじゃんとなるが、基本構文しかやってない新人やJava6で満足してる勢からすると初見殺しのアレ。
public static void main(String[] args) {
// アルファベット
List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
"p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
// とりあえ頭からSysout
list.forEach(System.out::println);
// マルチスレッドでSysout
list.parallelStream().forEach(System.out::println);
// ソート(文字コード順)してSysout
list.stream().sorted().forEach(System.out::println);
// ソート(アルファベット順で(同じアルファベットなら小文字→大文字の順))してSysout
list.stream().sorted(String::compareToIgnoreCase).forEach(System.out::println);
}
メインの使い所としてはListやMapなどのコレクション系のクラスから、マッチするレコードを探すとか中身を編集して別のコレクションに変換するとか、単純にFor文書かないでループさせるとかぐらいかなと。
Java5/6ぐらいで出てきた拡張For文も結構衝撃だったけど、ラムダによってコード量が激減したのはかなりインパクトあった。
switch文の進化
大量のif文をスッキリさせるSwitch文ですが、研修とかだとEnumや数値で判定して、その中でなにか処理を書くみたいなアレですが、今は値をそのまま返すことが出来るみたいです。
// 曜日Enum
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
}
public static void main(String[] args) {
Day day = Day.FRIDAY;
String jpDayLabel = switch (day) {
case SUNDAY -> "日";
case MONDAY -> "月";
case TUESDAY -> "火";
case WEDNESDAY -> "水";
case THURSDAY -> "木";
case FRIDAY -> "金";
case SATURDAY -> "日";
default -> "曜日不明"
}
System.out.println(jpDayLabel);
}
->って書いてあるから、ラムダ的な書き方なのかしら?
->{ なんかの処理; return 結果;} みたいな書き方とかも出来るのかしら?
複数行の文字列の宣言
Javaで複数行の文字列を作るときって、
StringBuilderとかで\nをアペンドしてとかやったり、行数分のString[]を定義してjoinとかで区切り文字に\nとかいれてましたが、そんな可読性が下がることはしなくてもいいみたいです。
※テキストブロックっていう名前らしいです。
public static void main(String[] args) {
// 文字列を宣言する時に """ って書くだけ。
System.out.println("""
1行目
2行目
3行目
""");
}
使い所としてはJPAとかでアノテーションにSQL書くとか、簡単なファイル出力やメール送信時のテンプレ文言などを定義するときとかに役立つかなと。
他の機能も色々とありましたが、とりあえず自分がこりゃいいやと思ったものだけとりあえず紹介してみましたよ。