[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
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 にあたるような処理は不明。