Решение на Пета задача от Екатерина Горанова

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

Към профила на Екатерина Горанова

Резултати

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

Код

REPOSITORY = 'http://github.com/catiepg/ruby-retrospective-4'
# Нещата, които научих.
#
# 1. Placeholder-ът _ е много полезен в случаи, когато се използват методи на Enumerable и в блока, който им се подава, не се използват някои от параметрите.
# 2. Вложеното присвояване е много удобно за достъпване на елементи от масив, който се подава като параметър (стига броя на елементите да е известен).
# 3. Ако в initialize на даден клас има параметър по подразбиране, може да се спести условен оператор в тялото на метода.
# 4. Вместо да се използва Enumerable#each + условен оператор в блока, може да се използва Enumerable#select.
# 5. Нещо, което съм пропуснала от style guide-а - по-добре е да се използват операторите && и || вместо and и or, но трябва да се внимава с приоритета на операциите.
# 6. Enumerable#reduce и Enumerable#inject може да получат като аргумент не блок, а символ, за разлика от Enumerable#map например.
# 7. Използване на String#split с втори аргумент - оказва са, че е доста полезно.
# 8. В Руби, извикването на инстанционна променлива и метод без параметри на даден клас изглежда по един и същи начин (т.е. няма скоби след името на метода).
# 9. Сложна структура от класове, чиито инстанции си взаимодействат, не е най-доброто решение - така програмата може да стане трудно разбираема дори за човека, който я е писал.
# 10. В по-голямата част от случаите трябва да се използва интерполация вместо конкатенация на низове.
# 11. Именуването на променливите е много важно за разбираемостта на кода - иначе дори и сам си писал даден код, има голяма вероятност да не можеш да го разбереш след време.
# 12. Ако се използват блокове + yield, кодът може да стане много по-четим и не толкова объркващ (както и по-кратък) - отне ми време да виждам къде е удачно да се използва.
# 13. В случаите, когато се връща булева стойност, едноредовият условен оператор не е необходим.
# 14. Най-накрая запомних разликата между .. и ... - допълнителната точка изяжда едно число.
# 15. Четвъртата задача ме научи, че абстрактното мислене, както и доза въображение, са много важни елементи при процеса на програмиране.
# 16. Понякога извикването на super в наследника е по-добре да е в началото на метода - така е сигурно, че родителският метод няма да направи нежелани промени.
# 17. По-логично е да напишеш setter на инстанционна променлива отколкото да добавиш метод от типа add_<име>.
# 18. Осъзнах, че Array#take(n) е еквивалентно на Array#first(n).
# 19. <some_integer> * ' ' ще предизвика грешка - в случая * е оператор на класа String.
# 20. Enumerable#find е еквивалентен на Enumerable#select + Enumerable#first.

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

Екатерина обнови решението на 17.01.2015 13:11 (преди почти 10 години)

+REPOSITORY = 'http://github.com/catiepg/ruby-retrospective-4'
+
+# Нещата, които научих.
+#
+# 1. Placeholder-ът _ е много полезен в случаи, когато се използват методи на Enumerable и в блока, който им се подава, не се използват някои от параметрите.
+# 2. Вложеното присвояване е много удобно за достъпване на елементи от масив, който се подава като параметър (стига броя на елементите да е известен).
+# 3. Ако в initialize на даден клас има параметър по подразбиране, може да се спести условен оператор в тялото на метода.
+# 4. Вместо да се използва Enumerable#each + условен оператор в блока, може да се използва Enumerable#select.
+# 5. Нещо, което съм пропуснала от style guide-а - по-добре е да се използват операторите && и || вместо and и or, но трябва да се внимава с приоритета на операциите.
+# 6. Enumerable#reduce и Enumerable#inject може да получат като аргумент не блок, а символ, за разлика от Enumerable#map например.
+# 7. Използване на String#split с втори аргумент - оказва са, че е доста полезно.
+# 8. В Руби, извикването на инстанционна променлива и метод без параметри на даден клас изглежда по един и същи начин (т.е. няма скоби след името на метода).
+# 9. Сложна структура от класове, чиито инстанции си взаимодействат, не е най-доброто решение - така програмата може да стане трудно разбираема дори за човека, който я е писал.
+# 10. В по-голямата част от случаите трябва да се използва интерполация вместо конкатенация на низове.
+# 11. Именуването на променливите е много важно за разбираемостта на кода - иначе дори и сам си писал даден код, има голяма вероятност да не можеш да го разбереш след време.
+# 12. Ако се използват блокове + yield, кодът може да стане много по-четим и не толкова объркващ (както и по-кратък) - отне ми време да виждам къде е удачно да се използва.
+# 13. В случаите, когато се връща булева стойност, едноредовият условен оператор не е необходим.
+# 14. Най-накрая запомних разликата между .. и ... - допълнителната точка изяжда едно число.
+# 15. Четвъртата задача ме научи, че абстрактното мислене, както и доза въображение, са много важни елементи при процеса на програмиране.
+# 16. Понякога извикването на super в наследника е по-добре да е в началото на метода - така е сигурно, че родителският метод няма да направи нежелани промени.
+# 17. По-логично е да напишеш setter на инстанционна променлива отколкото да добавиш метод от типа add_<име>.
+# 18. Осъзнах, че Array#take(n) е еквивалентно на Array#first(n).
+# 19. <some_integer> * ' ' ще предизвика грешка - в случая * е оператор на класа String.
+# 20. Enumerable#find е еквивалентен на Enumerable#select + Enumerable#first.

Едно малко наблюдение (това не е пълен коментар) относно first vs take с един аргумент. Въпреки че връщаният резултат върху Array е един и същ, има тънка идеологическа разлика. Едното казва, че се интересуваш от самите първи няколко елемента, другото, че се интересуваш от част от цялото. Това по-лесно се вижда при lazy enumerator-ите и ме беше объркало и мен в миналото.