Решение на Девета задача от Петър Иванов

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

Към профила на Петър Иванов

Резултати

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

Код

REPOSITORY = 'https://github.com/pepincho/ruby-retrospective-2015-1'
# 1. Кодът на нашата програма да бъде разбираем и лесно четим. Това постигаме като слагаме добри имена на променливите си, ясно обосноваваме различните логически компоненти в програмата ни и подреждаме кода ни, за да бъде по-лесно четим и по-прегледен.
# 2. Добра практика е когато използваме хешове и ги разписваме на няколко реда
# да слагаме на последния ред ',', тъй като ако после искаме да добавяме нови
# неща към него ще бъде по лесно и няма да допуснем грешката да забравим да я сложим.
# 3. Използване на константи вместо hardcode-нати числа в кода ни. По този начин кодът ни е по-лесен за дебъгване и четене след време, когато сме забравили защо сме били сложили въпросното число.
# 4. Използване на "not" вместо "!" при условните конструкции.
# 5. Използване на "(a...b) вместо (a..b - 1)", когато искаме да създадем масив само в интервала [a, b).
# 6. Използване на паралелно присвояне и разпакетирване на променливи, за по-ясен код и намаляване на излишните редове код.
# 7. Разделяне на програмата на по-малки логически компоненти(задачки) и обособяването им в отделни функции, които вършат точно една определена мини задача.
# 8. Използване на операторите "-, +" върху масиви, за да получим нов масив, който е резултат от прилагането на тези операции.
# 9. Използване на "#between?", когато искаме да проверим дали дадено число е в определен интервал.
# 10. Използване на "r#educe()" вместо "#inject()", за по-голяма яснота на кода, тъй като думата "#reduce()" по-ясно описва проблема, който се опитвам да реша, отколкото "#inject()".
# 11. Използване на "Struct.new", за да създадем прости класове, които имат getters и setters, както и полетата на класа. По този начин си намаляваме писане на ненужен код и същевременно е по-четим.
# 12. Използване на метода "#any?()", в чийто блок разписваме допълнителна логичка, чрез коята да проверим дали дадена колекция отговаря на определени условия.
# 13. Изнасяне на повтаряще се логика от кода или парче код, което копираме в отделна функция, за да може да се намали копирането на код и за по-лесно дебъгване и поддържане на кода в бъдеще. По този начин се намалява "spaggetti code".
# 14. Енкапсулиране на кода, т.е даваме на потребителя интерфейсът за който сме се разбрали, без да може да ползва наши вътрешни функции, с които си организираме работата. Използване на private.
# 15. Използване на примерно "#map(&:to_s)" вместо "#map { |x| x.to_s }" върху дадена колекция.
# 16. Използване на "#enum_for", който ще създаде enumerator и всеки път ще вика функцията, която сме му подали, върху обекта.
# 17. Когато дефинираме метод и той може да приема блок е добра практика да слагаме "&block" в сигнатурата му. Например "#each(&block)" вместо "#each". По този начин показваме, че нашият метод може да приема и блокове.
# 18. Използване на "#lazy", който създава lazy enumerator, който ни връща стойност чак тогава, когато е поискина или ни трябва, а не предварително да изгенерира всички стойности.
# 19. Използване на "#loop do" цикъл, когато не знаем колко итерации ще правим. Същата аналогия с "#while(true)". На всяка итерация може да yield-ваме стойности. "#loop do" се използва често, когато създаваме lazy enumerators.
# 20. Използване на "#take" когато искаме да вземем определен брой елементи от енумератора. Ако енумератора е lazy, то трябва да кажем и "#force", за да му кажем, че е нужно да изгенерира нужната бройка елементи.

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

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 264e936 Add improved code of all tasks' solutions.
From /tmp/ruby-retrospective-2015-1/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
https://github.com/pepincho/ruby-retrospective-2015-1/compare/767dd8dfe46...264e936fe2a

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

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

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

Finished in 0.02974 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

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

Петър обнови решението на 27.01.2016 22:20 (преди над 9 години)

+REPOSITORY = 'https://github.com/pepincho/ruby-retrospective-2015-1'
+
+# 1. Кодът на нашата програма да бъде разбираем и лесно четим. Това постигаме като слагаме добри имена на променливите си, ясно обосноваваме различните логически компоненти в програмата ни и подреждаме кода ни, за да бъде по-лесно четим и по-прегледен.
+
+# 2. Добра практика е когато използваме хешове и ги разписваме на няколко реда
+# да слагаме на последния ред ',', тъй като ако после искаме да добавяме нови
+# неща към него ще бъде по лесно и няма да допуснем грешката да забравим да я сложим.
+
+# 3. Използване на константи вместо hardcode-нати числа в кода ни. По този начин кодът ни е по-лесен за дебъгване и четене след време, когато сме забравили защо сме били сложили въпросното число.
+
+# 4. Използване на "not" вместо "!" при условните конструкции.
+
+# 5. Използване на "(a...b) вместо (a..b - 1)", когато искаме да създадем масив само в интервала [a, b).
+
+# 6. Използване на паралелно присвояне и разпакетирване на променливи, за по-ясен код и намаляване на излишните редове код.
+
+# 7. Разделяне на програмата на по-малки логически компоненти(задачки) и обособяването им в отделни функции, които вършат точно една определена мини задача.
+
+# 8. Използване на операторите "-, +" върху масиви, за да получим нов масив, който е резултат от прилагането на тези операции.
+
+# 9. Използване на "#between?", когато искаме да проверим дали дадено число е в определен интервал.
+
+# 10. Използване на "r#educe()" вместо "#inject()", за по-голяма яснота на кода, тъй като думата "#reduce()" по-ясно описва проблема, който се опитвам да реша, отколкото "#inject()".
+
+# 11. Използване на "Struct.new", за да създадем прости класове, които имат getters и setters, както и полетата на класа. По този начин си намаляваме писане на ненужен код и същевременно е по-четим.
+
+# 12. Използване на метода "#any?()", в чийто блок разписваме допълнителна логичка, чрез коята да проверим дали дадена колекция отговаря на определени условия.
+
+# 13. Изнасяне на повтаряще се логика от кода или парче код, което копираме в отделна функция, за да може да се намали копирането на код и за по-лесно дебъгване и поддържане на кода в бъдеще. По този начин се намалява "spaggetti code".
+
+# 14. Енкапсулиране на кода, т.е даваме на потребителя интерфейсът за който сме се разбрали, без да може да ползва наши вътрешни функции, с които си организираме работата. Използване на private.
+
+# 15. Използване на примерно "#map(&:to_s)" вместо "#map { |x| x.to_s }" върху дадена колекция.
+
+# 16. Използване на "#enum_for", който ще създаде enumerator и всеки път ще вика функцията, която сме му подали, върху обекта.
+
+# 17. Когато дефинираме метод и той може да приема блок е добра практика да слагаме "&block" в сигнатурата му. Например "#each(&block)" вместо "#each". По този начин показваме, че нашият метод може да приема и блокове.
+
+# 18. Използване на "#lazy", който създава lazy enumerator, който ни връща стойност чак тогава, когато е поискина или ни трябва, а не предварително да изгенерира всички стойности.
+
+# 19. Използване на "#loop do" цикъл, когато не знаем колко итерации ще правим. Същата аналогия с "#while(true)". На всяка итерация може да yield-ваме стойности. "#loop do" се използва често, когато създаваме lazy enumerators.
+
+# 20. Използване на "#take" когато искаме да вземем определен брой елементи от енумератора. Ако енумератора е lazy, то трябва да кажем и "#force", за да му кажем, че е нужно да изгенерира нужната бройка елементи.