Я изучаю Ruby, и у меня возникла серьезная концептуальная проблема, связанная с набором текста. Позвольте мне подробно объяснить, почему я не понимаю парадигмы.
Скажем, я использую цепочку методов для краткого кода, как вы это делаете в Ruby. Я должен точно знать, какой тип возвращаемого значения для каждого вызова метода в цепочке, иначе я не могу знать, какие методы доступны по следующей ссылке. Должен ли я каждый раз проверять документацию метода ?? Я выполняю эти постоянно повторяющиеся обучающие упражнения. Кажется, я застрял в процессе ссылки, вывода, запуска, сбоя, исправления, повторения, чтобы запустить код, вместо того, чтобы точно знать, с чем я работаю во время кодирования. Это противоречит обещанию Руби об интуиции.
Скажем, я использую стороннюю библиотеку, еще раз мне нужно знать, какие типы позволяют передавать параметры, иначе я получу сбой. Я могу посмотреть на код, но там могут быть или не быть никаких комментариев или деклараций о том, какой тип ожидает метод. Я понимаю, что ваш код основан на методах, доступных для объекта, а не на типе. Но тогда я должен быть уверен, что все, что я передаю в качестве параметра, имеет все методы, ожидаемые библиотекой, поэтому мне все равно нужно выполнять проверку типов. Должен ли я надеяться и молиться, чтобы все было правильно задокументировано в интерфейсе, чтобы я знал, ожидаю ли я предоставить строку, хеш, класс и т. Д.
Если я посмотрю на источник метода, я могу получить список вызываемых методов и сделать вывод о предполагаемом типе, но мне нужно выполнить анализ.
Ruby and duck typing: разработка по контракту невозможна?
Обсуждения в предыдущем вопросе stackoverflow на самом деле не дают ответа ни на что, кроме «есть процессы, которым вы должны следовать», и эти процессы не кажутся стандартными, у всех свое мнение о том, какому процессу следовать, и язык имеет нулевое принуждение. Проверка метода? Дизайн, основанный на тестах? Документированный API? Строгие соглашения об именах методов? Что такое стандарт и кто его диктует? Что мне делать? Решат ли эти рекомендации эту проблему https://stackoverflow.com/questions/616037/ruby-coding-style-guidelines? Есть ли редакторы, которые могут помочь?
Концептуально я тоже не получаю преимущества. Вам нужно знать, какие методы необходимы для любого вызываемого метода, поэтому независимо от того, набираете ли вы, когда что-либо кодируете. Вы просто не информируете язык или кого-либо еще явно, если не решите задокументировать это. Тогда вы застряли, выполняя всю проверку типов во время выполнения, а не во время кодирования. Я занимался программированием на PHP и Python и там тоже этого не понимаю.
Что я упускаю или не понимаю? Пожалуйста, помогите мне понять эту парадигму.
foo(a)
, который вызываетa.bar
, покаa.responds_to?(:bar)
. Это мило. Никаких интерфейсов, никаких дженериков, просто добавьте методbar
и вперед. Конечно, статическая типизация также имеет много преимуществ. Похоже, вам просто нужен некоторый опыт работы с Ruby, чтобы оценить и то, и другое. Также похоже, что вы, возможно, были немного испорчены intellisense (или аналогичными функциями). Многим (многим) из нас приходится проверять документацию рано и часто. - person Ed S.   schedule 03.10.2013