Sprawdzenie czy jest dobrze zrobione

0

Czy mógłby ktoś zobaczyć czy zrobiłem dobrze zadanie ponieważ jest to mój 1 program w ruby i chciałbym mieć pewność czy jest ok i usłyszeć jakieś wskazówki co można lepiej zrobić.
Treść zadania
Jedną z najprostszych metod szyfrowania jest szyfr podstawieniowy, w którym
za literę podstawia się inną literę. Zaprogramuj dwie klasy:
• klasę Jawna przechowującą napis w postaci jawnej i implementującą metodę
zaszyfruj(klucz) zwracającą obiekt klasy Zaszyfrowane;
• klasę Zaszyfrowane przechowującą napis zaszyfrowany i implementującą metodę
odszyfruj(klucz) zwracającą obiekt klasy Jawna.
Obydwie klasy winne implementować metodę to s. Argument klucz to słownik postaci
{ ’a’ => ’b’, ’b’ => ’r’, ’r’ => ’y’, ’y’ => ’u’, ’u=> ’a’}

Mój kod:

class Jawna
	def initialize(slowo)
		@slowo = slowo
	end
	def to_s
		@slowo
	end
	def zaszyfruj(klucz)
		noweSlowo = ""
		for i in [email protected]
			noweSlowo << klucz[@slowo[i]]
		end
		Zaszyfrowane.new(noweSlowo)
	end
end

class Zaszyfrowane
	def initialize(slowo)
		@slowo = slowo
	end
	def to_s
		@slowo
	end
	def odszyfruj(klucz)
		noweSlowo = ""
		for i in [email protected]
			noweSlowo << klucz.key(@slowo[i].to_s)
		end
		Jawna.new(noweSlowo)
	end
end
1
class Jawna
    def initialize(slowo)
        @slowo = slowo
    end
    def to_s
        @slowo
    end
    def zaszyfruj(klucz)        
        noweSlowo = @slowo.chars.map {|e| klucz[e] || e}
        Zaszyfrowane.new(noweSlowo.join())
    end

end

class Zaszyfrowane
    def initialize(slowo)
        @slowo = slowo
    end
    def to_s
        @slowo
    end
    def odszyfruj(klucz)
        noweSlowo = @slowo.chars.map {|e| klucz.key(e) || e}.join()
        Jawna.new(noweSlowo)
    end
end

key = { "a" => "b", "b" => "r", "r" => "y", "y" => "u", "u" => "a"}

j = Jawna.new "abcdef"
p j
p j.zaszyfruj(key)
p j.zaszyfruj(key).odszyfruj(key)

#<Jawna:0x000000012ef0d0 @slowo="abcdef">
#<Zaszyfrowane:0x000000012eedb0 @slowo="brcdef">
#<Jawna:0x000000012ee928 @slowo="abcdef">

  1. for i in nie jest praktycznie używane
  2. klucz[@slowo[i]] problem gdy danej litery nie ma w hashu klucz
  3. noweSlowo << klucz[@slowo[i]] operatora << używa się najczęścej do dodawania elementów do tablicy
  4. => to hash rocket używany w przeszłości, obecnie raczej notacja obiektowa (jak w js) key = { "a": "b" ...}
  5. tworzenie zmiennej noweSlowo i jej mutowanie, bardziej "ruby way" jest map {}.join()

Edit:
zmieniłem "or" na "II" zgodnie z sugestią hauleth

1 użytkowników online, w tym zalogowanych: 0, gości: 1