Just do IT

思うは招く

2022-07-01から1ヶ月間の記事一覧

【Ruby】{} と Hash.new(0) でハッシュを作るときの違い

一見すると、どちらも同じハッシュを作っているように見える。 irb(main):001:0> Hash.new(0) => {} irb(main):002:0> {} => {} では何が違うのか? Hash.new(0)はハッシュのデフォルト値を設定している {}はデフォルト値を設定していない irb(main):003:0> …

Ruby Hash#slice の便利な使い方

たとえば、こんな配列とHashがあったとする。 keys = %w[hoge bar] hash = { 'hoge'=> 'ほげ', 'aaa'=> 'あああ', 'bar'=> 'ばあー'} keys配列の各要素をkeyとして、hashからそれぞれ対応するキーとバリューを取得したいときはHash#sliceを使うと便利。 > ha…

Ruby の select と find の違い

たとえば以下の配列から、初めに見つかった3の倍数を取り出したいとき。 nums = [1, 2, 3, 4, 5, 6, 7, 8, 9] selectを使うとこうなる。 > nums.select { |num| (num % 3).zero? }.first => 3 これでも期待するデータを取得できるが、配列内のすべての要素を…

Ruby の flat_map は flatten.map と同じ挙動にはならない

flat_mapがflatten.mapを省略したものだと勘違いしていた話。 ここにネストした配列がある。 > arr = [[1,2], [3,4]] => [[1, 2], [3, 4]] flattenすると、平坦な配列になる。 > arr.flatten => [1, 2, 3, 4] flattenした後にmapして各要素を2倍にしたいとき…

RubyのProcクラスとは何か?

Procクラスとは、処理のまとまりをオブジェクトで表現したものです。Procクラスはコードを見ながらじゃないと理解できないと思うので、まずは以下の例を見てください。 def hello puts 'hello' end なんの変哲もないメソッドです。helloメソッドを実行してみ…

VSCodeでGithubのPRを開こうとすると Error loading webview: Error: Could not register service workers

vscode上でレビューするためにPRを開こうと思ったら、PR画面が表示されない。エラーで以下のメッセージが出ていた。 Error loading webview: Error: Could not register service workers: InvalidStateError 解決方法: VSCodeのプロセスをkill(強制終了)…

ROIの概念はプロダクト開発にも応用できる

以下の記事を読んだ感想を残す。 プロダクト開発現場でのROIの考え方|taniguchi(タァニ)|note 僕はマーケティング出身ということもあり、ROIはマーケティング用語という印象が強く、「どれくらいの投資でどれだけ儲けたか」という意味しかないと思ってい…

2022 NBA Finals の感想

自分が応援しているセルティックスはウォリアーズに4−2で負けた。悔しいし残念だ。 2022 NBA Finals | NBA.com でも、ここ数年突破できていなかったカンファレンスファイナルの壁をついに破った。カイリーがいてもダメだったのを、若いメンバーが達成した。…

git fetch してリモートリポジトリの変更確認だけしたいときの方法

Git

結論 リモートリポジトリの変更を確認だけしたいとき。 # リモートリポジトリの変更履歴をローカルリポジトリに持ってくる git fetch # これでリモートリポジトリの変更確認ができる git log origin/master --oneline --graph 詳しく git fetch(git fetch or…

Enumerable#inject 初期値ありなしの挙動の違い

レシーバが配列の場合 初期値がない場合 > [1, 2, 3].inject { |result, item| p result + item*2 } 5 11 => 11 初期値がない場合、先頭の要素と2番めの要素をブロックに渡す 上記の場合、resultに1、itemに2が渡されており、item*2されていることから1+4に…

Ruby 文字列中のアポストロフィも含めて String#scan する

String#scan(/[\w'.]+/)でどうだろうか。 > string = "I'm a good person, and you? You don't look so smart." > string.scan(/[\w'.]+/) => ["I'm", "a", "good", "person", "and", "you", "You", "don't", "look", "so", "smart."] 文末のピリオドを含め…

【Ruby】String#split("") をするなら String#chars を使う

> 'AAAAAAAAA'.split("") => ["A", "A", "A", "A", "A", "A", "A", "A", "A"] > 'AAAAAAAAA'.chars => ["A", "A", "A", "A", "A", "A", "A", "A", "A"] 後者のほうがスッキリ書けてよい。

Ruby の divmod メソッドとは

割った数と、余りを配列で返す。 3 ÷ 2をすると、割った数は1、余りは1なので、[1, 1]という配列が返る。 > 3.divmod 2 => [1, 1] selfがマイナスでも計算できる。 > -3.divmod 2 => [-2, 1] selfと割る数がマイナスでも計算できる。 > -3.divmod -2 => [1, …

Rubocop で spec path should end with *_spec.rb が出たときにチェックすること

Rubocopでたまにこういったふうに怒られることがある。 spec path should end with *_spec.rb こんなときはどこを確認すればいいか? 確認項目: スペックファイルが_spec.rbで終わっているか? ファイル名にタイポや間違いはないか? テスト元のファイルがh…

Ruby の dup と clone の違い

Rubyのリファレンスにはこう書かれている。 dup はオブジェクトの内容, taint 情報をコピーし、 clone はそれに加えて freeze, 特異メソッドなどの情報も含めた完全な複製を作成します dup はオブジェクト内容とtaint情報をコピーする clone は上記に加えて…

Rubyのdupとは何か

結論: dupとはオブジェクトをコピーするメソッドです 細かく言うと「シャロウコピー(Shallow Copy)」します コレクション(配列やハッシュ)をdupするときは要注意です 破壊的な変更は同じobject_idを持つオブジェクトに影響が及ぶ dupのチカラ 配列やハ…

Ruby の eql? と equal? の違い

結論: eql?はオブジェクトの値が同じかどうかを評価する equal?はobject_idが同じかどうかを評価する irb(main):001:0> obj = %w(hoge bar baz) => ["hoge", "bar", "baz"] irb(main):003:0> copy = obj.dup => ["hoge", "bar", "baz"] # 値は同じなのでtru…

Vimium でサイト全体でキーバインドを除外する方法

一番簡単なのは、除外したいサイトを開きながらVimiumの設定を開いて、Keysに何も入力せずにSave Changesを押す。