На прошлой неделе я впервые программировал на Ruby для реализации новых задач автоматизации iOS в fastlane. Изначально я был веб-разработчиком, который использовал PHP, поэтому я много раз слышал о Ruby как о конкурирующем языке внутренних сценариев. В течение многих лет я думал о Ruby как о старом языке, которому скоро конец, но поработав с ним несколько дней, я не мог ошибиться больше.

Синтаксис Руби 🤓

Я не знаком с fastlane, поэтому начал свое изучение Ruby с выяснения того, что такое Ruby на самом деле и что характерно для fastlane в Fastfile. Когда я копался в документации по Ruby, чтобы добиться того, чего хотел, я отметил несколько вещей, которые выделялись в этом языке.

  • Функции можно вызывать как с круглыми скобками, так и без них.
  • Переменным экземпляра класса нужны средства доступа к атрибутам
  • Статические переменные класса нуждаются в функциях установки/получения
  • Соглашения об именах переменных: $global, @@class_static, @class_instance
  • Змеиный случай….! Единственная часть Ruby, которая казалась старой 😜
  • Восклицательный знак в имени метода означает, что он изменяет переменную… круто!
  • Последняя выполненная строка метода является возвращаемым значением🤔 (сложно с блоками try/catch, которые в Ruby называются begin/rescue)

Как только я разобрался с базовой структурой классов, функций, именования и объявлений, я быстро заставил свой код работать. Я нашел большую часть необходимой документации онлайн на ruby-doc.org, а остальную часть из множества различных источников, погуглив ошибки исключения во время выполнения.

Было приятно вернуться к языку сценариев, у которого не было времени компиляции, в отличие от Swift. Итерация прошла быстро, и сообщения об ошибках языка помогли мне найти решение. Мои сообщения об ошибках были либо от fastlane, либо от языка Ruby. Каждый раз, когда выдается фатальное исключение, fastlane будет искать в задачах GitHub сообщение об исключении, чтобы было легко определить, к какому домену относится ошибка.

Функциональное программирование на Ruby🔒

Я был рад найти некоторые функции функционального программирования, реализованные в Ruby для класса Array. С тех пор, как я посетил Swift Summit в конце октября, я хотел, чтобы все мои новые программы были максимально функциональными. Чем меньше побочных эффектов, тем лучше все, особенно тесты. Хотя использование карты в Ruby ничего подобного не гарантирует, синтаксис все равно более чистый, чем традиционная сумма массива.

Я нашел синтаксис блоков Ruby для map и each простым. Когда я создал свой первый блок карты в Ruby, я закончил последнюю строку оператором return только для того, чтобы получить ошибку времени выполнения. После отладки я узнал, что последняя строка блока — это возвращаемое значение… интересно. Лично я не возражаю против оператора return в последней строке и думаю, что код не выглядит чище без ключевого слова return. Однако именно так это реализовано в Ruby-land, поэтому я последовал его примеру.

полоса обгона + Руби = 🚀

Когда я думаю о традиционной автоматизации вычислительных задач, я думаю о сценариях bash или Python. Я не понимал, что Ruby настолько подходит для задачи автоматизации… или нет? Есть и другие языки, которые могли бы заполнить ту же дыру, но Ruby показался отличным кандидатом. Я чувствовал себя сильным в Fastfile, что я могу отнести как к fastlane, так и к Ruby вместе взятым.

Изучение Руби

Мое мнение о Ruby только в среде fastlane, поэтому мне нужно попробовать использовать Ruby без использования fastlane, чтобы получить точную оценку языка. Тем не менее, использование Ruby в среде fastlane было положительным опытом. Было удивительно естественно изучать Ruby и fastlane вместе. Изучать новый язык полезно, потому что он открывает новый взгляд на программирование, что позволяет мне сравнивать и сопоставлять языки и думать о проблемах по-разному. У каждого языка есть свои особенности и недостатки, поэтому знание большего количества языков открывает большую библиотеку языковых функций и реализаций.

Мне еще предстоит пройти долгий путь, но я уже с нетерпением жду возможности узнать больше о Ruby, когда представится такая возможность! 🙌