[Java] イテレータ(拡張 for と型推論)
注文した本が未着のため、勘で書いています。
イテレータ。
対象となる配列やコレクションの要素の数だけ繰り返す。
## Ruby
> – [Junichi Ito (伊藤淳一)さんはTwitterを使っています 「台風19号の最大瞬間風速は75mらしく、これを時速に直すと270km/h。 東海道新幹線の最高速度が285km/h、飛行機の離陸時の速度が240〜300km/hらしいので、新幹線や飛行機並みのスピードでいろんなものが飛んできます。ヤバい。 https://t.co/iKTTEgf5Nz https://t.co/Ic8ky9GPsU https://t.co/Ic8ky9GPsU https://t.co/Y5TpNX2Dvg」 / Twitter](https://twitter.com/jnchito/status/1182064502130405376)
“`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
“`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` 的に繰り返す。
> – [Iterable (Java Platform SE 8 )](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Iterable.html)
> – [Java | 拡張for文(for-each文)を使って要素を順に取得する](https://www.javadrive.jp/start/for/index8.html)
`int` の代わりに `var` 識別子でローカル変数を宣言できる。
変数の型はコンテキストから推論される。
この場合は良いが、いわゆる「浮動小数点コンテキストにおける整数除算」の指摘対象。
`(double) mps` としない場合、小数点以下が切り捨てとなる。
> – [ローカル変数の型推論](https://docs.oracle.com/javase/jp/13/language/local-variable-type-inference.html)
Ruby の [#map](https://ruby-doc.org/core-2.7.0/Array.html#method-i-map) にあたるような処理は不明。