第17回Java勉強会に参加

札幌Javaコミュニティ第17回Java勉強会に参加してきました。

本日のテーマは

・Scala
言語の特徴、簡単なプログラム演習

・JavaFx
JavaFXの特徴、基本構文、簡単なアプリケーションの説明

でした。

たっぷりのボリュームで頭パンパンです。

しかし、とてもためになりました。

Scalaで出た課題が自力で解決できなかったのですが、
何とか解決できた(書けた)ので、ソースを公開します。

<課題>
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を出力

「呼び出し」とか関数型言語だから使い方が違う。。。気がする。

今回はまったところは・・・・

NetBeansのscalaプラグインを使っていたのですが
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の引数の中で評価(?)させてみました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください