何时以及如何将方法引入课堂?

时间:2015-03-27 23:30:04

标签: ruby

下面是我编写的一些代码,用于解决我正在学习的课程的问题。我工作的解决方案很好,但问题是要求使用类实现,这意味着我们要采用我们提出的任何解决方案。在下面的第一个块是我写的方法,在第二个块是方法的类实现,它们都做了几乎相同的事情。但是,我没有看到班级改编的好处。另外,我并不特别知道单个类方法对它自己做多少太多或太少。我是否划分了一切?或者,我是否将与某件事相关的操作保存在一个方法中?

def cipher(coded_message)
  input = coded_message.downcase.split("")
  cipher = {}
  alphabet_array = %w(a b c d e f g h i j k l m n o p q r s t u v w x y z)
  alphabet_array.each_with_index {|e,i|  cipher[e] = alphabet_array[i-4]}
   (0..9).to_a.each{|e| cipher[e.to_s] = e}
  %w[@ # $ % ^ & *].each{|e| cipher[e] = " "}
  %w[. , ! ? ; : -].each{|e| cipher[e] = e}
  input.map! {|e| e = cipher[e]}
  input = input.join("")
  if input.match(/\d+/)
    input.gsub!(/\d+/) { |num| num.to_i / 100 }
  end
  return input
end


class Cipher
  def initialize(shift=4,exaggerate=100)
    @shift = shift
    @exaggerate = exaggerate
  end

  def create_cipher
    @cipher = {}
    @alphabet_array = ('a'..'z').to_a
    @alphabet_array.each_with_index {|e,i| @cipher[e] = @alphabet_array[i - @shift]}
    (0..9).to_a.each{|e| @cipher[e.to_s] = e}
    %w[@ # $ % ^ & *].each{|e| @cipher[e] = " "}
    %w[. , ! ? ; : -].each{|e| @cipher[e] = e}
  end

    def decode(input=nil)
      @input = input
      create_cipher
      @input = @input.downcase.split("")
      @input.map! {|e| e = @cipher[e]}
      @input = @input.join("")
      if @input.match(/\d+/)
        @input.gsub!(/\d+/) { |num| num.to_i / @exaggerate }
      end
      return @input
    end
end

1 个答案:

答案 0 :(得分:0)

我认为将代码从方法转移到类中的最大好处是可测试性和可维护性。单独测试更容易,新类可能会在很长一段时间内保持稳定。