Closed7

2024-04-08 週の読んだ記事 (コードレビュー/RSpec flaky/技術駆動/目的駆動名前設計/完全コンストラクタ/Tell, Don't Ask

ブシトラブシトラ

4/9

https://qiita.com/jnchito/items/56ba52c9a7246fc5016a

  • JavaScript実行を待っていないケース
    • sleepは絶対にダメ派閥なので、共感
  • 並び順依存
    • match でなく、 include にする
  • 動的な連番依存
    • 静的に明示することで、依存しないようにする

割れ窓理論でflakyを見過ごすと、そこから崩壊が始まるので
チームでどうするか策を講じておくのが吉よねぇ

ブシトラブシトラ

4/10

https://customers.microsoft.com/ja-jp/story/1745181603188532421-recruit-co-ltd-azure-professional-services-ja-japan

OpenAI 社が提供している ChatGPT も実験的に使ってみましたが、Azure OpenAI Service はレスポンス速度が早く、ChatGPT に比べて 1/3 の時間で回答を返すことができます

そんな早いのか。ユーザー自身が気づいていないニーズを誘発させるの、ジョブ理論を超えてる。。すげぇ。

https://www.jalan.net/chat/?ccnt=pc_yad_top_theme_sugoibot_init

URL、sugoibot だw

ブシトラブシトラ

4/13

https://zenn.dev/t_fukuyama/articles/4e16f92b342e7d

  • 完全コンストラクタ is インスタンス化を確実にできるように「未初期化」の対策や「不正値」の混入を防ぐコンストラクタのバリデーションを設置すること
class Money
  ALLOWED_CURRENCY = [:yen]
  attr_reader :amount, :currency

  def initialize(amount:, currency:)
    if amount < 0
      raise ArgumentError.new('金額は0以上を入力してください')
    end

    if currency.nil?
      raise ArgumentError.new('通貨単位を入力してください')
    end

    unless ALLOWED_CURRENCY.include?(currency.to_sym)
      raise ArgumentError.new("#{currency}は許可されていない通貨単位です")
    end

    @amount = amount
    @currency = currency
    self.freeze #イミュータブル化
  end

  def add(other)
    if @currency != other.currency
      raise ArgumentError.new('通貨単位が違います')
    end

    added = @amount + other.amount
    Money.new(amount: added, currency: @currency)
  end
end

# minus_money = Money.new(amount: -1,  currency: 'yen')
# NG 金額が マイナス
# nil_currency_money = Money.new(amount: 100,  currency: nil)
# NG 通貨単位がnil

money = Money.new(amount: 100,  currency: 'yen')
money.add(Money.new(amount: 500, currency: 'yen'))
# OK
ブシトラブシトラ

4/14

https://thoughtbot.com/blog/tell-dont-ask

Tell, Don't Ask。 優れたOOP とは、オブジェクトにクエリを実行してその代わりに動作するのではなく、オブジェクトに何をしてもらいたいかを伝えることです。データとそのデータに依存する操作は、同じオブジェクトに属します。

  • クラスが他のクラス気にしたりいじったりするのは、デメテルの法則に違反する
このスクラップは2024/04/14にクローズされました