[image]

Гы. Эпическая ошибка на PHP. Вот же ж тормознул :D

 
+
-
edit
 

Balancer

администратор
★★★★★
компьютеры программирование PHP Epic fail
Короче, часто в объектах приходится использовать тяжёлые методы. Ежу понятно, что напрашивается решение, типа:
code php
  1. private $object = NULL;
  2. function object()
  3. {
  4.     if(is_null($this->object))
  5.         $this->object = object_load('object_class', $this->object_id());
  6.  
  7.     return $this->object;
  8. }

Всё хорошо, но задалбывает же писать одно и то же. А в редакторе настоящего программиста должна отсутствовать функция копирования блоков кода (с) Чарльз Мур.

Ну и разродился таким, вот, решением с пару недель назад:
code php
  1. function object() { return $this->load_attr('object', object_load(...)); }

где load_attr() - функция, которая сохраняет полученное значение во хэш атрибутов объекта, если там оно ещё не сохранено. Иначе - возвращает старое значение.

...

Опаньки, а в PHP-то вычисления неленивые... Форт, блин, на годы расслабляет :D Вчера отловил случайно, аж в 25 мест использование такого способа расползлось :) Пришлось сделать некрасиво в стиле:
code php
  1. function object() { return $this->__havec('object') ? $this->__lastc() : $this->__setc(object_load(...)); }

Не хватает, однако, синтаксических макросов в языке или оперирования процессом трансляции... :)

(хотя, конечно, я пример несколько упростил, именно такие задачи у меня решаются проще):
code php
  1. function auto_objects()
  2. {
  3.     return array(
  4.         'object' => 'object_class(object_id)',
  5.         ...
  6.     );
  7. }

...

Интересно, кто-то ещё на грабли допущения ленивости в языках, где её нет наступал, или это только меня так перекособочило? :D
   

  • Balancer [08.02.2011 18:25]: Перенос сообщений в BalaBOT
RU Серокой #08.02.2011 18:39  @Balancer#29.09.2009 20:07
+
-
edit
 

Серокой

координатор
★★★★
Balancer> допущения ленивости
Это что значит? Когда надеешься на действие по умолчанию, то есть неаккуратно соблюдаешь синтаксис?
   

  • Balancer [08.02.2011 18:50]: Перенос сообщений в BalaBOT
RU Balancer #08.02.2011 19:00  @Серокой#08.02.2011 18:39
+
-
edit
 

Balancer

администратор
★★★★★
Серокой> Это что значит? Когда надеешься на действие по умолчанию

Нет. Это термин, обозначающий выполнение вычислений при необходимости, а не при встречании их по тексту программы.

Если я напишу f(g(x)), то в неленивых языках произойдёт вычисление сперва g(x), потом - передача результата в f(x). В ленивых - в функцию f() передастся g(x). И если внутри не будет использовано, то и не вычислится.

Ленивые вычисления обычно характерны для некоторых функциональных языков, типа Хаскела.

В императивных в чистом виде почти не встречается, а на уровне компонентов - например, в Си-подобных языка условия ленивые. Если в выражении if(a && b) a будет ложным, то b не будет вычисляться.
   
+
-
edit
 

Balancer

администратор
★★★★★
идеология копипаст программирование
Воистину в редакторе настоящего программиста, как говаривал, Чарльз Мур, не должно быть функции копирования текста...

Этой ошибке, оказывается, уже три года. Всплыла — только сегодня :) Легко догадаться, как она возникла...

// Транслировано с juick.com
   

+
-
edit
 

Balancer

администратор
★★★★★
epic fail идиоты форумы юмор
Жесть какая. Капча на одном астрофоруме:



Они бы ещё задали вопрос «Планета Солнечной системы» или «Операционная система» :) Пришлось играть в угадайку. И с более ожидаемым Фобосом я не угадал :)

// Транслировано с juick.com
   
Последние действия над темой

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru