summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAlexey <anakros.symbian@gmail.com>2013-09-29 00:19:08 +0700
committerAlexey <anakros.symbian@gmail.com>2013-09-29 00:19:08 +0700
commit8b96638dc8555f3a85a8065435a7894671f514f7 (patch)
tree0e29320446e06311688a533c8af31b61c3398a3a
parent42a2263ab1b2d911f6865975e518da91a3b73e0b (diff)
[ruby/ru-ru] Latest changes from English version && small changes in the translation
-rw-r--r--ru-ru/ruby-ru.html.markdown99
1 files changed, 84 insertions, 15 deletions
diff --git a/ru-ru/ruby-ru.html.markdown b/ru-ru/ruby-ru.html.markdown
index ead681ef..318e0e09 100644
--- a/ru-ru/ruby-ru.html.markdown
+++ b/ru-ru/ruby-ru.html.markdown
@@ -43,7 +43,7 @@ translators:
# Логические величины -- это объекты
nil # Здесь ничего нет
-true # правда
+true # истина
false # ложь
nil.class #=> NilClass
@@ -79,7 +79,8 @@ false.class #=> FalseClass
placeholder = "использовать интерполяцию строк"
"Я могу #{placeholder}, когда создаю строку с двойными кавычками"
-#=> "Я могу использовать интерполяцию строк, когда создаю строку с двойными кавычками"
+#=> "Я могу использовать интерполяцию строк,
+# когда создаю строку с двойными кавычками"
# печатать в стандартный вывод
@@ -107,10 +108,10 @@ path = '/bad/name/'
# Идентификаторы (тоже объекты)
# Идентификаторы -- это неизменяемые, многоразовые константы.
-# Для каждого идентификатора (кроме текста) сохраняется цифровой хэш. При последующем
-# использовании идентификатора, заместо создания нового объекта, будет найден уже
-# существующий по цифровому хэшу. Они часто используются вместо строк
-# для ускорения работы приложений
+# Для каждого идентификатора (кроме текста) сохраняется цифровой хэш.
+# При последующем использовании идентификатора, заместо создания нового объекта,
+# будет найден уже существующий по цифровому хэшу.
+# Они часто используются вместо строк для ускорения работы приложений
:pending.class #=> Symbol
@@ -178,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
@@ -197,10 +198,11 @@ end
# Однако, никто не использует "for" для циклов.
# Вместо него Вы должны использовать метод "each" вместе с блоком кода.
#
-# Блок кода -- это один из вариантов создания замыканий (лямбды, анонимные функции).
+# Блок кода -- это один из вариантов создания замыканий (лямбды,
+# анонимные функции).
# Блок может только передаваться методу, сам по себе он существовать не может.
# "for" не имеет своей области видимости и все переменные, объявленные в нём
-# будут доступны отовсюду. "each" вместе с блоком создаёт свою область видимости.
+# будут доступны отовсюду. "each" вместе с блоком создаёт свою область видимости
# Метод "each" для диапазона значений запускает блок кода один раз
# для каждого из значений диапазона
@@ -219,7 +221,7 @@ end
# Вы также можете ограничивать блоки фигурными скобками:
(1..5).each {|counter| puts "итерация #{counter}"}
-# Содержимое управляющих структур также можно перебирать используя "each":
+# Содержимое структурных данных также можно перебирать используя "each":
array.each do |element|
puts "#{element} -- часть массива"
end
@@ -350,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
@@ -396,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'
```