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

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

Поэтому я начал изучать C# благодаря моему опыту разработки игр в колледже (моя степень бакалавра), который коснулся этой темы лишь вскользь из-за дизайнерского характера программы. После колледжа я взял на себя обязательство выучить какой-то язык и придерживался того, что «знал». Несколько лет спустя я добился значительного прогресса, но была одна загвоздка: я знал только C# и больше ничего.

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

Основной предмет разногласий с моей стороны связан с двумя основными проблемами: языки высокого уровня и доступность переменных. Я привык к простым объявлениям типов данных, -private string myString = «Stringily Dingily» — будет строкой, которую я могу использовать только в рамках своего класса и смогу хранить только строку. Переход от этого к –my_string = «Stringily Dingily»- кажется похожим на первый взгляд, пока вы не решите использовать эту переменную для хранения логического значения (да, странное решение, но возможное в этих языках). Данные здесь в такой произвольной форме, но к ним так сложно получить правильный доступ.

Все, что мне нужно было сделать раньше, это установить переменную с «частной» на «общедоступную» в зависимости от того, что я хотел. Честно говоря, это было похоже на то, что вы застряли в чужой стране, не имея ничего, кроме небольшого руководства по переводу (и буквально всего переполненного стека). Это не имело никакого отношения к тому, что я делал что-то новое, мне пришлось разучить свой предыдущий язык (в некотором смысле), чтобы освоить этот. Мои старые привычки пришлось уловить и переобучить, чтобы писать работающий код. Объявление средств доступа (и их вариантов) казалось очевидной альтернативой настройке данных, но много раз мне не удавалось заставить все работать правильно.

Потом, каким-то чудом, я пошла своим голым чутьем и опытом, и как-то все испытания прошла. Зеленый по всем направлениям, и мне оставалось только гадать, что я делал все это время. Затем я снова и снова сталкивался с той же проблемой, и цикл повторялся. Сомневаюсь, преодолел ли я это, но, возможно, я слишком строг к себе.

Для тех из нас, у кого есть опыт программирования, неважно, насколько обширный, может быть легко погрузиться в свои мысли, изучая что-то новое, как будто мы уже знаем это, но просто не можем выполнить. Это означает, что когда мы боремся с обучением, мы начинаем задаваться вопросом, насколько мы хороши на самом деле.

Для тех, кто знакомится с такими языками, как Ruby, без явных объявлений классов для типов данных, может быть трудно разобраться в новых типах данных, в том, как эти данные управляются и как другие классы/код будут получать доступ к этой информации. Attr_accessor для переменной в Ruby заходит так далеко, и некоторые из нас думают, что то, как это делается,… ну, глупо. Сейчас.

Теперь о технических моментах, помимо полуэмоционального путешествия, описанного выше. Ну, не так эмоционально, но суть вы поняли.

Ruby получает данные из переменных и методов, как и любой другой язык. Переменные обычно задаются с помощью простого синтаксиса «x = 10», подразумевая, что «x» будет целым числом со значением 10. Чтобы получить эти данные вне этого класса, вам нужно сделать несколько вещей:

1) Объявите ему «attr_» и идите оттуда. Что мы делаем с данными, нам нужно просто их прочитать? Используйте attr_reader. Нужно изменить, если он выходит за рамки класса? Используйте attr_accessor. А как насчет attr_writer? Что ж, attr_accessor — это лучшее из обоих миров, имеющее свойство get/set для доступности.

2) Объявить еще раз, но уже в другом месте! Из того, что я делал (в настоящее время, в моем начальном опыте работы с Ruby), для каждой переменной в указанной области должен быть создан метод получения/установки. На самом деле вам нужно создать функциональность для установки переменной, используя синтаксис « def var = (new_var) @var = new_var end », включая «знак равенства». В моем опыте работы с C# у меня никогда не было необходимости явно указывать эту связь за пределами частных/общедоступных/внутренних настроек (упуская здесь много деталей и параметров, пожалуйста, простите меня).

3) Назовите его (наконец-то) и сделайте то, что вам нужно сделать.

Итак, что мы узнали здесь сегодня? Что ж, мое упрямство взяло верх во время моего обучения, оставив меня сохнуть для некоторых базовых знаний Ruby. Переменные — это хитрый зверь, которым можно управлять в определенных обстоятельствах. С другой стороны, я ограничен только ~ неделей опыта использования их таким образом.

Изменения могут быть хорошими людьми, но иногда они могут быть болезненными. Или, по крайней мере, раздражает. Спасибо за прочтение, есть новые кадры НАСА: