12
FizzBuzz01~基本形~
object FizzBuzz01 {
defmain(args: Array[String]) {
for (i <- 1 to 20) {
if (i % 3 == 0 && i % 5 ==0) {
println("FuzzBuzz")
} else if (i % 3 == 0) {
println("Fizz")
} else if (i % 5 == 0) {
println("Buzz")
} else {
println(i)
}
}
}
}
他の言語と同じように、
if を使って処理を書いてみましょう。
13.
13
FizzBuzz01~基本形~
object FizzBuzz01 {
defmain(args: Array[String]) {
for (i <- 1 to 20) {
if (i % 3 == 0 && i % 5 ==0) {
println("FuzzBuzz")
} else if (i % 3 == 0) {
println("Fizz")
} else if (i % 5 == 0) {
println("Buzz")
} else {
println(i)
}
}
}
}
14.
14
FizzBuzz02 ~ifは値を返す~ の前説
//Good if
val valMsg = if (date.getDate % 2 == 0) {
"今日は偶数日です。"
} else {
"今日は奇数日です。"
}
println(valMsg)
// Bad if
var varMsg: String = null
if (date.getDate % 2 == 0) {
varMsg = "今日は偶数日です。"
} else {
varMsg = "今日は奇数日です。"
}
println(varMsg)
15.
15
FizzBuzz02 ~ifは値を返す~
object FizzBuzz01{
def main(args: Array[String]) {
for (i <- 1 to 20) {
if (i % 3 == 0 && i % 5 ==0) {
println("FuzzBuzz")
} else if (i % 3 == 0) {
println("Fizz")
} else if (i % 5 == 0) {
println("Buzz")
} else {
println(i)
}
}
}
}
object FizzBuzz02 {
def main(args: Array[String]) {
for (i <- 1 to 20) {
val line = if (i % 3 == 0 && i % 5 ==0) {
"FuzzBuzz"
} else if (i % 3 == 0) {
"Fizz"
} else if (i % 5 == 0) {
"Buzz"
} else {
i
}
println(line)
}
}
}
val、値を返すifを使い、println が1つになるよう
処理を書いてみましょう。
16.
16
FizzBuzz02 ~ifは値を返す~
object FizzBuzz01{
def main(args: Array[String]) {
for (i <- 1 to 20) {
if (i % 3 == 0 && i % 5 ==0) {
println("FuzzBuzz")
} else if (i % 3 == 0) {
println("Fizz")
} else if (i % 5 == 0) {
println("Buzz")
} else {
println(i)
}
}
}
}
object FizzBuzz02 {
def main(args: Array[String]) {
for (i <- 1 to 20) {
val line = if (i % 3 == 0 && i % 5 ==0) {
"FuzzBuzz"
} else if (i % 3 == 0) {
"Fizz"
} else if (i % 5 == 0) {
"Buzz"
} else {
i
}
println(line)
}
}
}
17.
17
FizzBuzz03 ~for はyield で値を返す~ の
前説
val lines = for (i <- 1 to 5) yield
if (i == 1)
"壱"
else if (i == 2)
"弐"
else
"参以上"
lines foreach println
// 実行結果
壱
弐
参以上
参以上
参以上
18.
18
FizzBuzz03 ~for はyield で値を返す~
object FizzBuzz03 {
def main(args: Array[String]) {
val lines = for (i <- 1 to 20) yield
if (i % 3 == 0 && i % 5 ==0) {
"FuzzBuzz"
} else if (i % 3 == 0) {
"Fizz"
} else if (i % 5 == 0) {
"Buzz"
} else {
i
}
lines foreach println
}
}
値を返す for , foreach を使い
処理を書いてみましょう。
19.
19
FizzBuzz03 ~for はyield で値を返す~
object FizzBuzz03 {
def main(args: Array[String]) {
val lines = for (i <- 1 to 20) yield
if (i % 3 == 0 && i % 5 ==0) {
"FuzzBuzz"
} else if (i % 3 == 0) {
"Fizz"
} else if (i % 5 == 0) {
"Buzz"
} else {
i
}
lines foreach println
}
}
21
FizzBuzz04 ~ mapと高階関数~
object FizzBuzz04 {
def main(args: Array[String]) {
def fizzbuzz(i: Int): String =
if (i % 3 == 0 && i % 5 == 0)
"FizzBuzz"
else if (i % 3 == 0)
"Fizz"
else if (i % 5 == 0)
"Buzz"
else
i.toString()
1 to 20 map { fizzbuzz } foreach println
}
}
引数がInt型1つで、String型を返す
fizzbuzz という名前の関数を定義し、
map を使って処理を書いてみましょう。
22.
22
FizzBuzz04 ~ mapと高階関数~
object FizzBuzz04 {
def main(args: Array[String]) {
def fizzbuzz(i: Int): String =
if (i % 3 == 0 && i % 5 == 0)
"FizzBuzz"
else if (i % 3 == 0)
"Fizz"
else if (i % 5 == 0)
"Buzz"
else
i.toString()
1 to 20 map { fizzbuzz } foreach println
}
}
23.
23
FizzBuzz04 ~ mapと高階関数~ の後説
// foreach println も同じ形でした
(1 to 5) foreach { x => println(x) }
(1 to 5) foreach { println(_) }
(1 to 5) foreach println
24.
24
FizzBuzz05 ~ mapと無名関数~ の前説
(1 to 5) map { (x: Int) => x * 2 } foreach println
// 省略形
(1 to 5) map { x => x * 2 } foreach println
(1 to 5) map { _ * 2 } foreach println
// 実行結果
2
4
6
8
10
25.
25
FizzBuzz05 ~ mapと無名関数~
object FizzBuzz05 {
def main(args: Array[String]) {
(1 to 20) map { x =>
if (x % 3 == 0 && x % 5 == 0)
"FizzBuzz"
else if (x % 3 == 0)
"Fizz"
else if (x % 5 == 0)
"Buzz"
else
x.toString
} foreach println
}
}
map と無名関数を使って
処理を書いてみましょう。
26.
26
FizzBuzz05 ~ mapと無名関数~
object FizzBuzz05 {
def main(args: Array[String]) {
(1 to 20) map { x =>
if (x % 3 == 0 && x % 5 == 0)
"FizzBuzz"
else if (x % 3 == 0)
"Fizz"
else if (x % 5 == 0)
"Buzz"
else
x.toString
} foreach println
}
}
27.
27
FizzBuzz06 ~ match-case~ の前説 1/2
// 例1
val num = 1
val daiji = num match {
case 1 => "壱"
case 2 => "弐"
case _ => "参以上"
}
println(daiji)
// 実行結果
壱
28.
28
FizzBuzz06 ~ match-case~ の前説 2/2
// 例2
val date = new Date
val msg = date.getDate match {
case d if (d % 2 == 0) => "今日は偶数日です。"
case _ => "今日は奇数日です。"
}
println(msg)
// 実行結果(27日の場合)
今日は奇数日です。
29.
29
FizzBuzz06 ~ match-case~
object FizzBuzz06 {
def main(args: Array[String]) {
(1 to 20) map { num =>
num match {
case x if (x % 3 == 0 && x % 5 == 0) => "FizzBuzz"
case x if (x % 3 == 0) => "Fizz"
case x if (x % 5 == 0) => "Buzz"
case x => x.toString()
}
} foreach println
}
}
match-case を使って
処理を書いてみましょう。
30.
30
FizzBuzz06 ~ match-case~
object FizzBuzz06 {
def main(args: Array[String]) {
(1 to 20) map { num =>
num match {
case x if (x % 3 == 0 && x % 5 == 0) => "FizzBuzz"
case x if (x % 3 == 0) => "Fizz"
case x if (x % 5 == 0) => "Buzz"
case x => x.toString()
}
} foreach println
}
}
31.
31
FizzBuzz07 ~ mapと match の省略 ~ の前説
val daijis = (1 to 5) map { num =>
num match {
case 1 => "壱"
case 2 => "弐"
case _ => "参以上"
}
}
// 省略形
val daijis2 = (1 to 5) map {
case 1 => "壱"
case 2 => "弐"
case _ => "参以上"
}
32.
32
FizzBuzz07 ~ mapと match の省略 ~
object FizzBuzz07 {
def main(args: Array[String]) {
1 to 20 map {
case x if (x % 3 == 0 && x % 5 == 0) => "FizzBuzz"
case x if (x % 3 == 0) => "Fizz"
case x if (x % 5 == 0) => "Buzz"
case x => x.toString()
} foreach println
}
}
match を省略した
処理を書いてみましょう。
33.
33
FizzBuzz07 ~ mapと match の省略 ~
object FizzBuzz07 {
def main(args: Array[String]) {
1 to 20 map {
case x if (x % 3 == 0 && x % 5 == 0) => "FizzBuzz"
case x if (x % 3 == 0) => "Fizz"
case x if (x % 5 == 0) => "Buzz"
case x => x.toString()
} foreach println
}
}
34.
34
FizzBuzz08 ~ 再帰、クロージャ、コンス(分ける)~
import scala.collection.mutable.ListBuffer
object FizzBuzz08 {
def main(args: Array[String]) {
val lines = new ListBuffer[String]
def fizzbuzzRec(numbers: List[Int]) {
numbers match {
case Nil =>
case number :: tail => {
lines.append(number match {
case x if (x % 3 == 0 && x % 5 == 0) => "FizzBuzz"
case x if (x % 3 == 0) => "Fizz"
case x if (x % 5 == 0) => "Buzz"
case x => x.toString
})
fizzbuzzRec(tail)
}
}
}
fizzbuzzRec(1 to 20 toList)
lines foreach println
}
}
35.
35
FizzBuzz09 ~ 末尾再帰、コンス(連結)~
import scala.collection.mutable.ListBuffer
import scala.annotation.tailrec
object FizzBuzz09 {
def main(args: Array[String]) {
def fizzbuzzRec(numbers: List[Int]): List[String] = {
@tailrec
def fizzbuzzRecLocal(accumulator: List[String],
numbers: List[Int]): List[String] = {
numbers match {
case Nil => accumulator
case number :: tail => fizzbuzzRecLocal(
accumulator ::: List(
number match {
case x if (x % 3 == 0 && x % 5 == 0) => "FizzBuzz"
case x if (x % 3 == 0) => "Fizz"
case x if (x % 5 == 0) => "Buzz"
case x => x.toString
}
), tail
)
}
}
fizzbuzzRecLocal(Nil, numbers)
}
fizzbuzzRec(1 to 20 toList) foreach println
}
}
#11 class Person { def getMessage(): String = { return "Hello world!" } def printMessage(): Unit = { println("wakuwaku Scala!") } } object Main { def main(args: Array[String]): Unit = { val person1 = new Person() println(person1.getMessage()) var person2 = new Person() person2.printMessage() person2 = new Person() person2.printMessage() } } class Person2 { def getMessage = "Hello world!" def printMessage { println("wakuwaku Scala!") } } object Main2 { def main(args: Array[String]) { val person1 = new Person println(person1.getMessage) var person2 = new Person person2.printMessage person2 = new Person person2.printMessage } }