Ruby

RubyDev Ruby Tutorial #6 > Регулярные выражения (Regular Expressions — RegExp) в Ruby

мая 15, 2011  |  Published in Ruby, Основы

1. регулярные выражения (Regular Expressions — RegExp) — что это?
Регулярные выражения — это очень мощная концепция, суть которой состоит в создании некоторого  шаблона строки, по которому можно производить поиск, проверку, замену, редактирование, разбиение и т.д. строки или ее подстроки.

Почему-то считается, что регулярные выражения — это что-то сложное, однако я их такими не нахожу, возможно потому, что я решал достаточно тривиальные задачи и не использовал все их возможности. В этой статье я попытаюсь скомпилировать весь материал, что я знаю, и все чего я не знал, но с чем разобирался при написании этой статьи.

Регулярное выражение — это запись метасимволов, которая задает шаблон строки. Основной и первичной функцией регулярных выражений является поиск соответствия строки шаблону регулярного выражения (далее по тексту просто шаблону). Вторичной функцией является работа со строками или подстроками, которые соответствуют или, наоборот не соответствуют регулярному выражению.

Метасимвол — это символ или несколько символов используемые в шаблоне для определения какой-либо вещи.

В Ruby регулярное выражение является объектом класса Regexp и позволяет любые операции над собой, которые позволяет любой другой объект. Пример самого простого регулярного выражения:

//.class #=> Regexp

Как вы уже догадались, регулярные выражения (шаблоны) заключаются в символы слэшей. Любой набор символов заключенных между прямыми слэшами будет расцениваться интерпретатором Ruby как регулярное выражение. Также существуют другие способы создания регулярных выражений:

%r{regexp here} и Regexp.new(«»)
Read the rest of this entry »

Tags: , ,

Динамические свойства в Ruby

апреля 16, 2011  |  Published in Ruby, Основы

rubyЯ работал над приложением написанным на Rails 3, в котором пользователи могли объявлять собственные свойства экземпляра модели, которые могли им понадобится. Проблема тогда состояла в том, как динамически создавать свойства объекта?
Read the rest of this entry »

Tags: , ,

RubyDev Ruby Tutorial #5 > Методы и процедуры в Ruby

апреля 13, 2011  |  Published in Ruby, Основы

Что есть метод и что есть процедура?
Метод — это определенное действие объекта.
Процедура — это просто действие не привязанное к объектам.

Методы свойственны только объектно-ориентированному программированию, а поцедуры функциональному.

Ruby является объектно-ориентированным языком программирования однако имеет в своем арсенале процедуры и лямбда-функции, которые являются объектами класса Proc.

Зачем необходимы процедуры
Без процедур в Ruby можно отлично обходиться, однако Ruby — язык широких возможностей и предоставляет вам множество способов реализовать один и тот же функционал.

Метод является частью объекта, и метод представляет действие объекта, однако иногда необхоимо просто выполнить определенное действие. В таком случае лучше и удобнее создать процедуру, чем определять класс и метод в нем. Еще одним важным преимуществом и полезной возможностью процедур является то, что они являются объектами, а значит могут присваиваться переменным.
Read the rest of this entry »

Tags: ,

RubyDev Ruby Tutorial #4 > Структуры в Ruby: экземпляры Struct

апреля 3, 2011  |  Published in Ruby, Основы

В Ruby имеется специальный, предопределенный тип Struct, который позволяет создавать экземпляры Struct (структуры), являющиеся специфичными классами, объекты которых напоминают хэши, с тем лишь отличием, что количество ключей ограничено и имеются методы аксессоры для доступа к хранимым в них свойствам. Структура является специфичным классом, специфика которого заключена в том, что каждая структура наследуется от класса Struct. Примеры структур:

Класс:

сlass Student
  def initialize(name, last_name, course)
    @name = name
    @last_name = last_name
    @course = course
  end

  attr_accessor :name, :last_name, :course
end

… можно легко заменить следущим объектом типа Struct:

student = Struct.new('Student', :name, :last_name, :course)

Read the rest of this entry »

Tags: ,

RubyDev Ruby Tutorial #3 > Объектно-ориентированное Программирование (ООП) в Ruby

апреля 2, 2011  |  Published in Ruby, Основы

Ruby — объектно-ориентированный язык программирования, поэтому знание парадигмы объектно-ориентированного программирования (ООП) является обязательным.

Тема объектно-ориентированного программирования достаточно сложна, поскольку в ней переплетаются множество подтем, которые, разделить нельзя, поэтому данная глава будет иметь итерационной подход к изложению материала, то есть мы будем двигаться по спирали захватывая все больший и большый объем информации.
Read the rest of this entry »

Tags: ,

RubyDev Ruby Tutorial #2 > Базовые типы данных в Ruby

марта 28, 2011  |  Published in Ruby, Основы


Строки

Строки — это произвольной длины наборы символов, которые заключены в одинарные или двойные кавычки. Пример строк:

«this is a string»
‘this is a string in single quotes’

Вы также можете заключять строковый литерал в любую другую пару символов, кроме одинарных и двойных кавычек указывая ставя перд ним специальный идентификатор строки %q, например:

%q!this is a string in single quotes!
%q{this is a string in single quotes}

Вы не можете использовать только цифры и буквы, все остальные символы доступны для заключения в них строкового литерала. Представленное в примере выше заключение строки в произвольные символы равносильно заключению в одинарные кавычки. Это важно знать потому, что между строкой в одинарных кавычках и в двойных имеется большая разница, но об этом чуточку ниже.
Read the rest of this entry »

Tags: ,

RubyDev Ruby Tutorial #1 > Введение в Ruby

марта 23, 2011  |  Published in Ruby, Основы

Предупреждение: Я не являюь профессиональным программистом, я любитель постигающий эту науку и желающий систематизировать свои знания путем написания учебника. Я стараюсь сделать его максимально полным и подробным, более качественным, чем все, что уже имеются. Создавая данный учебник я руководствуюсь своими личными соображениями о том, как он должен быть устроен и что в него должно быть включено. Если вам не нравится структура или изложение материала — просто не читайте, практика показывает, что это очень эффективный способ избежать болей ниже спины. Буду благодарен доброжелательной критике конкретно содержания, так как я не все знаю и даже в том, что знаю, могу заблуждаться.

Эта глава вводная, философская, совсем не практичная, однако очень важная. Она даст вам базовое представление о языке Ruby.

Философско-исторический аспект
Практический аспект
Установка Ruby
Кратко об элементах программного кода
Некоторые особенности Ruby Read the rest of this entry »

Tags: ,

&& и || vs AND и OR

февраля 27, 2011  |  Published in Ruby, Основы

Статья была признана некоректной и отредактирована! Большая благодарность комментаторам, в частности dre3k

До момента написания предыдущего поста, я и не знал, что && и and чем-то отличаются. В комментариях к предыдущему посту я узнал,что отличия существуют, и как оказывается достаточно значительные.

Что за различия?
&& и AND, || и OR одного поля ягоды, они выполняют абсолютно одинаковую функцию, однако имеют такое, несколько скрытое различие, как приоритет выполнения или старшинство. && и || имеют приоритет выше, чем AND и OR и именно на этом различии основываются все особенности работы с каждым из операторов. Давайте рассмотрим как же приоритет выполнения влияет на работу программы:

nil and a || b соответствует nil and (a || b) и мы получим nil
nil && a || b соответствует (nil and a) || b и мы получим b

Еще примеры:

c = 5 and 10 #=> 10
c #=> 5

Данное выражение соответствует выражению: (c = 5) && 10, поскольку у  and приоритет ниже, чем у «=».

c = 5 && 10 #=> 10
c #=> 10

Данное выражение соответствует выражению: с = (5 && 10) , поскольку у && приоритет выполнения выше, чем у «=»

Оператор and можно представить как постфиксный if:

puts "Hello!" if name == "Vladimir!"

идентично:

name == "Vladimir" and puts "Hello!"

Последовательность из OR можно представить как цепочку из «если здесь провал — попробуй это, если и здесь провал — пропробуй это, …», пример:

percent = 30
percent >= 51 or percent = 52

- примерно такой механизм использовали, на последних выборах в Украине.

В Perl и PHP существует такая идиома, как:

do_comthing or die do_something_else

Эту идиому можно реализовать в Ruby не только через unless, но и через or.

От куда взять все эти приоритеты операторов?

Tags:

Ruby и крассивый код #5: Рекомендации по стилю

февраля 24, 2011  |  Published in Ruby, Основы

samurai
Сегодня немного налажал с кодом и решил написать статью так сказать для закрепления представлений о хорошем коде в голове, ну и разумеется для того, чтобы поделиться имеющимися бедными познаниями с другими новичками. Более-менее опытным разработчикам все это уже, наверняка, известно, поэтому, если вы себя таковым считаете — можете не читать.
Read the rest of this entry »

Tags: , ,

Ruby’новые методы define_method, method_missing и instance_eval

февраля 13, 2011  |  Published in Ruby, Основы

rubyДавно хотел написать отдельные статьи по каждому из методов, но вчера нашел очень интересную статью в которой рассказывается о всех трех методах, да так, что мне аж понравилось. Собственно вот ее перевод:

Ruby’новые методы define_method, method_missing и instance_eval

Одной из вещей, которые мне так нравятся в Ruby есть то, что Ruby очень похож на Lisp. Конечно, Ruby не имеет полноты макросов, но он облает набором абсолютно крутецких методов, которые позволяют сокращать ваш код и делать ваши программы более легкоподдерживаемыми. Три метода, которые я реально обожаю это: define_method, method_missing и instance_eval. В этой статье я хочу подробно рассказать о них.
Read the rest of this entry »

Tags: , ,