パンくず
リファクタリング-プログラマーの体質改善テクニック
データの再編成
オブジェクトによる配列の置き換え
内容
リファクタリング名
オブジェクトによる配列の置き換え
適用ケース要約
一部の要素が別の意味を持つようなArrayがある
適用内容要約
Arrayを取り除き、各要素をフィールドとするオブジェクトを定義する
適用詳細
配列にはあくまで同種の値が設定されるべき。
複数の値を配列に設定している場合は、オブジェクトにすること。
サンプル
プログラマーを表すクラスに主言語と経験年数を保持する機能を実装します。
リファクタリング前は、主言語と経験年数をリストで保持しますが
リファクタリング後は、主言語と経験年数をオブジェクトで保持します。
サンプルコード
class Programmer attr_accessor:name,:language_experience def initialize(name,language,experience) @language_experience=[language,experience] @name=name end def display_language_experience() puts "#{@name}の主言語は#{@language_experience[0]}です。#{@language_experience[1]}年の経験があります" end end tanaka=Programmer.new("tanaka","C#","10") tanaka.display_language_experience suzuki=Programmer.new("suzuki","Java","5") suzuki.display_language_experience
# encoding: Shift_JIS class Programmer attr_accessor:name,:language_experience def initialize(name,language,experience) @language_experience=LanguageExperience.new(language,experience) @name=name end def display_language_experience() puts "#{@name}の主言語は#{@language_experience.language}です。#{@language_experience.experience}年の経験があります" end end class LanguageExperience attr_accessor:language,:experience def initialize(language,experience) @language=language @experience=experience end end tanaka=Programmer.new("tanaka","C#","10") tanaka.display_language_experience suzuki=Programmer.new("suzuki","Java","5") suzuki.display_language_experience
出力(共通)
tanakaの主言語はC#です。10年の経験があります suzukiの主言語はJavaです。5年の経験があります