SyncQiita

ActiveRecordでnew => build => save! するとどうなる

関連付けのあるモデルにおいて、親レコードをnew => 子レコードをbuild => 親レコードをsave! したときの挙動が複雑な気がしたのでメモ。 (理解力が不足しているだけかもしれない。) 検証環境: ActiveRecord 6.0.2.1 追記 さんざん書いてから気づいたのだ…

ERBで'<%='の前にある空白文字を取り除くシンプルな方法は用意されていない...のか?

リファレンス 基本形 > ERB.new("<%= :hoge %>").result # => "hoge" > ERB.new(" <%= :hoge %> \n").result # => " hoge \n" 後ろを消したい リファレンスによれば、trim_modeを"-"にした場合、「行末が-%>のとき改行を出力しない」。 > ERB.new("<%= :hoge…

デメテルの法則

「ドットがつながったらあかんで」とかいうやつ、くらいの認識しかなかったが整理できたのでメモ。 結論としては、「ドットがつながったらあかんで」ではなく、「ドットがつながったときは不要な依存をつくっちゃう場合があるから、ほんとにそれでいいかよく…

クラス変数とインスタンス変数

職場で「クラス変数とクラスインスタンス変数の違い」が話題にあがっていて、以前理解したよな、と思いつつ咄嗟に整理して述べられないなと思ったので、思い出しつつまとめてみる。 基本的にはクラス変数とインスタンス変数というものがある。 まずサンプル…

Nonblocking TCP Server

Socket(TCP)通信をかじったのでメモ。 first implementation サーバ。 require 'socket' server = TCPServer.new(4481) loop do connection = server.accept request = connection.read connection.write("request served: #{request}") connection.close en…

superをフックメソッドで代替すると良い、という話

下記書籍を読んでて学びがあったので、自分なりに整理してメモ。 オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方 要約 継承において、あるメソッドを呼んだら各サブクラスに共通の処理をしつつ、各サブクラス…

gitでrevertしたら再revertが必要な例とその理由

git revertで注意すべきこと - Qiita こちらの記事を読んで、「何が起きるか」はわかったけど「なぜこうなるか」がすぐに分からなかったのでメモ。 具体例 以下の例を考える。 masterブランチからdevブランチを切った。 devブランチでb.txtを追加してコミッ…

DB正規化の注意点

DB設計について、「値Aって値Bから導出可能っぽいな!冗長だからDBには値Aだけもたせよう!」の危険性について考えた。 (前提)正規化のメリット 正規化=冗長性排除により、以下のメリットが得られる。 保守性の向上=更新時に1箇所だけ書き換えればOK 必要な…

なぜBigDecimalでは高い精度で10進数を扱えるのか

「Floatだと丸め誤差が発生するから10進数を扱う精度が低い」 「BigDecimalだと丸め誤差が発生しないから10進数を扱う精度が高い」 という話に触れたのだが、その理由がぱっと理解できなかったので、ちょっと整理して考えてみた。*1 *1:Rubyに限ったトピック…

インスタンス変数とかはselfに依存するという話

@varが何を指すかって、何を元に判断しているのだろうか。

x_evalしたときのコンテクスト(続)

前回x_evalメソッドでのコンテクストについて、selfとklassという側面からまとめた。*1 今回はローカル変数の状態という側面を加えて、x_eval/x_execメソッドでのコンテクストについておさらいする。 *1:https://tamani.hatenadiary.jp/entry/2019/08/04/135…

x_evalしたときのコンテクスト

コンテクスト 「コンテキストとはおおざっぱに言えばローカル変数の状態、self, klassから成る。」*1 *1:https://blog.yugui.jp/entry/547

evalことはじめ

eval osamu = 'tezuka osamu' # => "tezuka osamu" eval('osamu') # => "tezuka osamu"

StructとOpenStruct

似た名前だが意外と挙動が異なるな、と思ったのでメモ。

Educational DP Contest A

A - Frog 1

AtCoder Regular Contest 037 B

B - バウムテスト

AtCoder Beginner Contest 031 B

B - 埋め立て

AtCoder Typical Contest 001 A

A: 深さ優先探索 - AtCoder Typical Contest 001 | AtCoder

AtCoder Beginner Contest 131 C

C - Anti-Division

AtCoder Beginner Contest 134 C

C - Exception Handling

AtCoder Beginner Contest 132 A

A - Fifty-Fifty

AtCoder Beginner Contest 134 A

A - Dodecagon

AtCoder Beginner Contest 135 A

C++の基本的なところ、本読むより実際に書いた方が覚えられそうなので練習する。 A - Harmony

特異メソッドのmix-in

mix-inにおける特異メソッドの扱いがよく分かっていなかったのでメモ。 結論は以下。 モジュールに定義された特異メソッドはmix-inされない いろいろmix-inしたい場合はincludeとextendを組み合わせる 「extendedフックでinclude」、「includedフックでexten…

Rubyのマルチスレッド

プロセスについて学んだのでついでにスレッドも触ってみる。

『なるほどUnixプロセス』を読んだ

『なるほどUnixプロセス』が良書だった。 かいつまんでメモ。

"<=>"メソッドのオーバーライドによる比較の実装

名著"Effective Ruby"に「"<=>"とComparableモジュールで比較を実装しよう」と書いてあったので江戸時代の身分制度を実装してみた。

ビンゴカード作成問題を解いてみた

問題はこちら。 最初に書いたコード

Rubyにおける(オブジェクトへの参照の)値渡しを理解しようとして無知を感じた

Rubyのメソッド呼び出しではだいたい全部(オブジェクトへの参照を)値渡しする。

Rubyでメソッドの引数にnilを渡すと、デフォルト引数は適用されない。

タイトルのとおりで初歩的な話ながら、知らなかったのでメモ。