суббота, 9 июля 2011 г.

Числа в Ruby

Давайте поиграем с числами. В Ruby числа без десятичной точки зовутся целыми и числа с десятичными точками обычно зовутся числа с плавающей точкой, или просто плавающие (вы должны переместить по крайней мере одно число перед десятичной точкой). Числовая константа это просто последовательность чисел, например 0, 123, 123456789. Нижние подчеркивания могут быть включены в числовую константу (несмотря на расположение в начале или в конце), и эта особенность иногда используется как разделитель, например, 1_000_000_000. Символы подчеркивания не учитываются в числовой строке.



Вот программа: r02rubynumbers.rb


  1. # r02rubynumbers.rb  
  2. =begin  
  3.  Числовые операторы Ruby:
  4.    
  5.  + сложение  
  6.  - вычитание  
  7.  * умножение  
  8.  / деление  
  9. =end  
  10.   
  11. puts 1 + 2  
  12. puts 2 * 3  
  13. # Разделитель целого числа  
  14. # Когда вы оперируете целыми числами, Вы получаете целые ответы  
  15. puts 3 / 2  
  16. puts 10 - 11  
  17. puts 1.5 / 2.6 

Целые числа являются объектами класса Fixnum или Bignum. Fixnum и Bignum классы представляют (?) целые числа различных размеров. Оба класса происходят (от общ. к частному, уменьшение) от Целых чисел (следовательно Числовых). Числа с плавающей точкой являются объектами класса Float, соответствующие двойному типу данных родной архитектуры. (Тута ваще запуталась. Из-за недостаточных знаний в математике, английском и программировании, ыы).
Потом здесь надо будет замутить табличку, русифицированную.

Операторы и приоритеты:


Метод   Оператор                                     Описание
   +         [] []=                                             Ссылка на элемент(?), множество элементов(?)
   +         **                                                 Возведение в степень
   +         !~+-                                              Нет, дополнение, унарные плюс и минус (имена методов для последних двух  - "+@ и -@")
   +        * / %                                              Умножить, разделить и по модулю (остаток от деления)  
   +        + -                                                  Плюс и минус
   +        >> <<                                            Правый и левый сдвиг
   +        &                                                   "И" (побитовое для целых чисел)  исключающее "или"  и регулярное "или" 
   +       ∧                                         (побитовое для целых чисел)
   +       <= < > >=                                      Операторы сравнения
   +       <=> = === != =~ !~                        операторы равенства и сравнения с шаблоном (!= и  !~
                                                                не могут быть определены как методы)
             &&                                                Логическое "и"
             II                                                   Логическое "или"
             .. ...                                               Диапазон (включительный и исключительный)
             ?:                                                  Тройной if-then-else
             = %= /= -= += I= &= >>=               Назначение, присваивание 
            <<= *= &&= II= **= 
            defined?                                        Проверка, определен ли символ
            not                                                Логическое отрицание
            or and                                           Логическое соединение
            if unless while until                        Изменители выражений, ыы
            begin/end                                     Блоковое выражение



a. Инкрементарные и декрементарные операторы (++ и --) не доступны в Ruby, ни в "пере", ни в "пост" формах. Тем не менее, запомните, что += и -= доступны.
b. Скобки (круглые скобки) работают так же, как с регулярной арифметикой. То что находится в скобках считается в первую очередь (или, выражаясь техническим языком, содержимому в скобках отдается большее предпочтение).
с. Проверка отмеченных операторов (?) это своего рода синтетический сахар (подробней об этом далее) - где что-либо выглядит как оператор, но является вызовом метода.
Поведение модальных операторов Ruby выглядит следующим образом:


  1. puts (5 % 3)      # выводит  2  
  2. puts (-5 % 3)     # выводит  1  
  3. puts (5 % -3)     # выводит -1  
  4. puts (-5 % -3)    # выводит -2  


Определение Ruby по модулю (%) оператор отличаются от аналогичных в C и Java. В Ruby -7%3 будет 2. В С и Java результат будет -1. В Ruby знак результата (для оператора %) всегда такой же, как знак второго операнда.

Различие между оператором or и II.
И or, и II возвращают свой первый аргумент, пока не будут иметь значение false, в случае которого они вычисляют значение выражения и возвращают свой второй аргумент. Это показано в следующем примере:


  1. puts nil || 2011  
  2. puts false || 2011  
  3. puts "ruby" || 2011  


Вывод будет таким:


  1. >ruby test.rb  
  2. 2011  
  3. 2011  
  4. ruby  



Единственная разница между or и II это их приоритет. У II больше приоритет, чем у or.


Принято употреблять II для присваивания значения переменной если только эта переменная еще не установлена. Это может быть написано вот так:


@variable = @variable || "default value" 


или, более идиоматично, вот так:

@variable ||= "default value" 

Одна причина для подобных альтернативных версий Булиановых операторов это то, что они имеют более низкий приоритет, чем операторы присвоения. Это означает, что вы можете писать Булиановы выражения, такие как, показаны ниже (которые присваивают значение переменным, пока она не столкнется со значением false.

if a = f(x) and b = f(y) and c = f(z) then d = g(a,b,c) end


Выражение просто не будет работать, если будет написано с && вместо and.


Фух, здесь еще править и править.

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

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