note


Лексическая структура

Интерпретатор Ruby проводит синтаксический анализ программы как последо­вательности лексем, то есть последовательностей допустимых символов языка программирования, имеющих смысл для транслятора.. Лексемы состоят из комментариев, литералов, знаков пун­ктуации, идентификаторов и ключевых слов.

Литералы

Литералы — это значения (фиксированные значения), непосредственно появляющиеся в исходном коде Ruby. Это могут быть числа, текстовые строки и регулярные выражения. (Другие ли­тералы, такие как значения массивов и хэшей, не представляют собой отдельные лексемы, являясь более сложными выражениями.) Как выглядят Ruby-литералы:

1 #Целочисленный литерал

1.0 #Литерал в виде числа с плавающей точкой

'one' #Строковый литерал

"two" #Еще один строковый литерал

/three/ #Литерал в виде регулярного выражения

Предицировать утверждать, заявлять От лат. praedicare «провозглашать, объявлять во всеуслышанье»

Предикат (лат. praedicatum «заявленное, упомянутое, сказанное») — это утверждение, высказанное о субъекте. Субъектом высказывания называется то, о чём делается утверждение.

Предикат в программировании — выражение, использующее одну или более величину с результатом логического типа, булева типа.

(Логический тип данных, или булев тип, или булевый тип (от англ. Boolean или logical data type) — примитивный тип данных в информатике, принимающий два возможных значения, иногда называемых истиной (true) и ложью (false). Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через численный тип данных. В некоторых языках программирования за значение истина полагается 1, за значение ложь — 0.)


Знаки пунктуации

В Ruby знаки пунктуации используются для разных целей. Многие Ruby-опе­раторы пишутся с использованием знаков пунктуации, таких как + — для сложе­ния, * — для умножения и 11 — для булевой операции OR (или). Знаки пунктуации также служат для разделения строк, регулярных выражений, литералов массивов и хэшей, а также для группировки и разделения выражений, параметров методов и индексов мас­сивов.

Идентификаторы

Идентификатор — это обычное имя. Ruby использует идентификаторы для при­сваивания имен переменным, методам, классам и т. д. Идентификаторы Ruby состоят из букв, цифр и символов подчеркивания, но они не могут начинаться с цифры. Идентификаторы не могут включать пробелы или неотображаемые сим­волы, и они не могут включать знаки пунктуации, за исключением случаев, уже упомянутых в этом описании.

Идентификаторы, начинающиеся с заглавной буквы в диапазоне A-Z, являются константами, и интерпретатор Ruby выдаст предупреждение (но не ошибку), если вы станете изменять значение такого идентификатора. Первые буквы в именах классов и модулей должны быть заглавными. Все, показанное в следующем при­ мере, является идентификаторами:

х2

old_value

_internal # Идентификаторы могут начинаться со знаков подчеркивания

PI # Константа

По соглашению, многословные идентификаторы, не являющиеся константами, пишутся со знаками подчеркивания — вот_так, а многословные константы пишут­ся Вот_Так или В0Т_ТАК.

Использование в идентификаторах знаков пунктуации

Знаки пунктуации могут появляться в начале и в конце Ruby-идентификаторов и предназначения для определенных целей, что отражено в таблице примеров идентификаторов, имеющих в начале или в конце знаки пунктуации:

$files #Глобальная переменная

@data #Переменная экземпляра

@@counter #Переменная класса

empty? #Метод или предикат, возвращающий булево значение

sort! #Альтернатива обычному методу сортировки, изменяющая сам объект

timeout= #Метод, вызываемый присваиванием

Многие Ruby-операторы реализованы в виде методов, с тем чтобы классы мог­ли их переопределить для своих собственных нужд. Тем самым предоставляется возможность использования некоторых операторов и в качестве имен методов. В этом контексте знаки пунктуации или символы операторов рассматриваются в качестве идентификаторов, а не операторов.

$

В качестве префикса в глобальных переменных используется знак доллара. По примеру языка Perl, в Ruby определяется ряд глобальных переменных, включающих другие знаки пунктуации, в числе которых $_ и $-К.

@

В переменных экземпляра в качестве префикса используется одинарный знак at, а в пере­менных класса — двойной знак.

?

Для удобства методы, возвращающие булевы значения, зачастую имеют имена, заканчиваю­щиеся вопросительным знаком

!

Имена методов могут заканчиваться восклицательным знаком, чтобы предупредить, что при их использовании следует проявлять осторожность. Это соглашение об именах зачастую служит отличительным признаком методов-мутаторов, изменяющих тот объект, для которого они были вызваны, от тех методов, которые возвращают модифицированную копию ис­ходного объекта

=

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

Чувствительность к регистру

Ruby является языком, чувствительным к регистру символов. Заглавные и строч­ные буквы отличаются друг от друга. К примеру, ключевое слово end отличается от ключевого слова END.

Символы Юникода в идентификаторах

Правила языка Ruby для образования идентификаторов определены в понятиях недопустимых символов ASCII. А вообще-то в идентификаторах могут приме­няться все символы за пределами набора ASCII, включая символы, рассматри­ваемые как знаки пунктуации. К примеру, в файле с кодировкой UTF-8 допустим следующий код Ruby:

def х(х,у) # Имя этого метода является знаком умножения в Юникоде

х*у # Тело этого метода осуществляет перемножение его аргументов

end

Специальные правила образования идентификаторов касаются использования символов ASCII и не распространяются на символы, находящиеся за пределами этого набора. К примеру, идентификатор не должен начинаться с цифры, но он может начинаться с той цифры, которая не входит в кодировку латиницы. По тем же правилам, если идентификатор должен представлять константу, его следует начинать с заглавной буквы набора символов ASCII. К примеру, идентификатор А константу представлять не может. Два идентификатора считаются одинаковыми, если они представлены одина­ ковой последовательностью байтов. Некоторые наборы символов, такие как Юникод, для одного и того же символа имеют несколько кодов. Нормализация Юникода в Ruby отсутствует, и два разных кода символов рассматриваются как разные символы, даже если имеют одинаковое назначение или представлены од­ним и тем же шрифтовым образом.

Разделители

Пробелы, знаки табуляции и символы новой строки сами по себе лексемами не яв­ляются, а используются для разделения лексем, которые без них объединились бы в одну большую лексему. Кроме этой основной функции по разделению лексем, большинство разделителей игнорируются интерпретатором Ruby и используют­ся лишь для форматирования программ, облегчая их чтение и понимание. Тем не менее игнорируются не все разделители. Некоторые из них бывают востребованы, а некоторые — запрещены. Грамматика Ruby выразительна, но сложна, и суще­ствует ряд обстоятельств, при которых вставка или удаление разделителей может изменить смысл программы. И хотя такие случаи встречаются довольно редко, вам важно знать об их существовании.

Символы новой строки как признаки конца оператора

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

В отсутствие завершающих точек с запятой Ruby-интерпретатор вынужден сам определять, где заканчивается оператор. Если присутствующий в строке код Ruby является синтаксически завершенным оператором, Ruby использует в качестве признака конца строки символ новой строки. (В Ruby 1.9 на этот счет имеется одно исключение.) Когда все ваши операторы умещаются на отдельной строке, проблем не возникает. Но если так не получается, то следует разбить строку таким образом, чтобы Ruby-интерпретатор не смог толковать первую строку в качестве самостоятельного опе­ратора. Именно здесь и проявляется зависимость от разделителя: ваша программа может вести себя по-разному в зависимости от того, куда вставлен символ новой строки. К примеру, следующий код складывает значения х и у и присваивает сум­му переменной total:

total = х + # Незавершенное выражение, синтаксический анализ продолжается

У

Но вот этот код присваивает значение х переменной total , а затем вычисляет пере­менную у, не внося в нее никаких изменений:

total = х # Завершенное выражение

+ у # Бесполезное, но завершенное выражение

В качестве еще одного примера рассмотрим использование операторов return и break. Ко всему прочему они могут сопровождаться выражением, предостав­ляющим возвращаемое значение. Символ новой строки между ключевым словом и выражением завершит оператор перед выражением. Без опасений преждевременного завершения оператора можно вставлять символ новой строки после знака операции или после точки или запятой в вызове метода, литерала массива или литерала хэша.

Также можно нейтрализовать обрыв строки с помощью обратного слэша, предот­вращающего автоматическое завершение оператора, выполняемое Ruby-интерпретатором:

var total = первое_длинное_имя_переменной + второе_длинное_имя_переменной \ + третье_длинное_имя_переменной

# Учтите, что в верхней строке оператор не завершается

В Ruby 1.9 правила завершения оператора немного изменились. Если первый не являющийся пробелом символ строки будет точкой, то строка рассматривается как строка-продолжение, и предшествующий символ новой строки не является признаком завершения оператора. Строки, начинающиеся с точек, удобны для длинных цепочек методов, которые иногда используются с «многословными (fluent) API», в которых каждый вызов метода возвращает объект, в отношении которого могут быть произведены дополнительные вызовы. К примеру:

animals = Array.new

.pushC’dog") # В Ruby l.B этот код не работает

.pushCcow")

.pushCcat")

.sort

re ...приставка

Ре… (re…) — приставка, указывающая на:

  • повторное, возобновляемое, воспроизводимое действие (ревизия, регенерация, реконструкция и т. п.)

  • действие, противоположное (обратное) выраженному корнем слова (регресс и т. п.);

  • противодействие (реакция и т. п.)

Например: re + factoring

Рефакторинг (англ. refactoring), или перепроектирование кода, переработка кода, равносильное преобразование алгоритмов — процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы. В основе рефакторинга лежит последовательность небольших эквивалентных (то есть сохраняющих поведение) преобразований. Поскольку каждое преобразование маленькое, программисту легче проследить за его правильностью, и в то же время вся последовательность может привести к существенной перестройке программы и улучшению её согласованности и чёткости.

Факторинг (англ. factoring от англ. factor — посредник, торговый агент) — это комплекс финансовых услуг для производителей и поставщиков, ведущих торговую деятельность на условиях отсрочки платежа.

В операции факторинга обычно участвуют три лица: фактор (факторинговая компания или банк) — покупатель требования, поставщик товара (кредитор) и покупатель товара (дебитор). В некоторых случаях, здесь может быть и четвёртая сторона-посредник, которая, например, предоставляет площадку или электронную платформу для совершения факторинговых сделок.