Отпуск – отличное время, можно отойти от своих прямых рабочих обязанностей и заняться чем-то таким, на что не оставалось (или попросту казалось что не остается) времени раньше, другими словами поделать что-то для души. На ряду со всякими житейскими развлечениями реальной жизни в отпуске, бывают дни когда хочется все-таки взять вечером лэптоп на колени и поизучать что-то новенькое. Таким новеньким для меня в отпуске стало изучение или точнее сказать беглый просмотр языка Ruby. Взялся я именно за сам язык, а не за модный сегодня фреймворк Ruby on Rails. Было интересно понять сам язык, его “философию”, его возможности.

Как же хорошо, что бывают отпуска, итак к Ruby…

Основное впечатление: Язык забавный.
Руби позиционируют как Genuine OO language, я бы перевел как Истинно ОО язык.

Все в Руби – объекты.
По-этому, можно делать даже так:

 

5.times {puts "Hello World!"}

Вообще, после Java слегка сложно перестроиться. В конце каждой строчки, по-началу, пытался ставить разделитель “;”, но как-то быстро отвык. Разделителем же, впрочем на ряду с ; является так же и символ перевода строки, так что в точке с запятой в конце строки нет никакой необходимости, да без нее код даже как-то лучше выглядит. :)
Несколько раз ловил себя на мысли, что неплохо бы для начала написать тип переменной при ее объявлении, но и это проходит.

На данный момент я прусь от, пожулуй, следующих простых вещей:

Iterators.

Конструкции вида:

a = ["a","b",12,["a",1]] //массив
a.each {|elem| puts elem}//выводим каждый елемент массива на новой строке

Заметил, что программисты на Ruby чаще используют именно эту конструкцию нежели цикл “for”

или

"abc".each_byte{|ch| //do smth with ch}//итерируемся по строчке

Такие конструкции радуют взгляд и кажутся очень удобными.
Они же равнозначны:

for elem in collection
    //do smth with elem
end

Blocks –

это собственно некоторый блок кода, который может быть ассоциирован с вызовом какого-либо метода, как если бы это был параметр, ну почти так. Мы их видели выше, говоря про итераторы.
Блок может быть вызыван один или более раз используя выражение “yield”
Рассмотрим на примере:

def callBlock
  yield
  yield
end

callBlock { puts "In the block" }

Результат:
In the block
In the block

Блок это собственно то, что находится между { } или do end.

Proc’s (Procedure objects)

Как часто вам хотелось передать в качестве параметра метода, другой метод? Мне вот нечасто, но хотелось…
Пример:

//формируем новый procedure object
myProc= proc {
    //stuff goes here
}

Метод, принимающий “процедуру” в качестве параметра и вызывающий ее:

def myMethod (p){
    //do something before calling the proc
    p.call //calling the procedure object
    //do something after
}

That’s it :)

Что не радует?
Вот это.

puts sum(2,3)
def sum(a,b)
  a+b
end

Нельзя вызывать функцию, которая еще не объявлена.

А в целом Ruby оставляет очень даже положительные впечатления.

Продолжение следует…
(в след. раз рассмотрим такие клевые штуки как: создание методов доступа к переменным класса, казалось бы чего тут нового, ан нет; модулях; и захватим еще что-нибудь интересное)

Advertisements