Je rencontre des problèmes pour refactoriser du code dupliqué à partir de deux méthodes partageant une boucle for. Les deux méthodes avec le code dupliqué sont gcdOfFiveUpToFive et remainderStepsUpToFive. Les deux boucles partagent la variable d'instance de paramètre commun @m à 5 et les deux utilisent une boucle for x dans 1..5, puis définissent @n à x et elles ont toutes deux besoin d'appeler euclidGCD bien que l'on appelle euclidGCD pour son retour valeur et l'autre pour ajouter + = 1 à la variable @count. Je veux vouloir retourner 2 valeurs d'une méthode. Je suppose que je pourrais faire une 4ème instance appelée @countArray et obtenir un tableau du nombre de pas restants.Refactoring d'une boucle pour ruby
require 'minitest/autorun'
class GCDTest < Minitest::Test
def test_euclid_gcd
gcdTestObject=GCD.new(20,5)
assert gcdTestObject.euclidGcd==5
assert gcdTestObject.gcdRemainderSteps==1
end
def test_euclid_two
gcdTestObject=GCD.new(13,8)
assert gcdTestObject.euclidGcd==1
assert gcdTestObject.gcdRemainderSteps==5
end
def test_euclid_loop
gcdTestObject=GCD.new(0,0)
assert gcdTestObject.gcdOfFiveUpToFive==[1,1,1,1,5]
end
def test_count_of_loop
gcdTestObject=GCD.new(0,0)
assert gcdTestObject.remainderStepsUpToFive==[1,2,3,2,1]
end
end
class GCD
attr_accessor :m,:n
attr_reader :count
def initialize(m,n)
@m=m
@n=n
@count=0
end
def euclidGcd
@count=1
[email protected]
[email protected]
r= m % n
until r==0
m=n
n=r
r= m % n
@count+=1
end
return n
end
def gcdRemainderSteps
return @count
end
def gcdOfFiveUpToFive
@m=5
gcdArrayUpToFive=[]
for x in 1..5
@n=x
gcdArrayUpToFive << euclidGcd
end
return gcdArrayUpToFive
end
def remainderStepsUpToFive
@m=5
gcdStepArrayUpToFive=[]
for x in 1..5
@n=x
euclidGcd
gcdStepArrayUpToFive << gcdRemainderSteps
end
return gcdStepArrayUpToFive
end
def fiveLoopExtraction
end
[link] (https://github.com/jackparsons93/gcdAverage/blob/master/euclidGcdAverage.rb) Ceci est un lien github à mon nouveau code avec le guide de style ruby et votre aide, les 6 tests unitaires sont verts . Aussi pensez-vous que j'ai besoin de refactoriser euclid_gcd c'est 11 lignes ou 9 si vous ne comptez pas def et fin. Aussi, je ne pouvais pas trouver sur le guide de style ruby [link] (https://github.com/bbatsov/ruby-style-guide#classes--modules) S'il était correct d'utiliser toutes les majuscules comme une abréviation, mon nom de classe est GCD et il est tout en majuscules mais il est abrégé. Je me demande si toutes les majuscules sont correctes pour un code rubis éloquent. J'ai également omis tous les retours. –
Vous pouvez google guide de style ruby - variables sont également snake_case. Je pense que GCD et Gcd vont bien, pas sûr de ça. Vous n'avez pas besoin des lignes 44 et 46, essayez ce que j'ai écrit, juste une ligne que j'ai pour def gcd_of_5_up_to_5 .... end est suffisant. Je vous suggère de passer par quelques tutoriels/exemples qui expliquent 'map', c'est une fonction importante et souvent utilisée, également trouvée en javascript et dans d'autres langues. –