do-while文の解説:Scala 3で廃止予定の機能(4)

Scala 3 (Dotty 0.26.0-RC1)
最終更新:2020年9月20日

[AD] scalapediaでは記事作成ボランティアを募集しています

この記事では、Scala 3にて廃止予定のdo-while文について解説します。

do-whileは廃止予定

Scala 3以降では、do-while文はサポートされなくなりました。

do-while文は、例えばこのような文です。

var i = 0 do { i += 1 println(i) } while (i < 10)

do-whileが廃止となる理由

do-while文は、JavaからScalaへと移行するユーザーに対して、これをスムーズにするために導入、維持されてきました。

とはいえ、do-while文が使用されることは滅多にありません。Javaから移行してくるユーザーですら、今となってはdo-while文やwhile文を使っている例は多くありません。

また、do-while文と同じ処理は通常のwhile文で表現できます。

したがって、do-while文を別の構文として維持しておくことにほとんど意味がありませんでした。

さらに、Scala 3の新しい制御構文の下ではdoが別の用途に使用されることになったので、do-while文が廃止されることとなったわけです。

whileで書き換えればOK

代わりに、whileループを使用しましょう。

上述の例は以下のように書きます。

var i = 0 while ({ i += 1 println(i) i < 10 }) ()

Scala 3の新しい構文ルールの下では、このコードは次のように括弧 ({...}) を付けずに書くことができます。

var i = 0 while { i += 1 println(i) i < 10 } do ()

ブロックを当座の条件として使うと、重複コードが発生せずに済みます。例えば、以下のようになります。

val iterator = Iterator[Int](5, 4, 3, 2, 1, 0, -1, -2, -3) while { val x: Int = iterator.next x >= 0 } do print(".")

移行はScala 3.0にアップデートしてからでOK

do-while文はScala 3.0でも使用することができます。

3.0においてdo-while文で書くと、通常ではコンパイルエラーになります。
しかし移行オプション3.0-migrationを設定すると、以前と同様に使用することができます。

さらに、移行オプション3.0-migrationを設定している際にコンパイラオプション-rewriteを設定すると、自動でwhile文に書き換えてもらえます。

移行オプションについてはこちらの記事をご覧ください。

便利ですので、移行は3.0へのアップデート後に行うことをおすすめします。

外部リンク:Dropped: Do-While

サイト内検索