Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

書籍 リファクタリング−プログラマーの体質改善 | データの再編成 | オブジェクトによる配列の置き換え

パンくず

リファクタリング-プログラマーの体質改善テクニック
データの再編成
オブジェクトによる配列の置き換え

内容

リファクタリング

オブジェクトによる配列の置き換え

適用ケース要約

一部の要素が別の意味を持つような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年の経験があります