参考) javaでのFizzBuzz
void fizzBuzz(int n) {
for (int i = 1; i <= n; i++) {
if (i % 15 == 0) {
System.out.println("FizzBuzz");
} else if (i % 3 == 0) {
System.out.println("Fizz");
} else if (i % 5 == 0) {
System.out.println("Buzz");
} else {
System.out.println(i);
}
}
}
for文はジェネレータという構文を使う
例えば 1からn (n=3)までループする場合をREPLで実行してみる。
PowerShell(コマンドプロンプトでも動きました)で "sbt" → "console" でコンソールを立ち上げたら :pasteでREPLモードにしてソースを入力。
入力したら Ctrl+D で実行。
C:\work>sbt
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m;
port was removed in 8.0
[info] Updated file C:\work\project\build.properties: set sbt.version to 1.2.
[info] Loading project definition from C:\work\project
[info] Updating ProjectRef(uri("file:/C:/work/project/"), "work-build")...
[info] Done updating.
[info] Set current project to work (in build file:/C:/work/)
[info] sbt server started at local:sbt-server-840c8505c776f9e640b8
sbt:work> console
[info] Starting scala interpreter...
Welcome to Scala 2.12.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_201).
Type in expressions for evaluation. Or try :help.
scala> :paste
// Entering paste mode (ctrl-D to finish)
val n = 3
for { i <- (1 to n) } {
println(i)
}
// Exiting paste mode, now interpreting.
1
2
3
n: Int = 3
scala>
javaのこんなソースは…
for (int i = 0; i <= 12; i += 3) {
if (i % 2 == 0) {
for (int j = 1; j <= 3; j++) {
System.out.println(i * j);
}
}
}
scalaでは…
for {
i <- (0 to 12 by 3) if i % 2 == 0
j <- (1 to 3)
} {
println(i * j)
}
forの {} は文であるが値は返らない (Unit型)
iの値が欲しい場合は yield (いーるどぅ と呼べば良い?) を使う
val result = for {
i <- (1 to 3)
} yield {
i
}
if式
FizzBuzzをscalaで作ると…def fizzBuzz(n: Int): Unit = for { i <- 1 to n } {
if (i % 15 == 0) {
println("FizzBuzz")
} else if (i % 3 == 0) {
println("Fizz")
} else if (i % 5 == 0) {
println("Buzz")
} else {
println(i)
}
}
今回はVSCodeで作ってみる。
C:\work2フォルダを作り、そこにsample.scalaの名前で上記ソースを作成。
ただ、これだとmainが無いから動かないのかな?
ということで前回のHelloWorldのソースと合体させる。
(object Hello と mainメソッドを追加)
object Hello {
def main(args: Array[String]) = {
fizzBuzz(15)
}
def fizzBuzz(n: Int): Unit = for { i <- 1 to n } {
if (i % 15 == 0) {
println("FizzBuzz")
} else if (i % 3 == 0) {
println("Fizz")
} else if (i % 5 == 0) {
println("Buzz")
} else {
println(i)
}
}
}
PowerShell(コマンドプロンプト)でC:\work2へ移動し "sbt"コマンドと"run"コマンドを実行
→ OK
0 件のコメント:
コメントを投稿