11 ways you can use ChatGPT to write code
11 ways you can use ChatGPT to write code | Santiagoにコーディング時のChatGPTユースケースが紹介されていた。
以下のページよりイケてない設定として載っているコードをお借りし、多少修正した上でChatGPTに質問してみた。
コードの説明
このコードは、注文(order)のレポートを生成するクラスを定義しています。
OrdersReportクラスは、初期化時に、注文のリスト(orders)、レポートを作成する期間の開始日(start_date)、終了日(end_date)を引数として受け取ります。
また、OrdersReportクラスには、totalSalesWithinDateRangeメソッドが定義されています。このメソッドは、指定された期間内に注文された注文の総額を計算して返すものです。
最後に、Orderクラスは、OpenStructクラスを継承しています。OpenStructクラスは、Rubyで手軽に構造体のようなオブジェクトを作成するためのクラスです。
コードの改善
以下のコードをRubyの命名規則、Rubyの慣用的なスタイルを用いて書き換えてください。さらに、コード全体を簡略化してください。
- キャメルケースのメソッド名、変数名がスネークケースに修正されている
- 単純にeachでループして処理していたロジックが、
Enumerable#select
やEnumerable#sum
を用いて簡略化されている
テストケースの作成
改善されたOrdersReportクラスの動作をテストするためのコードをいくつか書いてください。
次のようなコードで、OrdersReportクラスの動作をテストすることができます。
Test::Unit用のテストコードをお願いします。
Test::Unitを使用してOrdersReportクラスをテストする場合、以下のようなコードを書くことができます。
ドキュメントの生成
以下がOrdersReportクラスのドキュメントになります。
コードの翻訳
以下が、Pythonで書き換えられたOrdersReportクラスになります。
バグの追跡
このコードでは、orders_within_range
を求める条件にバグがあります。
現在のコードでは、order.placed_at <= @start_date && order.placed_at <= @end_date
となっていますが、これでは、order.placed_at
が@start_date
より小さいかつorder.placed_at
が@end_date
より小さいことを指定しています。このため、現在のコードでは、@start_date
が@end_date
よりも小さい場合、orders_within_range
は空になってしまいます。
これを修正するには、条件をorder.placed_at >= @start_date && order.placed_at <= @end_date
とすることで、日付の範囲内であることを指定するようにすることで、バグを修正できます。
Scaffolding
Webページをスクレイピングし取得したデータをsqlite3のデータベースへ格納するためのコードをRubyで書いてください。
RubyでWebスクレイピングを行うためには、例えば「mechanize」や「nokogiri」といったライブラリを使用することができます。
下記は、mechanizeを使用してWebページをスクレイピングし、そのデータをsqlite3のデータベースへ格納するコードの例です。