Архив за год: 2010

Mojo 0.999929

Поставил Mojo 0.999929.
Все хочу подробнее «поковырять» Mojo и Mojolicious — да вот все времени не хватает =(.

Для тех кто не знал/забыл — для установки/обновления этого замечательного Perl-фреймворка введите (ubuntu):

sudo cpanp install  Mojo

Ассоциативность операторов в Perl

Я уже и забыл, что есть такая штука как «ассоциативность» операторов и что она бывает правая и левая. Ассоциативность определяет в какой последовательности выполняются операторы с одинаковым приоритетом.

Пример:

5**6**8 # в какой последовательности будет выполнено возведение в степень ?

Правильный ответ:

5**(6**8)  # так как опертатор ** имеет правую ассоциативность

В «книге с ламой» очень правильно написано:

Нужно ли заучивать таблицу приоритетов и ассоциативности ?  
НЕТ!
Никто этого не делает!

Если возникает неоднозначность — просто используйте скобки!
Тем самым вы облегчите жизнь тому, кто будет поддерживать ваш код!

Про Perl

Оказывается, практически любая комбинация знаков препинания используется в Perl для каких-нибдуь целей. Так что если у вас наступит творческий кризис, пустите кошку прогуляться по клавиатуре и отладьте результат.

«Изучаем Perl» стр.55

Yii как я форматирую код

При разработке на Yii очень часто приходится иметь дело с формами и с моделями.
Формы (потомки CFormModel)  и модели (CActiveRecord), как правило, принимают параметры и что-то с ними делают =). При этом часто можно видеть записи вида:

$model = new Model();
$model->attr_1 = 'attr_1';
$model->attr_2 = 'attr_2';
...................................

Такая «кишка» присваиваний выглядит в коде не очень здорово.

Вместо этого можно и нужно использовать метод setAttributes.
Если еще и отформатировать код как-нибудь вот так:

$registration = new Registration();
$registration->setAttributes(array(
     'email'    =>  $email,
     'nickName' => $login,
     'password' => $pass,
));

if($registration->save()){
..................................
}

Жизнь становится прекраснее!

Аналогично форматировать  можно и код  выборки данных, используя ORM Yii:

Question::model()->answered()->with('user.profile','fromUser')->findAll(array(
   'condition' => 't.userId = :userId',
   'limit'          => self::STREAM_PER_PAGE,
   'offset'        => $already,
   'params'      => array('userId' => $user),
   'order'         => 't.creationDate DESC'
));

Пусть Ваш код будет приятным для чтения и просмотра!