Итак, я только что закончил четвертую неделю иммерсивной программы веб-разработки 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-код быстр и эффективен… Но если бы я вернулся к своему коду через несколько месяцев, я бы не смог полностью понять, что происходит с абстракцией.

Я должен принять во внимание, насколько я новичок в этом ярлыке, и если я добавлю его в свой код, я, возможно, не смогу понять, что это значит позже. Так что на данный момент я согласен оценить его таким, какой он есть (потрясающе), но придерживаться написания самого ясного и организованного кода, на который я способен. Это то, к чему я стремлюсь сразу после понимания всех концепций, брошенных мне в голову за этот короткий промежуток времени.

Ежедневное преобразование моего мозга было и будет трудным, но полезным путешествием. Я знаю, что это в конечном итоге даст потрясающие результаты, потому что, когда я отступаю и размышляю о процессе, он уже есть.