Итак, я только что закончил четвертую неделю иммерсивной программы веб-разработки Flatiron School. Я официально прошел ⅓ пути, и мне просто нужно воспользоваться моментом, чтобы подумать о том, как много я узнал за такой короткий промежуток времени.
Помню, когда я начинал, мне казалось, что лаборатория по вложенным хэшам — это сложно и сложно. Сейчас я работаю с замечательными абстракциями в Rails и пытаюсь разобраться в Partials, Locals и Connections. С самого начала мой разум толкался, растягивался и выбрасывался из зоны комфорта в мою клавиатуру, но это того стоило.
И это, по моему скромному мнению, является идеальным переходом к более техническим размышлениям о прошлой неделе.
Оператор Сплат.
Я познакомился с оператором Splat в Ruby как с чем-то, что расширяет возможности передачи аргументов в метод. Но после небольшого исследования эта непритязательная, казалось бы, простая звездочка имеет гораздо больше функций, чем я думал.
Хотя я почти уверен, что это не все возможности оператора Splat, я нашел небольшие хитрости интересными и потенциальными инструментами для будущего.
Первый трюк: если у вас есть отдельные аргументы в методе, добавление знака перед массивом преобразует массив элементов в аргументы.
def add(int1, int2, int3) puts int1 + int2 + int3 end add(1, 2, 3) #=>6 #this works add([1, 2, 3]) #wrong number of arguments #this does not add(*[1, 2, 3]) #=>6 #this does! - The splat converts the array into arguments
Второй трюк: оператор Splat может преобразовать строку в массив. Дикий!
foo = *'bar' puts foo # => ["bar"] # splat operator converts string into an array
Третий трюк: оператор splat может преобразовать хэш хэшей в массив массивов. Честно говоря, это меня больше всего впечатлило. Нет необходимости выполнять итерацию или погружаться в гнездо, чтобы вытолкнуть ключи и значения обратно в виде элементов массивов. Просто делает это самостоятельно.
foo = *{ b: value1, a: value2, r: value3 } puts foo # => [[:b, value1], [:a, value2], [:r, value3]] # Splat Operator makes hash of hashes an array of arrays
И хотя это, вероятно, только царапает поверхность того, что может сделать splat (Double splat — это другая история), я начинаю размышлять, выясняя эти ярлыки, подходит ли мне это прямо сейчас.
Конечно, приведенный выше splat-код быстр и эффективен… Но если бы я вернулся к своему коду через несколько месяцев, я бы не смог полностью понять, что происходит с абстракцией.
Я должен принять во внимание, насколько я новичок в этом ярлыке, и если я добавлю его в свой код, я, возможно, не смогу понять, что это значит позже. Так что на данный момент я согласен оценить его таким, какой он есть (потрясающе), но придерживаться написания самого ясного и организованного кода, на который я способен. Это то, к чему я стремлюсь сразу после понимания всех концепций, брошенных мне в голову за этот короткий промежуток времени.
Ежедневное преобразование моего мозга было и будет трудным, но полезным путешествием. Я знаю, что это в конечном итоге даст потрясающие результаты, потому что, когда я отступаю и размышляю о процессе, он уже есть.