Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

IT勉強会での初プレゼンなどお助けします!

勉強会でスピーカーをやりたいけど、プレゼンが初めて、苦手という方に無償でコーチできます。スライドのレビューや録画したリハへのアドバイスなどなど。Twitter@jyukutyoまでメンションでもDMでもお気軽にご連絡ください。

私はIT講師の経験があり、プレゼンはデブサミやJJUG CCCなど200人規模の経験が豊富で最大800人の前でプレゼンしました。海外ではDevoxxUSで。デブサミ2017では公募スピーカー1位、デブサミ関西2012アワードで5位となりました。

ScalaのSnippetを写経する(1)-Abstract Types

Scala公式サイトにあるSnippetを淡々と学んでいきます。
サンプルコードはコピペしちゃだめ!必ず手打ち!写経していきます。

Snippet: Abstract Types | The Scala Programming Language

package sample.snippet

object AbstractTypes extends Application {

  abstract class Buffer {
    type T
    val element: T
  }
  
  def newIntBuffer(el: Int) = new Buffer {
    type T = Int
    val element = el
  }
  
  println("要素は" + newIntBuffer(1).element)
  
  abstract class SeqBuffer {
    type T
    val element: Seq[T]
    def length = element.length
  }
  
  def newIntBuffer(el: Int*) = new SeqBuffer {
    type T = Int
    val element = el
  } 
  
  println("要素の長さは" + newIntBuffer(1, 2, 3).length)
  println("要素の長さは" + newIntBuffer(1, 2, 3, 4, 5).length)
}

特に目新しいことはないかな。。。
Seq[T]のSeqはtraitでScalaの組み込みクラス。Listとかのスーパークラス
Tはジェネリクスだろうね。
Int*は可変長引数。
def newIntBuffer(el: Int)はクラスを定義してるんじゃなくて、関数を定義してるんだろう。


実行結果。

要素は1
要素の長さは3
要素の長さは5