札幌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の引数の中で評価(?)させてみました。