Pull to refresh
52
0
Dmitry Non @Nondv

Software Engineer

Send message
module M
  A = 'm'
end

module Namespace
  A = 'ns'
  class C
    include M
    puts A
  end
end

Выведет ns. Если бы Вы внимательно прочитали пост, то знали бы это ;)


Опять же, не используйте слово "переопределит". В английском языке это называется, если не ошибаюсь, "shadowing", т.е. они могут "перекрывать" друг друга. Константы Namespace::A и M::A друг другу не мешают. Вопрос в том, на какую из них будет ссылаться просто A

ни о каком переопределении речь не идет. Где Вы это в посте увидели?


Речь идет о коллизии имен, которая происходит потому, что в Ruby не обязательно указывать полный путь до константы.


module M1
  A = :m1
  module M2
    A = :m2
  end
end

M1::A # ==> :m1
M1::M2::A # ==> :m2

module M1
  puts A # which one?
  module M2
    puts A # and this?
  end
end

Милый пост.
Спасибо за перевод!


P.S. и добро пожаловать на хабрахабр;D (песочница)

А еще я ненавижу маркдаун хабра (хабрдаун? О__О), который заставляет меня удалять переносы строк :(

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

Т.е. вы считаете, что нужно изучать перл?:)
У меня для вас плохие новости: не нужно.


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


find? видел. Использовал. Не использую.


Еще раз: с какой стати я буду вспоминать, как использовать авк, если я могу написать все прямо здесь и сейчас? Вы предлагаете мне построить магистраль, когда рядом есть тропа, по которой мне пройти нужно всего раз.

perl тоже есть практически везде.


И я с недоверием отношусь к аргументации вида "если вам придется". Для меня это не аргумент. Человек для себя сам расставляет приоритеты.
Летая на Камчатку я рискую потерпеть крушение где-нибудь в горах. Однако это для меня не повод изучать основы выживания в дикой природе.


Тут главное не перегнуть. Изучение awk/sed — это явный оверхед.


P.S. Я, кстати, изучал awk и даже использовал. Вот только спустя какое-то время знания уходят.

Не особо понимаю, как коррелируют изучение основ ОС *nix с изучением awk/sed.

Именно так! В этом и суть: для мелких задач, когда изучение proper tools — это оверхед

Зачем что-то делать, если можно этого не делать?:)


Нужно стараться сбалансировать изучаемую информацию. Я вот не хочу потратить на изучение чего-то полдня, чтобы потом все забыть и при надобности читать заново.


Ruby я пользуюсь постоянно и забыть я ничего не могу. Логично, что если мне нужно выполнить какую-то мелкую задачу, я воспользуюсь им и получу результат мгновенно, а не буду курить маны весь день, чтобы одну строчку написать

Таким вакансиям и средне-специальное не нужно.


Просто все эти разговоры про "программисту не нужно образование" имеют смысл лишь в плоскости "конвейерных" вакансий, не требующих большого ума. Увы, программисты не являются интеллектуальной элитой, как бы некоторые личности не кичились своей профессией
С таким же успехом можно сказать, что среднему педиатру образование не нужно, т.к. он может с коллегой посидеть и основные симптомы, методы лечения, направления запомнить на практике.
(возможно, неудачный пример)

Тезис: образование дает намного более широкий угол зрения.


Современная тенденция, говорящая, что образование не нужно, просто основана на том, что разработка превратилась в ремесленную работу: возьми это — сделай то.


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

Вы без образования?
Ну-ка, сможете ли Вы решить задачу. В грубой форме она звучит так:
придумать алгоритм для нахождения N-ого числа Фиббоначи, быстрее классического O(N)


Я не буду описывать решение (которое я сам не смогу с ходу написать), напишу только следующее:


спойлер

Нужна линейная алгебра. С помощью матрицы 2х2 и операции перемножения матриц можно вычислить N-ое число Фиббоначи гораздо быстрее линейного алгоритма.
Человек без образования ее вряд ли решит, т.к. маловероятно, что человек будет просто так сидеть и читать про линейную алгебру (есть исключения, ес-но).


Теперь отойдем от данной задачи.
Я могу задать гуглу вопрос: линейная алгебра матрицы перемножение.
Но знание вопроса — это уже половина ответа. Как Вы будете знать, какой вопрос задать?


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

Не понравился первый же пункт:


считаю, что программисту ЛУЧШЕ быть самоучкой

Если Вы самоучка, каким образом Вы можете знать, лучше или не лучше?
Я понял, что Вы имели в виду, но все-таки подбирайте слова, пожалуйста;)

Уточнил. Я не прав насчет питона. В питоне классы — тоже объекты, что просто замечательно

Я вам привел две строчки для сравнения:)
Это просто делает код красивее.


Что является антипаттерном? Приемы, которые нанесут вред коду? Какой вред вы видете в глобальной константе, содержащей stateless-объект с нужными методами?


Ну и еще можно, конечно, говорить о том, что это избавляет от множеств созданий/уничтожений объекта и т.д. и т.п., но это роли не играет, разумеется.


P.S. мне нравится этот диалог, но, по-моему, мы совсем уж ушли от изначальной темы про способы создания синглтонов в Ruby (на котором Вы не пишете).


UPD. Вы упомянули статические методы. Класс в данном случае ведь тоже объект. Просто в питоне и джаве это не подтверждается на уровне языка. Я могу ошибаться, но в ООП нет "статических методов". Есть только объекты и их методы. Соответственно, говоря о статических методах, мы начинаем интерпретировать класс как самостоятельный объект (в Ruby так оно и есть)

статических методов или методов класса

Этот способ указан в посте. С парой причин, почему он лично мне не нравится.


тащить в другой язык инородные приемы и парадигмы — напрасная трата сил

В руби шикарно уживаются приемы из ФП. Более того, о каких приемах в контексте данного поста идет речь?
Синглтон — всего лишь название, чтобы всем было понятно, что речь идет о единственном представителе своего класса.


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

Вы забываете, что синглтон в Руби — это еще и способ красиво оформить код. Я, например, пока и сам не попадал в ситуации, где использование синглтона было бы продиктовано архитектурными соображениями.


Мне вот, допустим, не нравится видеть new каждый раз, когда я хочу воспользоваться чем-то вроде SomeExternalApi:


SomeApi.new.do_something
# vs
SomeApi.do_something

Синглтон — это не паттерн N из книги банды четырех. Это просто идея (впрочем, как и большинство паттернов). Далеко не всегда они решают какую-то архитектурную задачу, зачастую они просто позволяют сделать код красивее (понятнее).


Предвижу минусы, но я настаиваю на этой точке зрения.

Тоже крайне удивлен результатами опроса. Может быть, это джависты портят статистику? Хммм....

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Senior