ループ処理を行う!Scalaでfor文を使う方法【初心者向け】
初心者向けにScalaでfor文を使う方法について解説しています。同じ処理を一定繰り返す処理をScalaで書き方を書いています。実際にループ処理をプログラムを書きながら説明しているので、写経してみましょう。書き方を覚えられるはずです。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
今回は、Scalaでfor文を使う方法について解説します。
ループ処理を行うfor文はプログラムを実行する上で頻出なので、実際に書きながら理解していきましょう。
今回はScalaでのfor文の使い方について勉強していこう。
田島メンター!for文はどういったときに使ったらいいんでしょうか〜?
for文はループ処理、繰り返し処理を行う際に使用するよ。まずは基本の形を見てみよう。
はい!
Scalaのfor文とは
for文とは、ループ処理(繰り返し処理)のことを意味します。
ループ処理(繰り返し処理)とは、同じ処理を一定回数反復して処理することです。実際の現場でもループ処理は日々実装されています。
例えば、「こんにちは!」という表示を1,000回表示するとします。
方法としては「こんにちは!」という表示する命令文を1,000行書くことで実装可能です。
しかし、その方法の場合、タイプミスやそもそもの命令文に不具合があった場合1,000行修正する必要があるという問題が残ります。
そこで、for文を使用して少ないコードで保守性の高い繰り返し処理を実装していきます。
for文の種類
foreach
Scalaのfor文には単純に処理したい場合の、yield値を指定しないforeach展開を行います。
map
値を型変換等行いたい場合には、yield値を指定し、flatMap/map展開を行います。
Scalaのfor文の書き方
単純処理のfor文
文法
for(変数 <- コレクション) { 処理内容 }
解説
今回は、単純処理としてのfor文の解説を行います。
変数とは値を入れる箱のようなものです。1つの変数に1つの数字や文字を代入するようなイメージです。
コレクションとは配列全般を意味します。
配列とは、1つの配列変数に、複数の値を入れることができます。
変数 <- コレクションのまとまりをジェネレーターと呼びます。ここでは、繰り返し用の値を生成(ジェネレート)するという意味です。
ジェネレーターで値が生成されている間は、処理内容の処理が繰り返し実行され続けます。
これがfor文の基本形になるね。
ジェネレータの状態に応じて、繰り返し処理が行われるといった感じでしょうか。
次は実際の例で確認してみよう。今回は3の倍数を出力していくシンプルなループ処理を実行するよ。
Scalaのfor文を実際に書いてみよう
3の倍数の計算を行ってみよう
ソースコード
object Main extends App { var i = 3 for {j <- 1 to 10} println(i * j) } }
表示結果
3 6 9 12 15 18 21 24 27 30
解説
1行目のobject Main extends App {では、ScalaのAppという機能をextend(継承し再利用)してMainという名前のObject(オブジェクト)を宣言しています。
2行目のvar i = 3では、変数iに数字の3を代入しています。
3行目のfor { j <- 1 to 10}では、for文の条件を指定しています。
j <- 1 to 10の部分がジェネレーターです。ここでは、jに対して指定する配列を生成している間はずっと、処理を繰り返すという条件を設定しています。
1 to 10では、具体的に生成する数字を指定しています。ここでは、1から10の数字を順番に生成します。
4行目のprintln(i * j)では、変数iの初期値である3と、3行目で生成された1から10までの数字の1つが掛け算された結果を表示しています。
5行目の}では、3行目のfor文を終了しています。
6行目の}では、1行目の宣言を終了しています。
表示結果は3×1から、3×10までの結果が表示されました。
以上、Scalaでfor文の書き方を解説しました。
関数型プログラミングとは何か詳しく解説した記事も合わせてご覧ください。
ここでは、jの値が1から10になるまでの処理を繰り返しで行っているんだ。
そのjの値と3を掛けた結果を、その都度出力したということですね。
そうだね。コレクションやジェネレータ、それぞれの役割についても一度見直しておこう。
分かりました。ありがとうございます!
この記事を監修してくれた方
中本賢吾(なかもとけんご) 開発実績:PHPフレームワークを利用した会員制SNS・ネットショップ構築、AWSや専用サーバー下でLinuxを使用したセキュアな環境構築、人工知能を利用したシステム開発、店舗検索スマホアプリ開発など。 その他にも地域の職業プログラマー育成活動を行い、2018年には小学生がUnityで開発したオリジナルAndroidアプリをGooglePlayでリリース。ゲームで遊ぶより作ろうぜ!を合言葉に、小学生でも起業できる技術力を育成可能で有ることを証明し続けている。 |