最近のコーディングネタ
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とか使うといいんですよーと聞いたのでつかってみている
@HKDnet YES さらにいうならば今でいうならばRAIIが重んじられているので、生ポインタですらwrapされたスマートポインタ(std::unique_ptr)等を使うのが良いとされていますぞ https://t.co/etx1ZHBtHX
— ぼでー (@bode_mmk) 2017年2月22日
ツイートのリンク先を見ればわかるが、モダンさを感じて結構よさげ。
一方で困っていることもある。
いままで適当に配列つくって渡してーとやっていたがスタック領域以外のところにメモリを確保するようになったのでそのメモリを使うオブジェクトの生存区間とかを意識することになった。
というか意識しなきゃいけないなってことに気づいて結局グローバルにint配列確保するようにしてごまかしている。せっかく教えてもらってるのにすみません……。