diff options
author | Levi Bostian <levi.bostian@banno.com> | 2013-11-25 09:42:37 -0600 |
---|---|---|
committer | Levi Bostian <levi.bostian@banno.com> | 2013-11-25 09:42:37 -0600 |
commit | af6701904b459b16cf65709cd8c70fd2f5519457 (patch) | |
tree | 68cb4bf9ead32686f492e68528e9f0761e41c500 /ru-ru/ruby-ru.html.markdown | |
parent | df3cc00f5233dac96c0e063d87d3552f493e25f6 (diff) | |
parent | d24c824d388669181eed99c3e94bb25c2914304a (diff) |
Fix conflict bash.
Diffstat (limited to 'ru-ru/ruby-ru.html.markdown')
-rw-r--r-- | ru-ru/ruby-ru.html.markdown | 100 |
1 files changed, 85 insertions, 15 deletions
diff --git a/ru-ru/ruby-ru.html.markdown b/ru-ru/ruby-ru.html.markdown index 0a8fbb09..318e0e09 100644 --- a/ru-ru/ruby-ru.html.markdown +++ b/ru-ru/ruby-ru.html.markdown @@ -8,6 +8,7 @@ contributors: - ["Luke Holder", "http://twitter.com/lukeholder"] - ["Tristan Hume", "http://thume.ca/"] - ["Nick LaMuro", "https://github.com/NickLaMuro"] +translators: - ["Alexey Makarov", "https://github.com/Anakros"] --- @@ -42,7 +43,7 @@ contributors: # Логические величины -- это объекты nil # Здесь ничего нет -true # правда +true # истина false # ложь nil.class #=> NilClass @@ -78,7 +79,8 @@ false.class #=> FalseClass placeholder = "использовать интерполяцию строк" "Я могу #{placeholder}, когда создаю строку с двойными кавычками" -#=> "Я могу использовать интерполяцию строк, когда создаю строку с двойными кавычками" +#=> "Я могу использовать интерполяцию строк, +# когда создаю строку с двойными кавычками" # печатать в стандартный вывод @@ -106,10 +108,10 @@ path = '/bad/name/' # Идентификаторы (тоже объекты) # Идентификаторы -- это неизменяемые, многоразовые константы. -# Для каждого идентификатора (кроме текста) сохраняется цифровой хэш. При последующем -# использовании идентификатора, заместо создания нового объекта, будет найден уже -# существующий по цифровому хэшу. Они часто используются вместо строк -# для ускорения работы приложений +# Для каждого идентификатора (кроме текста) сохраняется цифровой хэш. +# При последующем использовании идентификатора, заместо создания нового объекта, +# будет найден уже существующий по цифровому хэшу. +# Они часто используются вместо строк для ускорения работы приложений :pending.class #=> Symbol @@ -177,15 +179,15 @@ new_hash.keys #=> [:defcon, :action] # Управление ходом выполнения (Управляющие структуры) if true - "if условие" + "Если истина" elsif false - "else if, условие" + "Иначе, если ложь (опционально)" else - "else, условие" + "Во всех других случаях" end for counter in 1..5 - puts "#итерация {counter}" + puts "итерация #{counter}" end #=> итерация 1 #=> итерация 2 @@ -196,10 +198,11 @@ end # Однако, никто не использует "for" для циклов. # Вместо него Вы должны использовать метод "each" вместе с блоком кода. # -# Блок кода -- это один из вариантов создания замыканий (лямбды, анонимные функции). +# Блок кода -- это один из вариантов создания замыканий (лямбды, +# анонимные функции). # Блок может только передаваться методу, сам по себе он существовать не может. # "for" не имеет своей области видимости и все переменные, объявленные в нём -# будут доступны отовсюду. "each" вместе с блоком создаёт свою область видимости. +# будут доступны отовсюду. "each" вместе с блоком создаёт свою область видимости # Метод "each" для диапазона значений запускает блок кода один раз # для каждого из значений диапазона @@ -218,7 +221,7 @@ end # Вы также можете ограничивать блоки фигурными скобками: (1..5).each {|counter| puts "итерация #{counter}"} -# Содержимое управляющих структур также можно перебирать используя "each": +# Содержимое структурных данных также можно перебирать используя "each": array.each do |element| puts "#{element} -- часть массива" end @@ -349,10 +352,27 @@ dwight.name #=> "Dwight K. Schrute" # Вызов метода класса Human.say("Hi") #=> "Hi" -# Класс тоже объект в Ruby. Потому класс может иметь переменные экземпляра. +# Область видимости переменной определяется тем, как мы даём имя переменной. +# Переменные, имя которых начинается с "$" имеют глобальную область видимости +$var = "I'm a global var" +defined? $var #=> "global-variable" + +# Переменная экземпляра класса, она видна только в экземпляре +@var = "I'm an instance var" +defined? @var #=> "instance-variable" + +# Переменная класса, видна для всех экземпляров этого класса и в самом классе +@@var = "I'm a class var" +defined? @@var #=> "class variable" + +# Имена переменных с большой буквы используются для создания констант +Var = "I'm a constant" +defined? Var #=> "constant" + +# Класс тоже объект в Ruby. Класс может иметь переменные экземпляра. # Переменная класса доступна в классе, его экземплярах и его потомках. -# Базовый класс +# Пример класса class Human @@foo = 0 @@ -395,4 +415,54 @@ end Human.bar # 0 Doctor.bar # nil +module ModuleExample + def foo + 'foo' + end +end + +# Включение модулей в класс добавляет их методы в экземпляр класса +# Или в сам класс, зависит только от метода подключения +class Person + include ModuleExample +end + +class Book + extend ModuleExample +end + +Person.foo # => NoMethodError: undefined method `foo' for Person:Class +Person.new.foo # => 'foo' +Book.foo # => 'foo' +Book.new.foo # => NoMethodError: undefined method `foo' + +# Коллбэки при подключении модуля + +module ConcernExample + def self.included(base) + base.extend(ClassMethods) + base.send(:include, InstanceMethods) + end + + module ClassMethods + def bar + 'bar' + end + end + + module InstanceMethods + def qux + 'qux' + end + end +end + +class Something + include ConcernExample +end + +Something.bar # => 'bar' +Something.qux # => NoMethodError: undefined method `qux' +Something.new.bar # => NoMethodError: undefined method `bar' +Something.new.qux # => 'qux' ``` |