Решение на Девета задача от Александрина Каракехайова

Обратно към всички решения

Към профила на Александрина Каракехайова

Резултати

  • 6 точки от тестове
  • 2 отнети точки
  • 4 точки общо
  • 1 успешни тест(а)
  • 0 неуспешни тест(а)

Код

REPOSITORY = 'https://github.com/AKarakehayova/ruby-retrospective-2015-1'
#Двадесет неща, които научих:
#1.Трябва да се познават функциите, вградени в езика, за да не се налага да се усложнява кода, за да се пише нещо, което го има наготово.
#2.Важно е да си пишеш сам тестове, за да проверяваш всяка част от кода си и да намираш лесно къде има проблем.
#3. Научих колко полезни са хешовете и как могат да спестят много код.
#4. Не винаги генерирането на напълно случайни числа е удачно. В случаи като във втора задача забавя значително програмата.
#5. Научих, че функцията sample връща произволен елемент от масив.
#6. Да разделям задачата си на по-малки части, по-лесни #проблеми, за да е ясно разграничен логически кода.
#7. Когато include-нем Enumerable и дефинираме each в наш клас #можем да използваме методите, дефинирани в Enumerable.
#8. Използвах и научих доста методи от Enumerable (например #partition).
#9.Да не правя дълги и неясни методи, чиято цел се разбира #трудно.
#10.Да използвам lambda-функции, ако дадена функция ми е #необходима само като помощна в точно един метод.
#11. Да давам ясни имена на методите си,а не като help, за да #може след време да знам какво се очаква от този метод и след #време.
#12. Кодът става по-кратък и елегантен с използването на #паралелно присвояване.
#13. Да спазвам ръководството по стил.
#14. За предпочитане е използването на модули пред #наследяването в случай на нужда от преизползване на методи.
#15. Използването на функции от по-висок ред (map, filter) #спестява доста итерации и изглежда много по-ясно.
#16. Използвах регулярни изрази и научих доста полезни неща, #които мога да правя с тях.
#17. Класове, които са помощни, е добре да са вложени в #главния клас.
#18. Вместо да дефинирам setter-и и getter-и мога да използвам #attr_accessor.
#19. Научих каква е разликата между super и super().
#20. Методите на даден клас, които се ползват единствено като #помощни от други методи на класа, е добре да бъдат дефинирани #в private частта на класа.

Лог от изпълнението

From https://github.com/fmi/ruby-retrospective-2015-1
 * branch            master     -> FETCH_HEAD
HEAD is now at 767dd8d Update the task name in the readme for clarity
Cloning into 'submission'...
HEAD is now at bf43bbf upgraded solution
From /tmp/ruby-retrospective-2015-1/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
https://github.com/AKarakehayova/ruby-retrospective-2015-1/compare/767dd8dfe46...bf43bbfde6c

‘solutions/04.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/04.rb’
‘solutions/02.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/02.rb’
‘solutions/03.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/03.rb’
‘solutions/01.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/01.rb’
OK
........

Finished in 0.0049 seconds
8 examples, 0 failures
OK
....................

Finished in 0.05659 seconds
20 examples, 0 failures
OK
....................

Finished in 0.10838 seconds
20 examples, 0 failures
OK
.........................................................

Finished in 0.02666 seconds
57 examples, 0 failures
From https://github.com/fmi/ruby-homework
 * branch            master     -> FETCH_HEAD
HEAD is now at 9dd040c Modify a test in task 8 to not include empty cells
.

Finished in 0.00158 seconds
1 example, 0 failures

История (1 версия и 2 коментара)

Александрина обнови решението на 27.01.2016 23:21 (преди около 9 години)

+REPOSITORY = 'https://github.com/AKarakehayova/ruby-retrospective-2015-1'
+#Двадесет неща, които научих:
+#1.Трябва да се познават функциите, вградени в езика, за да не се налага да се усложнява кода, за да се пише нещо, което го има наготово.
+#2.Важно е да си пишеш сам тестове, за да проверяваш всяка част от кода си и да намираш лесно къде има проблем.
+#3. Научих колко полезни са хешовете и как могат да спестят много код.
+#4. Не винаги генерирането на напълно случайни числа е удачно. В случаи като във втора задача забавя значително програмата.
+#5. Научих, че функцията sample връща произволен елемент от масив.
+#6. Да разделям задачата си на по-малки части, по-лесни #проблеми, за да е ясно разграничен логически кода.
+#7. Когато include-нем Enumerable и дефинираме each в наш клас #можем да използваме методите, дефинирани в Enumerable.
+#8. Използвах и научих доста методи от Enumerable (например #partition).
+#9.Да не правя дълги и неясни методи, чиято цел се разбира #трудно.
+#10.Да използвам lambda-функции, ако дадена функция ми е #необходима само като помощна в точно един метод.
+#11. Да давам ясни имена на методите си,а не като help, за да #може след време да знам какво се очаква от този метод и след #време.
+#12. Кодът става по-кратък и елегантен с използването на #паралелно присвояване.
+#13. Да спазвам ръководството по стил.
+#14. За предпочитане е използването на модули пред #наследяването в случай на нужда от преизползване на методи.
+#15. Използването на функции от по-висок ред (map, filter) #спестява доста итерации и изглежда много по-ясно.
+#16. Използвах регулярни изрази и научих доста полезни неща, #които мога да правя с тях.
+#17. Класове, които са помощни, е добре да са вложени в #главния клас.
+#18. Вместо да дефинирам setter-и и getter-и мога да използвам #attr_accessor.
+#19. Научих каква е разликата между super и super().
+#20. Методите на даден клас, които се ползват единствено като #помощни от други методи на класа, е добре да бъдат дефинирани #в private частта на класа.

Махнах 2 точки, защото 4-тото решение може да се оправя още доста, както и има места, където не си спазвала конвенциите - в 3-та, примерно, използваш return, където не е нужно. А в 4-та имаш проблеми с индентацията и форматирането на кода.

В четвърта задача:

  • В initialize на Deck-овете просто си копирала кода. Можеше да направиш нещо от типа на:
class Deck
  SUITS = [:spades, :hearts, :diamonds, :clubs]
  RANKS = [2, 3, 4, 5, 6, 7, 8, 9, 10, :jack, :queen, :king, :ace]

  class << self
    def default_deck
      self::SUITS.product(self::RANKS).map do |suit, rank|
        Card.new(rank, suit)
      end
    end
  end

  def initialize(cards = nil)
    @deck = cards || self.class.default_deck
  end
end

class BeloteDeck < Deck
  SUITS = [:clubs, :diamonds, :hearts, :spades]
  RANKS = [7, 8, 9, :jack, :queen, :king, 10, :ace]
end
  • Опитвай да групираш части от кода в методите, като ги разделяш с празни редове

примерно написала си:

def deal
  hand_cards = []
  26.times do
    hand_cards << draw_top_card
  end
  Hand.new(hand_cards)
end

което ще стане по-ясно така:

def deal
  hand_cards = []

  26.times do
    hand_cards << draw_top_card
  end

  Hand.new(hand_cards)
end

т.е. имаш някакви начални данни, правиш нещо с тях и накрая подготвяш изходния резултат

пс. най-чисто би било нещо от типа на

def deal
  hand_cards = Array.new(26) { draw_top_card }

  Hand.new(hand_cards)
end

или може и на един ред :)