Merge pull request #369 from Anakros/master

[ruby/ru-ru] Latest changes from English version && small changes in the translation
This commit is contained in:
Adam Bard 2013-10-09 09:22:53 -07:00
commit d2ee4711a7

View File

@ -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'
```