ymnkさんの華麗なお膳立ての元、scala勉強会@東北第1回が開催されました。オンラインにてコードリーディング、というスタイル。週に1回1時間程度を継続していく予定。
試行錯誤中ではありますが、今回はskypeとpartty.orgでymnkさんの説明と端末を見ながら、手元のコードを読んで質問したりする形式でした。
「@東北」という名前がついてますが、こういう形式の勉強会が成功すれば、どこの誰とでも気軽に勉強会できるよねー、なんていう話をしながら実践しています。題材のソースコードも1回目の題材としてちょうど良くて(ほとんどJavaなんだけど、scala的文法が適度に散りばめられてる)、これをチョイスしたymnkさんの懐の広さを感じました。
参加してみての感想ですが、率直に、楽しかった&めちゃ勉強になりました。
「オレはプログラマではない」という意識は常々持っていますが、それは、プログラム言語自体をそれほど深く勉強したことがなくて、その自信の無さから出てくる言い訳的な発言だったりもします。
scalaに触れて、「あー、1からプログラミングを勉強するチャンスだな」と思ったので、この勉強会には積極的に参加していきたいと思っています。齢35にして、ようやくプログラマを目指す。
失笑をかうような質問でもどんどんさせていただこうと思っているので、みなさんよろしくお願いします。もちろん、いつまでもみなさんにオンブしているわけにも行かないので、急速に成長を遂げる予定です。
最後に今日学んだことをコードに起こしておきました。
package lets.scala;
class First {
//インスタンス化のときにブロック内が実行
// ブロックの戻り値が定数に束縛
val hello = {
def helloImpl = {
"hello!!"
}
helloImpl
}
// 関数内に関数定義できる
// loopを再帰でやる
def numString(max:Int):String = {
var str = ""
def countDown( n:Int ) {
str += n
if( n > 0 ) countDown( n - 1 )
}
countDown(max)
str
}
}
object FirstApp extends First{
def main(args : Array[String]) {
println( hello )
//implicit conversion
// コンパイル時にStringクラスの拡張が行われる
// java.lang.String -> scala.runtime.RichString
println( numString(9).toLong )
// scala.Iterable#exists と無名関数
val list = "person"::"position"::"post"::Nil
if( list.exists( x => x == "person" ) ) println("include person")
if( list.exists( _ == "position" ) ) println("include position")
if( list.exists( x => x.startsWith("p" ) ) ) println("include p*")
if( list.exists( x => ! x.startsWith("q" ) ) ) println("No q*")
if( list exists (_ startsWith "po") ) println("include po*")
}
}