пятница, 15 июля 2011 г.

Имена в Ruby (Ruby Names)

Ruby Names используются, чтобы отсылать к константам, переменным, методам, классам и модулям. Первый символ имени помогают Ruby различить, для чего он предназначен. Точные имена являются зарезервированными словами и не могут быть использованы в качестве имени переменной, метода, класса или модуля. Маленькая буква означает символы от "a" до "z". Заглавная буква означает символы от "A" до "Z" и цифра означает от "0" до "9". Имя - это заглавная буква, маленькая буква или подчеркивание ("_"), которое сопровождается Name characters (Именными символами) (это любая комбинация букв верхнего и нижнего регистра, подчеркиваний и цифр).

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


 - Имена локальных переменных (объявленные в объекте) состоят из букв нижнего регистра (или подчеркивания), после которого идут именные символы. (romashka, _x, miracle_is_near).
 - Имена переменных экземпляра (объявленные в объекте всегда "принадлежат" любому объекту, которому сам относится (?хрень какая-то, а не перевод получаиццо). Имя начинается со значка "at" ("@"), после которого идут именные символы. (@sign, @_, @Counter).
 - Имена переменных класса (объявленные в классе) начинаются со значка двух "at" ("@@"), после которого идут именные символы. (@@sign, @@_, @@Counter). Переменная класса распространяется на все объекты класса. Существует только одна копия определенной переменной класса для данного класса. Переменные класса используются в верхнем уровне и определяются в Объекте и ведут себя как глобальные переменные. Переменные класса реже используются в программах, написанных на Ruby.
 - Глобальные переменные начинаются со значка доллара ("$"), после которого идут именные символы. Имя глобальной переменной может быть создано, используя "$-", после которого идет один любой символ ($counter, $COUNTER, $-x). Ruby определяет номер глобальной переменной, который включает другие пунктуационные символы, такие, как $- и $-K.

Константы
Имя константы начинается с большой буквы, после которой идут именные символы. Классовые и модульные имена являются константами, после чего идут именные условные обозначения. Например: MyMath, PI=3.1416, class MySimf


Имена методов
Имена методов должны начинаться с маленькой буквы (или подчеркивания). "?", "!" и "=" - только эти символы допустимы в качестве суффиксов имени (! или bang знаки - метод осторожности-специфический(?), также как и эквивалент знака осторожности метода с таким же именем, но без восклицания.(?) Более о bang-методах (Здесь ссыль на них) позднее.

По соглашению Rubyстов надо использовать нижнее подчеркивание для того чтобы отделить слова в методе или в имени переменной, где используется несколько слов. По соглашению большинство констант написаны всеми заглавными буквами с нижними подчеркиваниями для разграничения слов, LIKE_THIS. Класс Ruby и модульные имена это тоже константы, но их принято писать, используя первые заглавные буквы и ВерблюжийРежим (клевое название придумали :)), LikeThis.
Следует отметить, что любая данная переменная может в разные времена содержать ссылки на объекты многих различных типов. Константа Ruby это просто ссылка на объект. Константы создаются, когда они впервые присвоены (как правило, в классовом или модульном определении (?); они не должны быть определены в методе  - более о константах позже). Ruby  позволяет вам изменять значение константы, не смотря на то, что это приведет к появлению сообщения об ошибке. Также переменные в Ruby действуют как "ссылки" на объекты, которые подвергаются автоматическому мусорному коллекционированию (блин, настроение хуевое и перевод не получается. Какой-то бред пишу((() - лирическое отступление.
Вот пример, который демонстрирует то, что Ruby динамически типизирован (печатается?) - r07dt.rb

  1. # r07dt.rb  
  2. # Ruby динамичен
  3. x = 7           # integer  
  4. x = "house"  # string  
  5. x = 7.5        # real  
  6.   
  7. # В Ruby все, с чем вы сталкиваетесь, является объектом  
  8. 'I love Ruby'.length 



Базовые типы в Ruby являются Числовыми (субтипы включают Fixnum, Integer и Float), Строку, Массив, Словарь (хэш, ассоциативный массив), Объект, Символ, Диапазон действия и Регулярные выражения.


Хоть мы до сих пор не выучили классы, все равно вот немного слов о классе, который называется Float.
Float это подкласс Numeric (Числовых).
Float объекты представляют действительные числа, используя  представление с плавающей точкой родной архитектуры двойной точности (64-битовое представление действительного числа).
Dig - это классовая константа, которая дает точность Float'a (числа с плавающей точкой) в десятичных цифрах. Max другая классовая константа, которая дает самое большое Float (число с плавающей точкой).
Вот код:

puts Float::DIG  


выводит 1.7976931486232e+308

Давайте посмотрим на пример Питера Куперса, данный в книге Beginnng Ruby (ничего страшного, если вы еще не до конца понимаете код)

  1. rice_on_square = 1  
  2. 64.times do |square|  
  3.   puts "On square #{square + 1} are #{rice_on_square} grain(s)"  
  4.   rice_on_square *= 2  
  5. end  


Т.к. квадратиков 64, вы должны положить очень много триллионов риса на каждый квадратик!
(Тут ссылка на Перельмана)

Это доказывает, что Ruby может работать с очень большими числами, и в отличие от многих других языков программирования, нет никаких неудобных ограничений. Ruby делает это с разными классами, одни из которых называются Fixnum (по умолчанию), которые представляют легко управляемые меньшие числа(?), и другие, соответственно, Bignum, которые представляют "большие" числа Ruby, которые управляются (внутренне?). Ruby будет обрабатывать Bignums и Fixnum для вас, и вы можете выполнять арифметические и другие операции без каких-либо проблем. Результаты могут отличаться, в зависимости от архитектуры вашей системы, но т.к. эти изменения полностью выполняются Ruby, нет поводов для беспокойства.
Ruby не требует от вас использовать primitives (data types), когда данные этих типов, над которыми выполняются манипуляции - если они выглядят как число, это действительно число, если это строка, это действительно строка. Класс Объект имеет метод, который называется класс, который возвращает класс объекта, например:

  1. s = 'hello'  
  2. s.class  # String 


Вот другой пример: (Не беспокойтесь, если вы сейчас не понимаете код).

  1. puts 'I am in class = ' + self.class.to_s  
  2. puts 'I am an object = ' + self.to_s  
  3. print 'The object methods are = '  
  4. puts self.private_methods.sort 


Мы поговорим о self позже. private_methods - это метод класса Объекта и sort - это метод класса Массив.
В Ruby, все, с чем вы имеете дело, является объектом. И результаты этих манипуляций сами являются объектами. Нет никаких primitives или data-types.

  1. 5.times { puts "Mice!\n" } # more on blocks later  
  2. "Elephants Like Peanuts".length  

Комментариев нет:

Отправить комментарий