Решение на Десета задача от Никола Терзиев

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

Към профила на Никола Терзиев

Резултати

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

Код

REPOSITORY = 'https://github.com/VazovTheGreat/ruby-retrospective-2015-2'
# What did I learn
#
# 1. Ако не разбираш точно как работи даден фийчър(Marshal for instance), по-добре
# не го използвай, довежда до бъгове.
# 2. Референциите в динамични езиси, като Ruby, могат да бъдат много измамни (ie
# довеждат до трудно откриваеми проблеми - Im looking at you, CommitObject).
# 3. Освен неизвършване на интерполация на стрингове, единичните кавички не обработват ASCII кодове.
# 4. Трябва да се внимава с наименованието(in general), могат да се появят много интересни
# бъгове при shadowing на предефинирани променливи,фунции и прочие.
# 5. Ruby не е Python, има по-добри алтернативи от ъндърскор и дъндър за контрол на методите.
# 6. Ruby има много силен темплейт engine, няма причина да не се използва.
# 7. Не е много разумно(никак даже) да се обфускира стринг, който ще използваш/манипулираш.
# 8. Синтаксисът с % на места е много по-подходящ от format.
# 9. Използването на freeze е добра практика при дефенирането на константи в клас,
# подобрява четимостта.
# 10. Не-C имена на функции позволяват правенето на ретроспекция.
# 11. Използване на attr_reader наместо едноредови функции, no-brainer.
# 12. Преизползване на входящи параметри, вместо реструктурирането им по-късно.
# 13. Внимателно четене на условието(един объркан символ в регекс може да счупи много тестове).
# 14. Разликата между RuntimeError и StandardError.
# 15. Използване на self.class:: в повечето случаи е poor's man defence срещу
# незнание на скоуповете в Ruby.
# 16. Method chaining(с правилния formatting) е много подходящ при използване
# на няколко последователни функции над множества от данни.
# 17. Стрингове, които трябва да се разцепят на няколко реда(поради тяхната дължина),
# е по-нагледно да се 'конкатенират' чрез '\' (e.g. "Im a string" \ "Yes, a string indeed"),
# отколкото да се пренасят чрез escape на newline символа.
# 18. Документацията на Enumerable никога не спира да изненадва с интересни методи.
# 19. Използването на чисти функции (pure as in functional programming), в по-голямата
# си част, води до по-изчистен и лесен за проследяване код
# 20. Въпреки че не съм го използвал директно в домашните, възможностите на Ruby за имлементация
# на къстъм dsl са страхотни. В началото бях много не развалнуван относно използването
# на instance_eval, но след като навързах кое как се залепя, стигнах до приятното
# заключение, че дори 'езици' като Puppet са не-толкова-труди за имплементация на Ruby.

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

From https://github.com/fmi/ruby-retrospective-2015-2
 * branch            master     -> FETCH_HEAD
HEAD is now at 512294b Modify a test in task 8 to not include empty cells
Cloning into 'submission'...
HEAD is now at 33d23d8 Improved solutions
From /tmp/ruby-retrospective-2015-2/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
https://github.com/VazovTheGreat/ruby-retrospective-2015-2/compare/512294b6dde...33d23d847b6

‘solutions/08.rb’ -> ‘/tmp/ruby-retrospective-2015-2/checker/solutions/08.rb’
‘solutions/05.rb’ -> ‘/tmp/ruby-retrospective-2015-2/checker/solutions/05.rb’
‘solutions/07.rb’ -> ‘/tmp/ruby-retrospective-2015-2/checker/solutions/07.rb’
‘solutions/06.rb’ -> ‘/tmp/ruby-retrospective-2015-2/checker/solutions/06.rb’
OK
..............................

Finished in 0.02582 seconds
30 examples, 0 failures
OK
..............

Finished in 0.00993 seconds
14 examples, 0 failures
OK
...............................

Finished in 0.01267 seconds
31 examples, 0 failures
OK
........................................

Finished in 0.02257 seconds
40 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.0016 seconds
1 example, 0 failures

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

Никола обнови решението на 26.01.2016 22:27 (преди почти 9 години)

+REPOSITORY = 'https://github.com/VazovTheGreat/ruby-retrospective-2015-2'
+
+# What did I learn
+#
+# 1. Ако не разбираш точно как работи даден фийчър(Marshal for instance), по-добре
+# не го използвай, довежда до бъгове.
+# 2. Референциите в динамични езиси, като Ruby, могат да бъдат много измамни (ie
+# довеждат до трудно откриваеми проблеми - Im looking at you, CommitObject).
+# 3. Освен неизвършване на интерполация на стрингове, единичните кавички не обработват ASCII кодове.
+# 4. Трябва да се внимава с наименованието(in general), могат да се появят много интересни
+# бъгове при shadowing на предефинирани променливи,фунции и прочие.
+# 5. Ruby не е Python, има по-добри алтернативи от ъндърскор и дъндър за контрол на методите.
+# 6. Ruby има много силен темплейт engine, няма причина да не се използва.
+# 7. Не е много разумно(никак даже) да се обфускира стринг, който ще използваш/манипулираш.
+# 8. Синтаксисът с % на места е много по-подходящ от format.
+# 9. Използването на freeze е добра практика при дефенирането на константи в клас,
+# подобрява четимостта.
+# 10. Не-C имена на функции позволяват правенето на ретроспекция.
+# 11. Използване на attr_reader наместо едноредови функции, no-brainer.
+# 12. Преизползване на входящи параметри, вместо реструктурирането им по-късно.
+# 13. Внимателно четене на условието(един объркан символ в регекс може да счупи много тестове).
+# 14. Разликата между RuntimeError и StandardError.
+# 15. Използване на self.class:: в повечето случаи е poor's man defence срещу
+# незнание на скоуповете в Ruby.
+# 16. Method chaining(с правилния formatting) е много подходящ при използване
+# на няколко последователни функции над множества от данни.
+# 17. Стрингове, които трябва да се разцепят на няколко реда(поради тяхната дължина),
+# е по-нагледно да се 'конкатенират' чрез '\' (e.g. "Im a string" \ "Yes, a string indeed"),
+# отколкото да се пренасят чрез escape на newline символа.
+# 18. Документацията на Enumerable никога не спира да изненадва с интересни методи.
+# 19. Използването на чисти функции (pure as in functional programming), в по-голямата
+# си част, води до по-изчистен и лесен за проследяване код
+# 20. Въпреки че не съм го използвал директно в домашните, възможностите на Ruby за имлементация
+# на къстъм dsl са страхотни. В началото бях много не развалнуван относно използването
+# на instance_eval, но след като навързах кое как се залепя, стигнах до приятното
+# заключение, че дори 'езици' като Puppet са не-толкова-труди за имплементация на Ruby.

"9. Използването на freeze е добра практика при дефенирането на константи в клас, подобрява четимостта."

Не бих казал, че подобрява четимостта. Аз го намирам за добра практика, за да се получи изключение, ако някой се опита да мутира обекта, сложен в константата. Четимостта по-скоро се нарушава, защото има допълнителни неща за четене (.freeze), които не допринасят пряко за функционалността.