Одна вещь, которая действительно запомнилась мне из курса Launch School 101, - это инструкция никогда не изменять коллекцию во время итерации, поскольку это может привести к неожиданным побочным эффектам. «Не усложняйте жизнь, вводя вызовы изменяющихся методов в середине итерации», - предупреждает текст. И я принял это близко к сердцу. В конце концов, у меня на тарелке достаточно того, что я новичок в программировании и изучил все нюансы циклов, методов и языка Ruby. Инструкция НИКОГДА ничего не делать всегда приветствуется, поскольку она дает возможность закрепить точку в моей ментальной модели.

Перенесемся на пару недель после знакомства с этим правилом и его интеграции в мою когнитивную структуру для коллекций и итераций: ученик, более продвинутый в Launch School, чем я, любезно предложил мне помочь попрактиковаться в программировании в реальном времени. Когда я работал над проблемой, пытаясь отсортировать коллекцию без использования встроенных в Ruby методов сортировки, я наткнулся на стену и сказал себе: «Нет! не может изменять коллекцию во время итерации по ней ». Однако я застрял в своем подходе и не смог продвинуться в решении проблемы. В моем руководстве говорилось, что ИНОГДА можно изменять (в данном случае мы использовали индексированное присваивание) во время итерации по коллекции, если вы точно знаете, что будет делать действие - никаких сюрпризов. Это одно правило, в котором я думал, что могу быть уверенным во все времена, выбросили в окно!

Я по-прежнему буду полностью избегать этого, потому что, как говорится в тексте курса, «почти всегда есть гораздо более четкий способ достижения желаемого результата, не прибегая к изменению коллекции при ее повторении».

Тем не менее, что касается моей ментальной модели, мне нужно провести некоторый рефакторинг ...