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 # Здесь ничего нет nil # Здесь ничего нет
true # правда true # истина
false # ложь false # ложь
nil.class #=> NilClass nil.class #=> NilClass
@ -79,7 +79,8 @@ false.class #=> FalseClass
placeholder = "использовать интерполяцию строк" placeholder = "использовать интерполяцию строк"
"Я могу #{placeholder}, когда создаю строку с двойными кавычками" "Я могу #{placeholder}, когда создаю строку с двойными кавычками"
#=> "Я могу использовать интерполяцию строк, когда создаю строку с двойными кавычками" #=> "Я могу использовать интерполяцию строк,
# когда создаю строку с двойными кавычками"
# печатать в стандартный вывод # печатать в стандартный вывод
@ -107,10 +108,10 @@ path = '/bad/name/'
# Идентификаторы (тоже объекты) # Идентификаторы (тоже объекты)
# Идентификаторы -- это неизменяемые, многоразовые константы. # Идентификаторы -- это неизменяемые, многоразовые константы.
# Для каждого идентификатора (кроме текста) сохраняется цифровой хэш. При последующем # Для каждого идентификатора (кроме текста) сохраняется цифровой хэш.
# использовании идентификатора, заместо создания нового объекта, будет найден уже # При последующем использовании идентификатора, заместо создания нового объекта,
# существующий по цифровому хэшу. Они часто используются вместо строк # будет найден уже существующий по цифровому хэшу.
# для ускорения работы приложений # Они часто используются вместо строк для ускорения работы приложений
:pending.class #=> Symbol :pending.class #=> Symbol
@ -178,15 +179,15 @@ new_hash.keys #=> [:defcon, :action]
# Управление ходом выполнения (Управляющие структуры) # Управление ходом выполнения (Управляющие структуры)
if true if true
"if условие" "Если истина"
elsif false elsif false
"else if, условие" "Иначе, если ложь (опционально)"
else else
"else, условие" "Во всех других случаях"
end end
for counter in 1..5 for counter in 1..5
puts "#итерация {counter}" puts "итерация #{counter}"
end end
#=> итерация 1 #=> итерация 1
#=> итерация 2 #=> итерация 2
@ -197,10 +198,11 @@ end
# Однако, никто не использует "for" для циклов. # Однако, никто не использует "for" для циклов.
# Вместо него Вы должны использовать метод "each" вместе с блоком кода. # Вместо него Вы должны использовать метод "each" вместе с блоком кода.
# #
# Блок кода -- это один из вариантов создания замыканий (лямбды, анонимные функции). # Блок кода -- это один из вариантов создания замыканий (лямбды,
# анонимные функции).
# Блок может только передаваться методу, сам по себе он существовать не может. # Блок может только передаваться методу, сам по себе он существовать не может.
# "for" не имеет своей области видимости и все переменные, объявленные в нём # "for" не имеет своей области видимости и все переменные, объявленные в нём
# будут доступны отовсюду. "each" вместе с блоком создаёт свою область видимости. # будут доступны отовсюду. "each" вместе с блоком создаёт свою область видимости
# Метод "each" для диапазона значений запускает блок кода один раз # Метод "each" для диапазона значений запускает блок кода один раз
# для каждого из значений диапазона # для каждого из значений диапазона
@ -219,7 +221,7 @@ end
# Вы также можете ограничивать блоки фигурными скобками: # Вы также можете ограничивать блоки фигурными скобками:
(1..5).each {|counter| puts "итерация #{counter}"} (1..5).each {|counter| puts "итерация #{counter}"}
# Содержимое управляющих структур также можно перебирать используя "each": # Содержимое структурных данных также можно перебирать используя "each":
array.each do |element| array.each do |element|
puts "#{element} -- часть массива" puts "#{element} -- часть массива"
end end
@ -350,10 +352,27 @@ dwight.name #=> "Dwight K. Schrute"
# Вызов метода класса # Вызов метода класса
Human.say("Hi") #=> "Hi" 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 class Human
@@foo = 0 @@foo = 0
@ -396,4 +415,54 @@ end
Human.bar # 0 Human.bar # 0
Doctor.bar # nil 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'
``` ```