Archive for декабря, 2010

Фокусы-Покусы с Хэшами: трюки с передачей блока кода

декабря 31, 2010  |  Published in Ruby, Основы

ruby hash triks magic hatВ Ruby при объявлении хэша, в хэш можно передавать блок кода. Блок передаваемый хэшу вызывается каждый раз, когда вы обращаетесь к несуществующему ключу хэша. Блок передаваемый хэшу при его объявлении имеет следующий формат:

Hash.new{|hash, key| … }

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

Tags: , ,

Как сделать вложенные комментарии в Ruby on Rails? Часть первая: Модели.

декабря 26, 2010  |  Published in Ruby on Rails, Ruby on Rails 3

ruby on rails polymorphic associationsНа YouTube вы могли заметить замечательную систему комментирования, где вы можете комментировать не только видео, но и отвечать на комментарии других людей, что по-сути является комментированием других комментариев.

Если вам нравится такая система комментирования, и вы хотите добавить что-то похожее в свое приложение, то вы могли бы создать две таблицы, например: PostComment и CommentComment или что-то подобное. Однако лучшим вариантом будет использование полиморфных ассоциаций. Полиморфизм позволяет комментариям принадлежать как посту, так и другим комментариям и еще чему угодно. «Полиморфные ассоциации» вероятно испугали вас, однако использовать их проще, чем вы могли предположить.

Внимание! В статье описывается то, как это делается в Ruby on Rails 3. Исходные коды вы можете скачать на . Read the rest of this entry »

Tags: ,

Memoize техники в Ruby и Ruby on Rails

декабря 24, 2010  |  Published in Ruby, Ruby on Rails, Основы

ruby brainЗаголовок не опечатка. Если вы не слышали о «memoizе», то я вам кратко расскажу. Memoiz’инг — это кэширование результата метода таким образом что когда вы вызываете метод в будущем, то он не выполняет заново все операции. Я покажу вам несколько различных техник для подобного кэширования, с комментариями за и против использования каждой техники.
Read the rest of this entry »

Tags:

Потомки Ruby: Mirah, Reia, Rite

декабря 23, 2010  |  Published in Ruby

ruby reia rite mirahВысокая продуктивность программиста и удовольствие от разработки — оба эти достоинства присущи языку Ruby. Matz в обоих своих интервью делал большой акцент на философию языка Ruby в результате чего другие разработчики получили напутствие: Дизайн языка для людей! Не для машин! Впервые представленный в декабре 1995 Ruby (версия 0.95) значительно преобразился и окреп со времен того первого релиза. Теперь мы имеем полдюжины альтернативных реализаций (как например JRuby, Rubinius, Maglev, Ruby EE и т.д.), десятки тысяч библиотек и, возможно, одно из самых активных сообществ разработчиков.

Однако, так как Ruby создавался не в секретных лабораториях ЦРУ, заимствуя множество идей и идеологий от Smalltalk, Lisp, Perl и других языков, то теперь он таким же образом имеет влияет на новые языки программирования, которые идут дальше простого подражания, копирования MRI; , , Rite и хорошие примеры таких новых языков. Некоторые из них разрабатываются только на бумаге, некоторые полностью экспериментальные, а некоторые реально работают и используются в продакшене. Давайте рассмотрим некоторых наиболее примечательных потомков Ruby поближе. Read the rest of this entry »

Tags: ,

Различия между Public, Protected и Private методами

декабря 19, 2010  |  Published in Ruby, Основы

Очень просто программировать несколько лет на Ruby и никогда не обращать внимание на декларирование видимости методов (прав доступа к методам) при помощи public, private и protected. Я так говорю потому, что и сам не обращал на это внимание. Я пришел в Ruby из С/C++, поэтому я отлично понимал концепцию public и private, и я догадывался о том, что собой представляет декларация protected в Ruby, но я никогда не пытался разобраться со всем этим более подробно. В конечном счете по некоторым причинам я заинтересовался этим вопросом и в этой статье я расскажу о различных декларациях видимости методов: public, protected и private.
Read the rest of this entry »

Tags:

alias и alias_method под микроскопом

декабря 12, 2010  |  Published in Ruby, Основы

rubyЧасто перед программистом становится необходимость создания второго имени для метода — псевдонима метода. Создание псевдонима может нам понадобится, например если мы хотим переопределить метод, но при этом данный метод нам так же необходим. Для этих задач Ruby предоставляет нам такие инструменты, как alias и alias_method. Псевдоним — это не просто другое имя, это полная, точная копия метода, которой дано новое имя, благодаря чему мы можем изменить один метод (оригинал) не боясь, что это как-то отразится на другом (псевдониме — копии). Давайте рассмотрим пример использования alias:

Read the rest of this entry »

Tags:

Что делает оператор * — «звездочка» в Ruby?

декабря 8, 2010  |  Published in Ruby, Основы

ruby asterisk operatorRuby — язык, который полон сюрпризов, чаще всего приятных. Одной из интересных идиом в Ruby является унарный оператор «звездочка» - *, он же asterisk и splat. К сожалению не все умеют с ним работать и не все понимают что он делает. Мне больше всего нравится название asterisk, поэтому я буду использовать его далее по тексту.
Read the rest of this entry »

Tags:

Ruby и красивый код #4

декабря 7, 2010  |  Published in Ruby, Основы

Это относительно вольный перевод с английского статьи

ruby

Предыдущие статьи из рубрики:
Ruby и красивый код #1
Ruby и красивый код #2
Ruby и красивый код #3

Что же такое идиома?
Идиома — это что-то специфическое в языке. Идиомы Ruby — это программистские техники которые специфичны для Ruby и позволяют писать на Ruby небольшие фрагменты кода, которые, если попытаться переписать на менее лаконичном языке, потеряют свою красоту и могут превратиться во что-то монструозное.

Зачем изучать идиомы в Ruby, если можно писать код и без них?

Во-первых идиомы — это лаконичный код, а во-вторых вы ведь не сплошь и рядом пользуетесь своими велосипедами? Вы наверняка используете чужие библиотеки и rubygem’ы и плагины и читая чужой код вы наверняка наткнетесь на идиомы и техники метапрограммирования, таким образом без знания идиом языка Ruby и техник метапрограммирования вы не сможете понять чужого кода.
Read the rest of this entry »

Tags: , ,