logo header
logo header
logo header
logo header
  • 2014.12.08
  • 技術ブログ開発

テストケースはサンプルコード

前回の「Ginqの利便性と性能を天秤にかけて」ではGinqを取り上げました。
今度は違った視点で優れていると感じた事について書いてみたいと思います。

ドキュメントが少ない時にやること

Ginqの紹介記事を見てとても便利そうなので使ってみたのですが、代表的なコードしかないのでその他のメソッド一覧や詳細な使い方が分かりません。
そんな時、どうすればよいでしょうか?ソースを追う事がありますが、その他にテストケースを見る方法があります。
幸いにしてGinqのテストケースは充実しているので容易に使い方が分かります。

Ginqのテストケースを紐解く

それではginq/test/GinqTest.phpを見てみましょう。
testで始まるメソッドがテストケースです。全部で70個あるので一部を抜き出しました。一覧は最後に記載しています。

testRepeat()

repeat()は引数で指定した値を無限に繰り返します。take()と連携すると特定の個数の配列を作る事ができます。
また、repeat()の2つ目の引数に個数を指定する事もできます。

testFirstOrElse()

firstOrElse()はfirst()と似ていますが、引数で指定した条件と一致しない場合は1つ目の引数の値を返します。
デフォルト値がある場合に便利ですね。

testUnion()

union()は引数で指定した配列と連携されてきた配列の和集合を返します。

testExcept()

except()はunion()と逆に差集合を返します。

まとめ

どんなに優れたコードを書いても、使い方が分からなければなかなか使ってもらえないため、機会損失になってしまいます。
ですが、このようにテストケースを書く事で品質を保証できて、更にサンプルコードとして使えば一石二鳥です。
テストケースを作るのは大変な事ですが、このように考えると違った面が見えてこないでしょうか?

Ginqのメソッド一覧

  • getIterator()
  • toLookup()
  • toAList()
  • toAListRec()
  • toArray()
  • toArrayRec()
  • any()
  • all()
  • count()
  • sum()
  • average()
  • min()
  • minWith()
  • max()
  • maxWith()
  • first()
  • firstOrElse()
  • last()
  • lastOrElse()
  • elseIf()
  • contains()
  • containsKey()
  • foldLeft()
  • foldRight()
  • reduceLeft()
  • reduceRight()
  • unfold()
  • iterate()
  • partition()
  • zero()
  • range()
  • repeat()
  • cycle()
  • from()
  • fromLazy()
  • renum()
  • each()
  • map()
  • select()
  • filter()
  • where()
  • reverse()
  • take()
  • drop()
  • takeWhile()
  • dropWhile()
  • concat()
  • flatMap()
  • selectMany()
  • join()
  • groupJoin()
  • zip()
  • groupBy()
  • ordering()
  • distinct()
  • union()
  • intersect()
  • except()
  • sequenceEquals()
  • getAt()
  • getAtOrElse()
  • getKeyAt()
  • getKeyAtOrElse()
  • memoize()
  • buffer()
  • bufferWithPadding()
  • property()
  • expression()
  • fun()
  • constant()

ともに世界をアップグレードできる、そんな日を夢見て。
Upgrade the World!