Решение на Девета задача от Мария Рангелова

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

Към профила на Мария Рангелова

Резултати

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

Код

REPOSITORY = 'https://github.com/mrangelova/ruby-retrospective-2015-1'
# Двадесет неща, които научих.
# 1. Enumerable е супер силен!
# 2. Речниците са полезно нещо!
# Адекватното именоване на променливи, константи, etc. е важно. Много.
# Четимостта на кода също. В този ред на мисли:
# 3. При chain-ване на много методи по-четимо е, ако всеки е на нов ред. Например:
#
# enum_for(:each_rational).
# lazy.
# select { |numerator, denominator| numerator.gcd(denominator) == 1 }.
# map { |numerator, denominator| Rational(numerator, denominator) }.
# take(count).
# each(&block)
# 4. Хубаво е различните смислови частти в един метод да се разделят с празен ред.
# 5. More is more!
# Не винаги най-краткото решение е най-добро. Добавянето на нови (по-семпли)
# методи и класове прави кода по-разбираем.
# 6. Като аргумент на методите от Enumerable може да се подава и име на метод.
# 7. Можем да дефинираме класове в класове (*ти да видиш*).
# 8. Ако ни трябва метод, който прави нещо с обекти от String, Array, ...,
# най-вероятно вече съществува. Та.. хубаво е да се консултираме с документацията
# по-често. :)
# 9. Ако искаме да можем да срявняваме обекти от даден клас, необходимо е
# да include-нем Comparable и да дефинираме совалка.
# 10. Ако пък искаме обекти от даден клас да отговарят на методите от Enumerable,
# трябва да го include-нем в класа и да дефинираме метод each.
# 11. Когато имаш проблем и не знаеш откъде да започнеш, започни от нещо малко и просто.
# Rome wasn't built in a day..
# 12. Разбрах защо puts {}.class не прави каквото очаквам.
# 13. Мутирането на обекти е лошо. Мутиращите методи също. Стремим се да не ги ползваме.
# 14. Според style guide-a eдиничните кавички са за предпочитане когато няма нужда от двойни.
# 15. Има Range с две точки (1..10), а има и Range с три точки (1...10). При това са различни.
# 16. Паралелното присвояване и splat оператора са удобни.
# 17. В - С - И - Ч - К - О Е О - Б - Е - К - Т !
# 18. not, or и and са по-четими от !, || и &.
# Понякога обаче са с различен приоритет.
# 19. Когато някой параметър, подаден в блок, е ненужен, може да се замени с _.
# 20. Кодът се пише преди всичко да бъде четен от хора, не машини.

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

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 11cc280 Move '<=>' operator on previous line
From /tmp/ruby-retrospective-2015-1/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
https://github.com/mrangelova/ruby-retrospective-2015-1/compare/767dd8dfe46...11cc280ffb8

‘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.00481 seconds
8 examples, 0 failures
OK
....................

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

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

Finished in 0.02762 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.00159 seconds
1 example, 0 failures

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

Мария обнови решението на 27.01.2016 13:52 (преди около 9 години)

+REPOSITORY = 'https://github.com/mrangelova/ruby-retrospective-2015-1'
+
+# Двадесет неща, които научих.
+
+# 1. Enumerable е супер силен!
+
+# 2. Речниците са полезно нещо!
+# Адекватното именоване на променливи, константи, etc. е важно. Много.
+
+# Четимостта на кода също. В този ред на мисли:
+
+# 3. При chain-ване на много методи по-четимо е, ако всеки е на нов ред. Например:
+#
+# enum_for(:each_rational).
+# lazy.
+# select { |numerator, denominator| numerator.gcd(denominator) == 1 }.
+# map { |numerator, denominator| Rational(numerator, denominator) }.
+# take(count).
+# each(&block)
+
+# 4. Хубаво е различните смислови частти в един метод да се разделят с празен ред.
+
+# 5. More is more!
+# Не винаги най-краткото решение е най-добро. Добавянето на нови (по-семпли)
+# методи и класове прави кода по-разбираем.
+
+
+# 6. Като аргумент на методите от Enumerable може да се подава и име на метод.
+
+# 7. Можем да дефинираме класове в класове (*ти да видиш*).
+
+# 8. Ако ни трябва метод, който прави нещо с обекти от String, Array, ...,
+# най-вероятно вече съществува. Та.. хубаво е да се консултираме с документацията
+# по-често. :)
+
+# 9. Ако искаме да можем да срявняваме обекти от даден клас, необходимо е
+# да include-нем Comparable и да дефинираме совалка.
+
+# 10. Ако пък искаме обекти от даден клас да отговарят на методите от Enumerable,
+# трябва да го include-нем в класа и да дефинираме метод each.
+
+# 11. Когато имаш проблем и не знаеш откъде да започнеш, започни от нещо малко и просто.
+# Rome wasn't built in a day..
+
+# 12. Разбрах защо puts {}.class не прави каквото очаквам.
+
+# 13. Мутирането на обекти е лошо. Мутиращите методи също. Стремим се да не ги ползваме.
+
+# 14. Според style guide-a eдиничните кавички са за предпочитане когато няма нужда от двойни.
+
+# 15. Има Range с две точки (1..10), а има и Range с три точки (1...10). При това са различни.
+
+# 16. Паралелното присвояване и splat оператора са удобни.
+
+# 17. В - С - И - Ч - К - О Е О - Б - Е - К - Т !
+
+# 18. not, or и and са по-четими от !, || и &.
+# Понякога обаче са с различен приоритет.
+
+# 19. Когато някой параметър, подаден в блок, е ненужен, може да се замени с _.
+
+# 20. Кодът се пише преди всичко да бъде четен от хора, не машини.

Мария обнови решението на 27.01.2016 13:53 (преди около 9 години)

REPOSITORY = 'https://github.com/mrangelova/ruby-retrospective-2015-1'
# Двадесет неща, които научих.
# 1. Enumerable е супер силен!
# 2. Речниците са полезно нещо!
-# Адекватното именоване на променливи, константи, etc. е важно. Много.
+# Адекватното именоване на променливи, константи, etc. е важно. Много.
# Четимостта на кода също. В този ред на мисли:
# 3. При chain-ване на много методи по-четимо е, ако всеки е на нов ред. Например:
#
# enum_for(:each_rational).
# lazy.
# select { |numerator, denominator| numerator.gcd(denominator) == 1 }.
# map { |numerator, denominator| Rational(numerator, denominator) }.
# take(count).
# each(&block)
# 4. Хубаво е различните смислови частти в един метод да се разделят с празен ред.
# 5. More is more!
-# Не винаги най-краткото решение е най-добро. Добавянето на нови (по-семпли)
-# методи и класове прави кода по-разбираем.
+# Не винаги най-краткото решение е най-добро. Добавянето на нови (по-семпли)
+# методи и класове прави кода по-разбираем.
# 6. Като аргумент на методите от Enumerable може да се подава и име на метод.
# 7. Можем да дефинираме класове в класове (*ти да видиш*).
# 8. Ако ни трябва метод, който прави нещо с обекти от String, Array, ...,
-# най-вероятно вече съществува. Та.. хубаво е да се консултираме с документацията
-# по-често. :)
+# най-вероятно вече съществува. Та.. хубаво е да се консултираме с документацията
+# по-често. :)
# 9. Ако искаме да можем да срявняваме обекти от даден клас, необходимо е
-# да include-нем Comparable и да дефинираме совалка.
+# да include-нем Comparable и да дефинираме совалка.
# 10. Ако пък искаме обекти от даден клас да отговарят на методите от Enumerable,
-# трябва да го include-нем в класа и да дефинираме метод each.
+# трябва да го include-нем в класа и да дефинираме метод each.
# 11. Когато имаш проблем и не знаеш откъде да започнеш, започни от нещо малко и просто.
-# Rome wasn't built in a day..
+# Rome wasn't built in a day..
# 12. Разбрах защо puts {}.class не прави каквото очаквам.
# 13. Мутирането на обекти е лошо. Мутиращите методи също. Стремим се да не ги ползваме.
# 14. Според style guide-a eдиничните кавички са за предпочитане когато няма нужда от двойни.
# 15. Има Range с две точки (1..10), а има и Range с три точки (1...10). При това са различни.
# 16. Паралелното присвояване и splat оператора са удобни.
# 17. В - С - И - Ч - К - О Е О - Б - Е - К - Т !
# 18. not, or и and са по-четими от !, || и &.
-# Понякога обаче са с различен приоритет.
+# Понякога обаче са с различен приоритет.
# 19. Когато някой параметър, подаден в блок, е ненужен, може да се замени с _.
# 20. Кодът се пише преди всичко да бъде четен от хора, не машини.

Имаш някои методи, които не са част от публичния интерфейс и би следвало да са private.

Възползвай се от връщатаната стойност на тернарния оператор при присвояване, включително множествено такова:

condition ? (x = :foo) : (x = :bar)
#vs
x = condition ? :foo : :bar

condition ? (x, y = :foo, :bar) : (x, y = 14159, 26535)
# vs
x, y = condition ? [:foo, bar] : [14159, 26535]

6. Като аргумент на методите от Enumerable може да се подава и име на метод.

Вероятно е само от wording-a, но за всеки случай - може би единственият метод от Enumerable, който може да взема име в този смисъл е reduce. Искала си да кажеш, че с & може да се обърне символ към блок, който съответства на метода с това име.