札幌Javaコミュニティ第17回Java勉強会に参加してきました。
本日のテーマは
・Scala
言語の特徴、簡単なプログラム演習
言語の特徴、簡単なプログラム演習
・JavaFx
JavaFXの特徴、基本構文、簡単なアプリケーションの説明
でした。
たっぷりのボリュームで頭パンパンです。
しかし、とてもためになりました。
Scalaで出た課題が自力で解決できなかったのですが、
何とか解決できた(書けた)ので、ソースを公開します。
<課題>
ScalaでFizzBuzzプログラムを書く。
・3の倍数で”Fizz”
・5の倍数で”Buzz”・
・3と5の公倍数で”FizzBuzz”
・そのほかは数字のまま
出力するプログラム
ScalaでFizzBuzzプログラムを書く。
・3の倍数で”Fizz”
・5の倍数で”Buzz”・
・3と5の公倍数で”FizzBuzz”
・そのほかは数字のまま
出力するプログラム
以下は Main objectから実行することを想定したプログラム
def main(args: Array[String]) :Unit = { (1 to 100).foreach(fizzbuzz) } def fizzbuzz(i:Int){ var s:String = { if( i%15 == 0 ) "FizzBuzz" else if( i%3 == 0 ) "Fizz" else if( i%5 == 0 ) "Buzz" else i.toString } println(s) }
ロジックとしては以下。
1. 1から100までの配列(Range)を作る
2. Rangeの先頭の値から関数fizzbuzzを適用させる。
(foreachによって先頭の値を引数として呼び出し関数に与えられる)
3. fizzbuzz関数では変数sに、内部で作成した関数の結果をセット
4. sを出力
2. Rangeの先頭の値から関数fizzbuzzを適用させる。
(foreachによって先頭の値を引数として呼び出し関数に与えられる)
3. fizzbuzz関数では変数sに、内部で作成した関数の結果をセット
4. sを出力
「呼び出し」とか関数型言語だから使い方が違う。。。気がする。
今回はまったところは・・・・
NetBeansのscalaプラグインを使っていたのですが
Main Objectを作成するとBuild,実行できない。(コンソールは動くのに・・・)
⇒プラットフォームのデフォルトの場所(SCALA_HOME)が
「Document and Setting」配下になっていたためでした。
ディレクトリに半角スペースが入っているとBuildが失敗する模様。
Main Objectを作成するとBuild,実行できない。(コンソールは動くのに・・・)
⇒プラットフォームのデフォルトの場所(SCALA_HOME)が
「Document and Setting」配下になっていたためでした。
ディレクトリに半角スペースが入っているとBuildが失敗する模様。
1から100までのRangeをList(1 to 100)と定義していたため
Intの値を取り出せなかった。
⇒List(1 to 100)はList[Range]になるのですね。
何はともあれ、動いてよかったです。
次回(次々回)からもScalaの読書会があるので
簡単な関数から、関数型の記述に慣れていきたいです。
【追記】
ソースを少し考え直してみた。
def main(args: Array[String]) :Unit = { (1 to 100).foreach(i => println(fizzbuzz(i))) } def fizzbuzz(i:Int):String = { if( i%15 == 0 ) "FizzBuzz" else if( i%3 == 0 ) "Fizz" else if( i%5 == 0 ) "Buzz" else i.toString }
printlnもforeachの引数の中で評価(?)させてみました。