JavaとScalaの違いその4 ... 多機能なfor
Scalaではforが多機能です。
object For extends App {
//0~4を表示.5は表示されない
for(i<-0 until 5){
println(i)
}
println("change")
//1~5を表示。今度は5が表示される
for(i<-1 to 5){
println(i)
}
println("change")
//5~1を表示。順番が逆。
for(i<-5 to 1 by -1){
println(i)
}
println("change")
//iを使わないで単純に繰り返し
for(_<-1 to 5){
println("Hello")
}
}
コンソールにはこのように正しく表示されました。
0
1
2
3
4
change
1
2
3
4
5
change
5
4
3
2
1
change
Hello
Hello
Hello
Hello
Hello
さらに、拡張forっぽいやつ、多重ループ、フィルターも簡単にできます。
object Exfor extends App {
//コレクションデータの処理
val iData=Array(1,2,3)
for(iArray<-iData){
println(iArray)
}
println("change")
//多重ループ
val iString=List("a","b","c")
for(i<-iData; j<-iString){
println(i)
println(j)
}
println("change")
//forの中でfilter
for(i<-iData if(i-2==0) & (i+1==3)){
println(i)
}
//ifの部分を if(i-2==0); if(i+1==3) のようにも可能
println("change")
//フィルターをかける前にfor内だけで有効なval変数を定義
for(i<-iString; stst=i+"HeyMan!!" if stst.length() < 10){
println(i+stst)
}
}
実行するとコンソールには以下のように出力されます。
1
2
3
change
1
a
1
b
1
c
2
a
2
b
2
c
3
a
3
b
3
c
change
2
change
aaHeyMan!!
bbHeyMan!!
ccHeyMan!!
最後のフィルターは無意味ですけど、まあこんな書き方ができるんですよねーってことで^^
さらにさらにScalaが得意な、値を返すこともforでできるんです!
値を返した場合は yield をfor文につけます。
object Yield extends App {
val data=List(1,2,3,4,5,6,7)
val datas=
for(i<-data if(i%2==0)) yield{
i
// i.toString() と書き込んでも同様の結果が得られます。
}
for(j<-datas){
println(j)
}
}
結果、このように表示されますー
2
4
6
forに関してはこんなもんでしょーか^^
次回はswitch case文の代わりのmatch式について各予定ですー