Ruby/Идеология: различия между версиями
Содержимое удалено Содержимое добавлено
Метка: possible spambot (testing) |
→Контроль типов через расширение класса: пунктуация |
||
Строка 255:
===Контроль типов через расширение класса===
Очень часто приходится слышать, что "Ruby — нетипизирован". Это очень распространенное заблуждение основано на том, что все переменные в Ruby имеют одинаковый тип: <code>Object</code>. По существу, это означает отключение контроля типов, а не отсутствие типизации. Ruby
Вот именно отсутствие контроля за типом переменной и открывает перед программистом богатые возможности. Ведь не нужно плодить шаблоны{{ref|Shablons}}, достаточно написать абстрактный код с переменными, значение и тип которых будут понятны позже. Ведь
В Ruby можно определить тип получаемых данных по методам, которые были вызваны для получения этих данных. Например, метод <code>.join</code> со 100% вероятностью формирует объект класса <code>String</code> (строка), а методы <code>.scan</code> и <code>.split</code> — объект типа <code>Array</code> (массив). Но это не всегда работает, так как есть методы, которые есть у нескольких классов и, в зависимости от класса, они возвращают объект того или иного класса. Не могу привести пример таких методов, но вполне допускаю, что они могут быть{{ref|Research}}. Контроль за классом объекта
Контролировать тип входных данных, которые передаются в метод, можно по
<code>def meTog( napameTp_1 )
Строка 275:
{{info|Метод <code>.class</code> возвращает объект класса <code>Class</code>, то есть код <code><nowiki>o6bekT.class.class == Class</nowiki></code> будет всегда возвращать <code>true</code>}}
Обратите внимание на то, что <code>napameTp_1</code> может принадлежать к двум разным классам: <code>String</code> и <code>Array</code>. Это как раз то самое
Но все равно, предыдущий код "кривой", так как придется писать отдельный код (внутри метода) для обработки данных класса <code>String</code> и <code>Array</code>. А чем меньше{{ref|Code}} метод, тем лучше. Правильней было бы использовать такую возможность Ruby, как расширение класса.
|