Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

Scalaのコレクション系列多くてどれを使っていいのか悩む

PHPだとarray()で済んでたからな…。


とりあえず配列は、線形処理ならList、ランダムアクセスならVectorで、
辞書ならMapを使っておけばいいのでしょうか。。。

scala.collections.immutable

Traversable
└Iterable
 ├Set
 │├HashSet
 │├SortedSet
 ││└TreeSet
 │├BitSet
 │└ListSet
 ├Map
 │├HashMap
 │├SortedMap
 ││└TreeMap
 │└ListMap
 └Seq
  ├IndexedSeq
  │├Vector
  │├NumericRange
  │└Range
  └LinearSeq
   ├List
   ├Stream
   ├Queue
   └Stack

scala.collections.mutable

Traversable
└Iterable
 ├Set
 │├HashSet
 │├BitSet
 │├OvservableSet
 │├SynchronizedSet
 │├ImmutableSetAdaptor
 │└LinkedHashSet
 ├Map
 │├HashMap
 │├WeakHashMap
 │├OpenHashMap
 │├LinkedHashMap
 │├ObservableMap
 │├SynchronizedMap
 │├ImmutableMapAdaptor
 │├ListMap
 │└MultiMap
 └Seq
  ├IndexedSeq
  │├ArraySeq
  │├StringBuilder
  │└ArrayBuffer
  ├Buffer
  │├OvservableBuffer
  │├SynchronizedBuffer
  │└ListBuffer
  ├Stack
  │└SynchronizedStack
  ├ArrayStack
  ├PriorityQueue
  │└SynchronizedPriorityQueue
  └LinearSeq
   ├MutableList
   │└Queue
   │ └SynchronizedQueue
   ├LinkedList
   └DoubleLinkedList

初めて無職になった。まだニートではない

12月。



1日に突然会社がなくなるというアナウンスがある。
メインタイトルのアプリが違う会社に買い取られることになったので、アプリと一緒にその会社に転籍するかここで辞めるか10日で決めろと言われる。



10日。転籍条件があれだったので、辞めることにする。



11日から有給休暇の消化と、引き継ぎドキュメントを書いたりする。



有給消化。積みゲーと積み小説と積み勉強も消化しながら、旅行とか自炊をする。
オブジェクト指向ドメイン駆動設計、Scalaの本を読む。
有給は5日くらい残ってもったいなかった。



年末年始。ゴロゴロする。



2016年。就職活動しながら、Scalaを勉強する。

Scalaの変位指定アノテーションと上限・下限境界がわからない

LL脳には辛い。
説明を読んでるときには、「なるほどなー」、と思うんだけど、いざ出てくると「どういう意味だっけ…」ってなるし、「いつ使えばいいんだ…」ってなってる。

classだけではなくて、defにも使えるので、混乱する。。。


とりあえずこれは理解した。

class Aaa
class Bbb extends Aaa
class Ccc extends Bbb



class D[T >: Bbb]


val dAaa = new D[Aaa] // dAaa: D[Aaa] = D@4b2bac3f

val dBbb = new D[Bbb] // dBbb: D[Bbb] = D@4988d8b8

val dCcc = new D[Ccc]
// error: type arguments [Ccc] do not conform to class D's type parameter bounds [T >: Bbb]



class E[T <: Bbb]


val eAaa = new E[Aaa]
// error: type arguments [Aaa] do not conform to class E's type parameter bounds [T <: Bbb]

val eBbb = new E[Bbb] // eBbb: E[Bbb] = E@2cd2a21f

val eCcc = new E[Ccc] // eCcc: E[Ccc] = E@3514a4c0

上限境界と下限境界は、定義したクラスとかメソッドとかに渡す時にチェックするってことかな。