最近のコーディングネタ

Ruby

  • テスタビリティのために引数をとりたい
  • 普通にプロパティアクセスするような気楽さでアクセスしたい

この2つの気持ちがあわさってこういうことをよくしている

class Foo
  attr_reader :baz, :qux

  def bar
    @bar ||= build_bar(baz, qux)
  end

  def build_bar(baz, qux)
    # baz, quxは結局 @baz, @quxなのだがとっておくとテストがしやすい
    # なんか適当な処理
  end
end

# test

subject = Foo.new
assert(foo.build_bar(1, 2) == 3) # こういう感じで内部状態@baz, @quxを意識しなくてよくなる

#build_bar がもう少し重い処理ならFactoryを使うべきだとは思うけど全部につくるのはめんどくさくてこういう妥協をしている

JavaScript

webpack

webpack入門した。自分で調べながらかいたらこの程度で済んでいる。

https://github.com/hkdnet/wakatime-viewer/blob/master/webpack.config.js

  • cssはもともと書いてないからsassとかの設定がない
  • 画像サーブもしてないからそのへんもない
  • htmlサーブはやるけどまだ書いてない

このへんが短くなってる理由だろうか。どんどん育てていきたい

underscore

標準JavaScriptのArrayで微妙にたりなくて使ってるがunderscoreに渡す関数内で普通にArray.prototype.reduceとか呼んでてどうなんだろうという感じがある。

fetch

fetch APIをつかってHTTPリクエストを送ろうとしている。自分のAPIエンドポイントのためにClientクラスも作っている。

そうするとテストのためにはfetchをDIで使えるようにしておくとよい、気がする。

class Client {
  constructor(opts) {
    this.fetch = opts.fetch || fetch;
  }
  getFoo() {
    return this.fetch('/foo');
  }
}

一方でfetchは呼び出しコンテキスト(っていう言い方であってますか?Rubyでいうレシーバみたいな)がwindowであることを期待しているので、結局bindして渡す必要がある。

const client = new Cleint(fetch.bind(window));

いやー、微妙にダサい。どうしたもんか。

C++

先日書いたけど競プロっぽいのにC++使ってる。

そして関数内で int[n] を確保したらセグフォって「は???」という気持ちだったのだけどそういうこともあるらしかった。
そのあとぼでさんにunique_ptrとか使うといいんですよーと聞いたのでつかってみている

ツイートのリンク先を見ればわかるが、モダンさを感じて結構よさげ。

一方で困っていることもある。
いままで適当に配列つくって渡してーとやっていたがスタック領域以外のところにメモリを確保するようになったのでそのメモリを使うオブジェクトの生存区間とかを意識することになった。
というか意識しなきゃいけないなってことに気づいて結局グローバルにint配列確保するようにしてごまかしている。せっかく教えてもらってるのにすみません……。