下面是我编写的一些代码,用于解决我正在学习的课程的问题。我工作的解决方案很好,但问题是要求使用类实现,这意味着我们要采用我们提出的任何解决方案。在下面的第一个块是我写的方法,在第二个块是方法的类实现,它们都做了几乎相同的事情。但是,我没有看到班级改编的好处。另外,我并不特别知道单个类方法对它自己做多少太多或太少。我是否划分了一切?或者,我是否将与某件事相关的操作保存在一个方法中?
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
答案 0 :(得分:0)
我认为将代码从方法转移到类中的最大好处是可测试性和可维护性。单独测试更容易,新类可能会在很长一段时间内保持稳定。