powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Событие или функция? Вот в чём вопрос!
25 сообщений из 30, страница 1 из 2
Событие или функция? Вот в чём вопрос!
    #34593160
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работаю над существующим проектом, в объектах которого фантастическим образом смешались события и функции. Попытки выявить чем руководствовись создатели системы, выбирая чем быть скрипту, ни к чему не привели. Более того, производя рефакторинг (refucktoring?) (а именно - перенося дублирующуюся функциональность в ancestor), словил себя на том, что нещадно превращаю события в функции и при этом мысленно очень нецензурно выражаюсь, хотя для моей зарплаты нет никакой разницы, пусть хоть одни eventы будут. Вот и подумалось - а есть ли какие-то очень конкретные правила что когда применять? Ну, ясное дело, в книжках описана разница, но в таком примерно виде: события могут быть только public, выполняются после скрипта предка если не приказать иначе, их можно "насадить" на системное событие. Это всё понятно, но всё-же есть какие-то чётко изложенные правила что из двух выбрать когда на первый взгляд оба варианта одинаково приемлемы? Может, и встречал это в книжках, когда учил любимый вечно умирающий PowerBuilder, но

Итак, событие применяется в ситуациях, когда:

1. Необходимо чтоб сначала отработал скрипт предка, затем - потомка (зачем делать функцию и вызывать скрипт предка вручную?).

2. Необходимо переопрделить скрипт объекта, помещённого в другой объект (например, мы в окне и хотим переопределить скрипт помещённого в него датавиндова - мы вынуждены оформлять этот скрипт как событие иначе не "увидим" его из окна). Это одна из необъяснимых странностей PowerBuilder-а (чё, кисло было позволить переопределять функции тем-же абсолютно образом?), и если б не она - не было бы этого пункта.

3. Мы "перезапускаем" встроенные (существующие) события PowerBuilder-а в другом объекте (как правило, в NVO для отделения обработки от визуальности, или чтоб использовать наследование где оригинальный объект этого не позволяет, как в случае с application manager-ом) - здесь технически, может, более приемлема функция, но переопределённым событиям мы обычно даём те-же имена, что и у переопределяемых (лишь пришпандоривая префиксы конвенции наименования, например ue_ItemChanged), и делание таких скриптов функцищй будет просто резать ухо (даже после 8-го стакана ясно, что ItemChanged - не функция).

4. Мы "сажаем" скрипт на системное событие операционки (когда-то читал, что таких событий в Виндовсе более 900, а сейчас, наверно, и того больше).

Во всех остальных случаях юзаем функцию и радуемся жинзи.

Или мне всё это померещилось? Будут какие-то мыслишки по поводу?
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34593172
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrsegoВот и подумалось - а есть ли какие-то очень конкретные правила что когда применять?Есть только одно правило - событие отрабатывает асинхронно к вызывающему коду а функция всегда отрабатывает синхронно. Все.

Для события ты можешь сделать someobject.PostEvent(eventname) и это событие выполнится даже после того как скрипт его вызвавший уже давным давно завершен. Для функции такой отложеный вызов ты сделать не можешь. Отсюда и пляши - есть подозрение что данная функциональность будет вызываться асинхронно - делаешь событие. Во всех остальных случаях - функцию.
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34593175
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl UrsegoВот и подумалось - а есть ли какие-то очень конкретные правила что когда применять?Есть только одно правило - событие отрабатывает асинхронно к вызывающему коду а функция всегда отрабатывает синхронно. Все.

Для события ты можешь сделать someobject.PostEvent(eventname) и это событие выполнится даже после того как скрипт его вызвавший уже давным давно завершен. Для функции такой отложеный вызов ты сделать не можешь. Отсюда и пляши - есть подозрение что данная функциональность будет вызываться асинхронно - делаешь событие. Во всех остальных случаях - функцию.
НЕ верно - функцию иожно точно также постнуть...
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34593236
edmikeca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще одна отличительная особенность события от функции. Можно триггеровать несуществующее событие и ничего не произойдет, а вот вызов несуществующего метода, то бишь функции, может завалить приложение.
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34593262
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl UrsegoВот и подумалось - а есть ли какие-то очень конкретные правила что когда применять?Есть только одно правило - событие отрабатывает асинхронно к вызывающему коду а функция всегда отрабатывает синхронно. Все.

Для события ты можешь сделать someobject.PostEvent(eventname) и это событие выполнится даже после того как скрипт его вызвавший уже давным давно завершен. Для функции такой отложеный вызов ты сделать не можешь. Отсюда и пляши - есть подозрение что данная функциональность будет вызываться асинхронно - делаешь событие. Во всех остальных случаях - функцию.
Бред. От первого до последнего слова.

Разница минимальная.
Стараюсь использовать функции.
Исключения: асинхронные сообщения, предопределенные события (по аналогии с retrievestart/retrieveend) чтобы проще было дополнять функциональность framework-а, безопасные динамические вызовы событий по имени (триггеровать несуществующее событие), в том числе для определения наличия у объекта нужного функционала по аналогии с "pfc_descendant" .
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34593295
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edmikecaЕсть еще одна отличительная особенность события от функции. Можно триггеровать несуществующее событие и ничего не произойдет, а вот вызов несуществующего метода, то бишь функции, может завалить приложение.Совершенно верно, но это тот случай, когда вопрос что использовать не возникает и, следовательно, не подпадает под то, что я написАл, а именно - если можно и то и то использовать. Внутренний голос "тянет" меня в сторону функций, но, собственно, почему не событий? Может потому, что событие всегда public, что иногда не есть хорошо?
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34593320
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego edmikecaЕсть еще одна отличительная особенность события от функции. Можно триггеровать несуществующее событие и ничего не произойдет, а вот вызов несуществующего метода, то бишь функции, может завалить приложение.Совершенно верно, но это тот случай, когда вопрос что использовать не возникает и, следовательно, не подпадает под то, что я написАл, а именно - если можно и то и то использовать. Внутренний голос "тянет" меня в сторону функций, но, собственно, почему не событий? Может потому, что событие всегда public, что иногда не есть хорошо?
То бишь почти всегда плохо...
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34593347
edmikeca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плохо что, что события всегда Public?
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34593349
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edmikecaПлохо что, что события всегда Public?
Естественно.
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34593360
edmikeca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп edmikecaПлохо что, что события всегда Public?
Естественно.
Ну вряд ли удастся обойтись без событий :)
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34593394
ZhV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego
2. Необходимо переопрделить скрипт объекта, помещённого в другой объект (например, мы в окне и хотим переопределить скрипт помещённого в него датавиндова - мы вынуждены оформлять этот скрипт как событие иначе не "увидим" его из окна). Это одна из необъяснимых странностей PowerBuilder-а (чё, кисло было позволить переопределять функции тем-же абсолютно образом?), и если б не она - не было бы этого пункта.

А вот эту багу очень даже можно превратить в фичу. :)
В качестве функций userobject-а используются скрипты, которые заведомо НЕ предназначены для переопределения на окнах/обьектах, которые используют данный обьект в качестве control-а.
Если же такое переопределение предполагается заведомо - то значит нужен event.

А вот для nonvisual обьекта - действительно разницы нет. За исключением возможности закрыть функции private/protected для вызовов извне
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34593938
Фотография ChV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кратко сказать так - если это может быть функцией - пусть будет ? :)
А если не кратко, то можно и упомянуть и о том, что удобно, описывая события в предке, сослаться на события, которые будут описаны в потомках.

Good Luck !
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34594286
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
если использовать события, то в наследнике всегда видно родительские события и можно посмотреть скрипт родительских событий

а чтобы посмотреть на функции родителя приходится закрывать текущий объект, открывать родительский, смореть, потом обратно

или есть какие-то методы?
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34594706
Фотография ChV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помнится были такие проблемы. Сейчас в PB 9.0.3 посмотрел - из объекта-потомка функции предка вижу так же как и события.

Good Luck !
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34595920
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я посмотрел из абсолютно той-же версии (build 8614) - не видно функции предка. Только события.
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34596278
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Ursego: считаю это определение одним из самых полных
+ (edmikeca) Можно триггеровать несуществующее событие

пункт №2 подходит и для невизуальных обьектов: их тоже можно вставить в визуальные через меню:
и соответственно расширить/переопределить только события
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34596296
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry.Можно триггеровать несуществующее событиеКакой ужас! А зачем? Аппликация ведь вылетит!
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34596323
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego Dmitry.Можно триггеровать несуществующее событиеКакой ужас! А зачем? Аппликация ведь вылетит!
Ужжос в том что вы не в курсе, что НЕ вылетит :-)
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34596602
Фотография ChV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrsegoА я посмотрел из абсолютно той-же версии (build 8614) - не видно функции предка. Только события.
Вообще - интересно. Я помню у меня были те же самые проблемы. Сейчас их нет. Может это где-то в настройках ? К сожалению помочь не могу - "чемоданное настроение" - завтра в отпуск, на эгейское море.
С Филиппом, как всегда, согласен - аппликация не вылетит. Чем и пользуюсь очень часто. Можно сделать объекты гораздо "тоньше"

Good Luck !
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34598138
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChV UrsegoА я посмотрел из абсолютно той-же версии (build 8614) - не видно функции предка. Только события.
Вообще - интересно. Я помню у меня были те же самые проблемы. Сейчас их нет. Может это где-то в настройках ? К сожалению помочь не могу - "чемоданное настроение" - завтра в отпуск, на эгейское море.

Вы просто про разные вещи говорите.
Один - про методы и события контролов размещенных в контейнере, а другой - про методы и события самого контейнера.
Для контролов доступно переопределение только событий.
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34598352
Фотография ChV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то я говорил именно о "контейнере" и, ес-но, абсолютно ничего о переопределении.

Good Luck !
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34599015
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп Ursego Dmitry.Можно триггеровать несуществующее событиеКакой ужас! А зачем? Аппликация ведь вылетит!
Ужжос в том что вы не в курсе, что НЕ вылетит :-)Не вылетит только если пользоваться давно устаревшим прадедушкиным методом TriggerEvent, принимающим имя события как стринг, но мы-то в 2007 году живём и пользуемся такими штуками, как TRIGGER/POST DYNAMIC/STATIC FUNCTION/EVENT, а с TRIGGER DYNAMIC EVENT - вылетит как пробка из шампанского! Но уж если надо зачем-то запустить метод динамически (что как правило свидетельствует об отсутствии у девелопера желания сделать кастинг к конкретному классу, что сделало бы скрипт более понятным, и о присутствии лени или незнания принципов создания качественного кода), то можно и функцию триггернуть динамицки. Аппликация вылетит, и поделом - нефиг вызывать то, чего нет, оставьте этих штучек Додику Копперфильду. При правильном кодировании такой надобности не возникнет! Но даже если я неправ в этом плане на все сто, это говорит о том, что товарищь, заговоривший об этом, невнимателен: я писАл о выборе между функией и событием там, где они ОБА приемлемы. А если приемлемо только событие, о чём говорить-то?
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34599090
edmikeca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо уж если надо зачем-то запустить метод динамически (что как правило свидетельствует об отсутствии у девелопера желания сделать кастинг к конкретному классу, что сделало бы скрипт более понятным, и о присутствии лени или незнания принципов создания качественного кода), то можно и функцию триггернуть динамицки. Аппликация вылетит, и поделом - нефиг вызывать то, чего нет, оставьте этих штучек Додику Копперфильду. При правильном кодировании такой надобности не возникнет!
Полный бред. А если еще дальше пойти по Вашим принципам, то нужно запретить использование таких вещей как this и parent , а обращение к методам/событиям жестко кодировать: win_name.tab_name.tabpg_name.function_name/trigger_name и т.д. и т.п.
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34599116
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не возникнет надобность если не использовать динамического создания объекта
При хорошем стиле эта надобность периодически возникает
Ну и эксцпшн наверное не в падлу перехватить или проверить существование метода(раз мы говорим о хорошем стиле) до того как его вызовешь
--------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34599121
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спор примерно о том же что использовать функции или процедуры:)
--------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Событие или функция? Вот в чём вопрос!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]