Ruby - интерпретируемый динамичный язык программирования высокого уровня, пришедший к нам из далекой утонченной страны Японии (Аниме!!!!!). Его так же сложно понять, как и умы японцев. Взгляните только на это:
http://www.youtube.com/watch?v=V3j4Y3InMHc
Рассказывать я буду не про достоинства и недостатки Ruby, а про характерные особенности, незнания которых могут привести к серьезным ошибкам. (Если рассуждать про достоинства и недостатки, начнется безудержный холивар)
Ruby - полностью объектно-ориентированный язык. Это означает, что все данные в нем являются объектами, в отличие от многих языков программирования с примитивными типами. Каждая функция - метод какого-то класса.
"Ruby".class
=> String
1.class
=> Fixnum
123.to_s
=> "123"
http://www.youtube.com/watch?v=V3j4Y3InMHc
Рассказывать я буду не про достоинства и недостатки Ruby, а про характерные особенности, незнания которых могут привести к серьезным ошибкам. (Если рассуждать про достоинства и недостатки, начнется безудержный холивар)
1. ООП от головы до пят
Ruby - полностью объектно-ориентированный язык. Это означает, что все данные в нем являются объектами, в отличие от многих языков программирования с примитивными типами. Каждая функция - метод какого-то класса.
"Ruby".class
=> String
1.class
=> Fixnum
123.to_s
=> "123"
Как видите, даже численные примитивы являются объектами со своим набором методов. Даже true и false являются объектами классов TrueClass и FalseClass
2. Правда и ложь. Объект nil
В Руби всего два объекта обладают булевым значением false. Это объект false и объект nil (не NULL, как во многих других языках!). Все остальные объекты являются эквивалентами булевого значения true. Это означает, что число 0 так же является эквивалентом значения true!
if 0
print "0 is true"
end
0 is true => nil
if !nil
print "nil object is false"
end
nil object is false => nil
if !false
print "false object is false"
end
false object is false => nil
3. Объекты передаются по ссылке
В Ruby методы получают ссылку на объект, а не копию его значения. Это означает, что изменение объекта внутри метода повлечет за собой его изменение в вызывающем контексте. В Ruby это называется вызов по соиспользованию (объект является рязделяемым, или используемым совместно).
ЗАМЕЧАНИЕ: Присвоение значения аргументу в методе не повлечет за собой никаких изменений в вызывающем контексте. Присвоение значений компонентам аргумента - повлечет.
Заключение
Если хотите узнать больше, переходите сюда, изучайте и достигайте просвещения.
Комментариев нет:
Отправить комментарий