Хэл Фултон - Программирование на языке Ruby
- Название:Программирование на языке Ruby
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2007
- Город:Москва
- ISBN:5-94074-357-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Хэл Фултон - Программирование на языке Ruby краткое содержание
Ruby — относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов.
Книга является полноценным руководством по Ruby — ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии.
Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.
Программирование на языке Ruby - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
x = y+z
x = y+ z
x = y +z
Но фактически эквивалентны лишь первые три. В четвертом же случае анализатор считает, что вызван метод ус параметром +z! И выдаст сообщение об ошибке, так как метода с именем уне существует. Мораль: пользуйтесь пробелами разумно.
• Аналогично x = y*z— это умножение уна z, тогда как x = y *z— вызов метода у, которому в качестве параметра передается расширение массива z.
• В именах идентификаторов знак подчеркивания _считается строчной буквой. Следовательно, имя идентификатора может начинаться с этого знака, но такой идентификатор не будет считаться константой, даже если следующая буква прописная.
• В линейной последовательности вложенных предложений ifприменяется ключевое слово elsif, а не else ifили elif, как в некоторых других языках.
• Ключевые слова в Ruby нельзя назвать по-настоящему зарезервированными. Если метод вызывается от имени некоторого объекта (и в других случаях, когда не возникает неоднозначности), имя метода может совпадать с ключевым словом. Но поступайте так с осторожностью, не забывая, что программу будут читать люди.
• Ключевое слово then(в предложениях ifи case) необязательно. Если вам кажется, что с ним программа понятнее, включайте его в код. То же относится к слову doв циклах whileи until.
• Вопросительный и восклицательный знаки не являются частью идентификатора, который модифицируют, — их следует рассматривать как суффиксы. Таким образом, хотя идентификаторы chopи chop!считаются различными, использовать восклицательный знак в любом другом месте имени не разрешается. Аналогично в Ruby есть конструкция defined?, но defined— ключевое слово.
• Внутри строки символ решетки # — признак начала выражения. Значит, в некоторых случаях его следует экранировать обратной косой чертой, но лишь тогда, когда сразу за ним идет символ {, $или @.
• Поскольку вопросительный знак можно добавлять в конец идентификатора, то следует аккуратно расставлять пробелы в тернарном операторе. Пусть, например, имеется переменная my_flag, которая может принимать значения trueили false. Тогда первое из следующих предложений правильно, а второе содержит синтаксическую ошибку:
x = my_flag ? 23 : 45 # Правильно.
x = my_flag? 23 : 45 # Синтаксическая ошибка.
• Концевой маркер для встроенной документации не следует считать лексемой. Он помечает строку целиком, поэтому все находящиеся в той же строке символы не являются частью текста программы, а принадлежат встроенному документу.
• В Ruby нет произвольных блоков, то есть нельзя начать блок в любом месте, как в С. Блоки разрешены только там, где они нужны, — например, могут присоединяться к итератору. Исключение составляет блок begin-end, который можно употреблять практически везде.
• Не забывайте, что ключевые слова BEGINи ENDне имеют ничего общего с beginи end.
• При статической конкатенации строк приоритет конкатенации ниже, чем у вызова метода. Например:
str = "Первая " 'second'.center(20) # Примеры 1 and 2
str = "Вторая " + 'second'.center(20) # дают одно и то же.
str = "Первая вторая".center(20) # Примеры 3 and 4
str = ("Первая " + 'вторая').center(20) # дают одно и то же.
• В Ruby есть несколько псевдопеременных, которые выглядят как локальные переменные, но применяются для особых целей. Это self, nil, true, false, __FILE__и __LINE__.
1.5.2. Перспективы программирования
Наверное, каждый, кто знает Ruby (сегодня), в прошлом изучал или пользовался другими языками. Это, с одной стороны, облегчает изучение Ruby, так как многие средства похожи на аналогичные средства в других языках. С другой стороны, у программиста может возникнуть ложное чувство уверенности при взгляде на знакомые конструкции Ruby. Он может прийти к неверным выводам, основанным на прошлом опыте; можно назвать это явление «багажом эксперта».
Немало специалистов переходит на Ruby со Smalltalk, Perl, C/C++ и других языков. Ожидания этих людей сильно различаются, но так или иначе присутствуют. Поэтому рассмотрим некоторые вещи, на которых многие спотыкаются.
• Символ в Ruby представляется целым числом. Это не самостоятельный тип, как в Pascal, и не эквивалент строки длиной 1. В ближайшем будущем положение изменится и символьная константа станет строкой, но на момент написания данной книги этого еще не произошло. Рассмотрим следующий фрагмент:
x = "Hello"
y = ?А
puts "x[0] = #{x[0]}" # Печатается x[0] = 72
puts "y = #{y}" # Печатается y = 65
if y == "А" # Печатается no
puts "yes"
else
puts "no"
end
• He существует булевского типа. TrueClassи FalseClass— это два разных класса, а единственными их экземплярами являются объекты trueи false.
• Многие операторы в Ruby напоминают операторы в языке С. Два заметных исключения — операторы инкремента и декремента ( ++и --). Их в Ruby нет ни в «пост», ни в «пред» форме.
• Известно, что в разных языках оператор деления по модулю работает по-разному для отрицательных чисел. Не вдаваясь в споры о том, что правильно, проиллюстрируем поведение в Ruby:
puts (5 % 3) # Печатается 2
puts (-5 % 3) # Печатается 1
puts (5 % -3) # Печатается -1
puts (-5 % -3) # Печатается -2
• Некоторые привыкли думать, что «ложь» можно представлять нулем, пустой строкой, нулевым символом и т.п. Но в Ruby все это равно «истине». На самом деле истиной будет все кроме объектов falseи nil.
• В Ruby переменные не принадлежат никакому классу: класс есть только у значений.
• Переменные в Ruby не объявляются, однако считается хорошим тоном присваивать переменной начальное значение nil. Разумеется, при этом с переменной не ассоциируется никакой тип и даже не происходит истинной инициализации, но анализатор знает, что данное имя принадлежит переменной, а не методу.
• ARGV[0]— первый аргумент в командной строке; они нумеруются начиная с нуля. Это не имя файла или сценария, предшествующего параметрам, как argv[0]в языке С.
• Большинство операторов в Ruby на самом деле является методами; их запись в виде «знаков препинания» — не более чем удобство. Первое исключение из этого правила — набор операторов составного присваивания ( +=, -=и т.д.). Второе исключение - операторы =, .., ..., !, not, &&, and, ||, or, !=, !~.
• Как и в большинстве современных языков программирования (хотя и не во всех), булевские операции закорачиваются, то есть вычисление булевского выражения заканчивается, как только его значение истинности становится известным. В последовательности операций orвычисление заканчивается, когда получено первое значение true, а в последовательности операций and— когда получено первое значение false.
Интервал:
Закладка: