Решение на Пета задача от Николай Димитров

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

Към профила на Николай Димитров

Код

REPOSITORY = 'https://github.com/liulin-boy/ruby-retrospective-2'
# Двадесет неща, които научих.
#
# 1. Дефинирането на метод вътре в друг такъв е глупаво.
# Докато в Scheme горното се прави, в Ruby то е безполезно.
# По-общо, не бива идиоми от един език да се прилагат в друг
# без да се помисли дали наистина са приложими.
# 2. Много 'Ruby' е винаги, когато е възможно, (т.е. винаги)
# да се избягва употребата на return.
# 3. Аналогично, употребата на self се избягва,
# освен когато е наложителна или прави кода по-четим.
# 4. Силно препоръчително е използването на Integer#upto вместо Range.
# 5. Array#count може да приема аргумент или блок. Готин метод.
# 6. Monkeypath-ването често е най-лесният начин да се справим
# с възникнал проблем, но не бива да се прави.
# (Защото всеки път някъде по света умира котенце.)
# 7. Конструкторът на даден клас трябва да приема смислени аргументи,
# а не дълъг символен низ, например. За целта низа първо 'минава'
# през метод, който го parse-ва.
# 8. Блоковете могат да бъдат викани не непременно със същия брой
# аргументи, колкото приемат.
# 9. Подаването на символи вместо блокове в #map, #inject и пр.
# съкрaщава писането, улеснява четенето, и накратко - яко е!
# 10. class << self е добър начин да спестим малко писане,
# когато ни се налага да пишем няколко класови метода.
# Също така прави кода по-четим, като разделя
# instance методите от класовите такива.
# 11. && и || се използват за булеви изрази, a
# and и or в условните оператори.
# 12. Често се изпускат скобите при подаване на аргументи на метод.
# (На мен лично тази идея не винаги ми допада.)
# 13. Добра практика е изнасянето на код в отделна функция,
# и то по начин, чрез който текста да стане по-четим.
# 14. Желателно е максимално да се избягва в кода употребата
# на индексация. Вместо да се използва елемент на масив,
# по-подходящо е да бъде създадена променлива с подходящо име.
# 15. Трябва да се избягват 'магически' константи в кода.
# Добра идея е въпросните се изнасят като отделни променливи
# или методи, с подходящи имена.
# 16. Изнасянето на константи в модули е напълно приемливо, за мое учудване.
# 17. ^ и $ мачват началото/края на реда, а не краищата на низ.
# Ако искаме да мачнем краищата на стринг, използваме \A и \z.
# 18. В регулярните изрази има look-ahead и look-behind.
# 19. В Ruby начинът да се имплементира #to_bool е с двойно отрицание,
# а не с тернарен оператор от вида `expr ? true : false`.
# 20. Няма нужда в конструктора на клас да даваме начална стойност на
# булеви променливи, ако тази стойност е false.

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

Николай обнови решението на 20.12.2012 21:38 (преди над 11 години)

+REPOSITORY = 'https://github.com/liulin-boy/ruby-retrospective-2'
+
+# Двадесет неща, които научих.
+#
+# 1. Дефинирането на метод вътре в друг такъв е глупаво.
+# Докато в Scheme горното се прави, в Ruby то е безполезно.
+# По-общо, не бива идиоми от един език да се прилагат в друг
+# без да се помисли дали наистина са приложими.
+# 2. Много 'Ruby' е винаги, когато е възможно, (т.е. винаги)
+# да се избягва употребата на return.
+# 3. Аналогично, употребата на self се избягва,
+# освен когато е наложителна или прави кода по-четим.
+# 4. Силно препоръчително е използването на Integer#upto вместо Range.
+# 5. Array#count може да приема аргумент или блок. Готин метод.
+# 6. Monkeypath-ването често е най-лесният начин да се справим
+# с възникнал проблем, но не бива да се прави.
+# (Защото всеки път някъде по света умира котенце.)
+# 7. Конструкторът на даден клас трябва да приема смислени аргументи,
+# а не дълъг символен низ, например. За целта низа първо 'минава'
+# през метод, който го parse-ва.
+# 8. Блоковете могат да бъдат викани не непременно със същия брой
+# аргументи, колкото приемат.
+# 9. Подаването на символи вместо блокове в #map, #inject и пр.
+# съкрaщава писането, улеснява четенето, и накратко - яко е!
+# 10.class << self е добър начин да спестим малко писане,
+# когато ни се налага да пишем няколко класови метода.
+# Също така прави кода по-четим, като разделя
+# instance методите от класовите такива.
+# 11.&& и || се използват за булеви изрази, a
+# and и or в условните оператори.
+# 12.Често се изпускат скобите при подаване на аргументи на метод.
+# (На мен лично тази идея не винаги ми допада.)
+# 13.Добра практика е изнасянето на код в отделна функция,
+# и то по начин, чрез който текста да стане по-четим.
+# 14.Желателно е максимално да се избягва в кода употребата
+# на индексация. Вместо да се използва елемент на масив,
+# по-подходящо е да бъде създадена променлива с подходящо име.
+# 15.Трябва да се избягват 'магически' константи в кода.
+# Добра идея е въпросните се изнасят като отделни променливи
+# или методи, с подходящи имена.
+# 16.Изнасянето на константи в модули е напълно приемливо, за мое учудване.
+# 17.^ и $ мачват началото/края на реда, а не краищата на низ.
+# Ако искаме да мачнем краищата на стринг, използваме \A и \z.
+# 18.В регулярните изрази има look-ahead и look-behind.
+# 19.В Ruby начинът да се имплементира #to_bool е с двойно отрицание,
+# а не с тернарен оператор от вида `expr ? true : false`.
+# 20.Няма нужда в конструктора на клас да даваме начална стойност на
+# булеви променливи, ако тази стойност е false.

Николай обнови решението на 20.12.2012 21:43 (преди над 11 години)

REPOSITORY = 'https://github.com/liulin-boy/ruby-retrospective-2'
# Двадесет неща, които научих.
#
-# 1. Дефинирането на метод вътре в друг такъв е глупаво.
-# Докато в Scheme горното се прави, в Ruby то е безполезно.
+# 1. Дефинирането на метод вътре в друг такъв е глупаво.
-# По-общо, не бива идиоми от един език да се прилагат в друг
+# Докато в Scheme горното се прави, в Ruby то е безполезно.
-# без да се помисли дали наистина са приложими.
+# По-общо, не бива идиоми от един език да се прилагат в друг
-# 2. Много 'Ruby' е винаги, когато е възможно, (т.е. винаги)
+# без да се помисли дали наистина са приложими.
-# да се избягва употребата на return.
+# 2. Много 'Ruby' е винаги, когато е възможно, (т.е. винаги)
-# 3. Аналогично, употребата на self се избягва,
+# да се избягва употребата на return.
-# освен когато е наложителна или прави кода по-четим.
+# 3. Аналогично, употребата на self се избягва,
-# 4. Силно препоръчително е използването на Integer#upto вместо Range.
+# освен когато е наложителна или прави кода по-четим.
-# 5. Array#count може да приема аргумент или блок. Готин метод.
+# 4. Силно препоръчително е използването на Integer#upto вместо Range.
-# 6. Monkeypath-ването често е най-лесният начин да се справим
+# 5. Array#count може да приема аргумент или блок. Готин метод.
-# с възникнал проблем, но не бива да се прави.
+# 6. Monkeypath-ването често е най-лесният начин да се справим
-# (Защото всеки път някъде по света умира котенце.)
+# с възникнал проблем, но не бива да се прави.
-# 7. Конструкторът на даден клас трябва да приема смислени аргументи,
+# (Защото всеки път някъде по света умира котенце.)
-# а не дълъг символен низ, например. За целта низа първо 'минава'
+# 7. Конструкторът на даден клас трябва да приема смислени аргументи,
-# през метод, който го parse-ва.
+# а не дълъг символен низ, например. За целта низа първо 'минава'
-# 8. Блоковете могат да бъдат викани не непременно със същия брой
+# през метод, който го parse-ва.
-# аргументи, колкото приемат.
+# 8. Блоковете могат да бъдат викани не непременно със същия брой
-# 9. Подаването на символи вместо блокове в #map, #inject и пр.
+# аргументи, колкото приемат.
-# съкрaщава писането, улеснява четенето, и накратко - яко е!
+# 9. Подаването на символи вместо блокове в #map, #inject и пр.
-# 10.class << self е добър начин да спестим малко писане,
+# съкрaщава писането, улеснява четенето, и накратко - яко е!
-# когато ни се налага да пишем няколко класови метода.
+# 10. class << self е добър начин да спестим малко писане,
-# Също така прави кода по-четим, като разделя
+# когато ни се налага да пишем няколко класови метода.
-# instance методите от класовите такива.
+# Също така прави кода по-четим, като разделя
-# 11.&& и || се използват за булеви изрази, a
+# instance методите от класовите такива.
-# and и or в условните оператори.
+# 11. && и || се използват за булеви изрази, a
-# 12.Често се изпускат скобите при подаване на аргументи на метод.
+# and и or в условните оператори.
-# (На мен лично тази идея не винаги ми допада.)
+# 12. Често се изпускат скобите при подаване на аргументи на метод.
-# 13.Добра практика е изнасянето на код в отделна функция,
+# (На мен лично тази идея не винаги ми допада.)
-# и то по начин, чрез който текста да стане по-четим.
+# 13. Добра практика е изнасянето на код в отделна функция,
-# 14.Желателно е максимално да се избягва в кода употребата
+# и то по начин, чрез който текста да стане по-четим.
-# на индексация. Вместо да се използва елемент на масив,
+# 14. Желателно е максимално да се избягва в кода употребата
-# по-подходящо е да бъде създадена променлива с подходящо име.
+# на индексация. Вместо да се използва елемент на масив,
-# 15.Трябва да се избягват 'магически' константи в кода.
+# по-подходящо е да бъде създадена променлива с подходящо име.
-# Добра идея е въпросните се изнасят като отделни променливи
+# 15. Трябва да се избягват 'магически' константи в кода.
-# или методи, с подходящи имена.
+# Добра идея е въпросните се изнасят като отделни променливи
-# 16.Изнасянето на константи в модули е напълно приемливо, за мое учудване.
+# или методи, с подходящи имена.
-# 17.^ и $ мачват началото/края на реда, а не краищата на низ.
+# 16. Изнасянето на константи в модули е напълно приемливо, за мое учудване.
-# Ако искаме да мачнем краищата на стринг, използваме \A и \z.
+# 17. ^ и $ мачват началото/края на реда, а не краищата на низ.
-# 18.В регулярните изрази има look-ahead и look-behind.
+# Ако искаме да мачнем краищата на стринг, използваме \A и \z.
-# 19.В Ruby начинът да се имплементира #to_bool е с двойно отрицание,
+# 18. В регулярните изрази има look-ahead и look-behind.
-# а не с тернарен оператор от вида `expr ? true : false`.
+# 19. В Ruby начинът да се имплементира #to_bool е с двойно отрицание,
-# 20.Няма нужда в конструктора на клас да даваме начална стойност на
+# а не с тернарен оператор от вида `expr ? true : false`.
-# булеви променливи, ако тази стойност е false.
+# 20. Няма нужда в конструктора на клас да даваме начална стойност на
+# булеви променливи, ако тази стойност е false.