[Java] イテレータ(拡張 for と型推論)

注文した本が未着のため、勘で書いています。

イテレータ。
対象となる配列やコレクションの要素の数だけ繰り返す。

Ruby

% irb
irb(main):001:1* puts [50, 60, 70, 80].map { |mps|
irb(main):002:1*   kmh = mps * 3600 / 1000
irb(main):003:1*   "最大瞬間風速#{mps}m = 時速#{kmh}km"
irb(main):004:0> }.to_a
最大瞬間風速50m = 時速180km
最大瞬間風速60m = 時速216km
最大瞬間風速70m = 時速252km
最大瞬間風速80m = 時速288km
=> nil
irb(main):005:0> exit

Java

ArrayLoop.java
package com.example.arrayloop;

public class ArrayLoop {
    public static void main(String[] args) {
        int[] array = {50, 60, 70, 80};
        for (int mps : array) {
            // int kmh = mps * 3600 / 1000;
            var kmh = mps * 3600 / 1000;
            // double kmh = (double) mps * 3600 / 1000;
            System.out.println("最大瞬間風速" + mps + "m = 時速" + kmh + "km");
        }
    }
}

「拡張for文」を利用して Ruby の .each 的に繰り返す。

int の代わりに var 識別子でローカル変数を宣言できる。
変数の型はコンテキストから推論される。

この場合は良いが、いわゆる「浮動小数点コンテキストにおける整数除算」の指摘対象。
(double) mps としない場合、小数点以下が切り捨てとなる。

Ruby の #map にあたるような処理は不明。