😺
コードの「再利用」という言葉への気づき
この記事のコードの再利用とは?
- コードをコピペで使う再利用
- クラス設計としての再利用(デザインパターンとか)
- インターフェースとしての再利用
※ ここが僕が認識していなかった部分で、まだうまく言語化できていません
「再利用」という言葉を再確認したきっかけ
最近コードを書きながら、 「こういう機能作りたいんだけど、どういう実装パターンがある?」
みたいなことを ChatGPT に聞くことがあって、そのときに「再利用性が高まります」って言葉がピンとこなくて、自分が理解している「再利用」って言葉は何なんだろう?と考えたのがきっかけです。
また「再利用性」という言葉は抽象度があがるので、この記事では具体的な再利用の方法についてまとめています。
自分の思う「再利用」
「この記事のコードの再利用とは?」で書いた通り、自分が思う「再利用」は1,2の部分でした。
1. コードをコピペで使う再利用
コードをコピペして使う再利用は、一番簡単で、一番よくやる再利用方法だと思います。
2. クラス設計としての再利用(デザインパターンとか)
クラス設計としての再利用は、クラス設計のパターンを使って、クラスを再利用する方法で、これもよくやる再利用方法だと思います。
3. インターフェースとしての再利用
インターフェースとしての再利用は、同じインターフェースを再利用して機能追加していく方法で、これを「再利用」という言葉で認識していなかったので、この記事を書くきっかけになりました。
具体的に言うと以下のようなデータを異なるフォーマット(CSV、JSON)でエクスポートするコードがあるとします。
class DataExporter
def initialize(exporter)
@exporter = exporter
end
def export(data)
@exporter.export(data)
end
end
class CsvExporter
def export(data)
# NOTE: CSV にデータをエクスポートする処理
puts "Exporting data to CSV: #{data.to_s}"
end
end
class JsonExporter
def export(data)
puts "Exporting data to JSON: #{data.to_json}"
end
end
csv_exporter = DataExporter.new(CsvExporter.new)
json_exporter = DataExporter.new(JsonExporter.new)
csv_exporter.export({ name: "Alice", age: 30 })
# => Exporting data to CSV: {:name=>"Alice", :age=>30}
json_exporter.export({ name: "Alice", age: 30 })
# => Exporting data to JSON: {"name":"Alice","age":30}
エクスポートの処理を抽象化し、インターフェースとして再利用することで、新しいフォーマットを追加する際に、既存のコードを変更せずに追加できるようになります。
以下は XML フォーマットを追加する例ですが、既存のコードを変更せずに追加できることがわかります。
# XML フォーマットを追加
class XmlExporter
def export(data)
puts "Exporting data to XML: <data>#{data.to_s}</data>"
end
end
xml_exporter = DataExporter.new(XmlExporter.new)
xml_exporter.export({ name: "Alice", age: 30 })
# => Exporting data to XML: <data>{:name=>"Alice", :age=>30}</data>
このコードを見ると、
- コードをコピペで使う再利用
-> 例えばCSVを使いたければCsvExporterをコピペすれば使える - クラス設計としての再利用(デザインパターンとか)
-> DataExporterみたいに一つ抽象化を入れて、具体的な実装は別クラスにする設計パターンを再利用する - インターフェースとしての再利用
-> DataExporterを使って、新しいフォーマットを追加すること(例ではXmlExporterを追加)は、DataExporter という既存のインターフェースを利用して実装していて、ここも「再利用」という概念に入るなというのが新発見というか、気づきでした
まとめ
普段何も考えず使っている言葉ですが、「再利用」って何を指して再利用って言ってるのか?というのを改めて考えてみて、自分が認識していた「再利用」の範囲を広げられたので忘れないようにメモしておきます。
Discussion