powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Событие или функция? Вот в чём вопрос!
30 сообщений из 30, показаны все 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
Событие или функция? Вот в чём вопрос!
    #34599145
edmikeca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если вернуться к началу обсуждения то я думаю, что в первую очередь нужно пользоваться здравым смыслом: вряд ли вместо методов set/get стоит создавать аналогичные события точно также как вместо pre-open/post-open событий стоит создавать аналогичные функции. Также и с динамическими вызовами. Как правильно заметил spas2001 при динамическом создании объектов без динамических вызовов бывает сложно обойтись (разве что запретить создание объектов динамически, для улучшения читабельности кода). А вообще говоря и то и другое больше религия которой придерживается тот или иной программист.
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34599222
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego Филипп Ursego Dmitry.Можно триггеровать несуществующее событиеКакой ужас! А зачем? Аппликация ведь вылетит!
Ужжос в том что вы не в курсе, что НЕ вылетит :-)Не вылетит только если пользоваться давно устаревшим прадедушкиным методом TriggerEvent, принимающим имя события как стринг, но мы-то в 2007 году живём и пользуемся такими штуками, как TRIGGER/POST DYNAMIC/STATIC FUNCTION/EVENT, а с TRIGGER DYNAMIC EVENT - вылетит как пробка из шампанского! Но уж если надо зачем-то запустить метод динамически (что как правило свидетельствует об отсутствии у девелопера желания сделать кастинг к конкретному классу, что сделало бы скрипт более понятным, и о присутствии лени или незнания принципов создания качественного кода), то можно и функцию триггернуть динамицки. Аппликация вылетит, и поделом - нефиг вызывать то, чего нет, оставьте этих штучек Додику Копперфильду. При правильном кодировании такой надобности не возникнет! Но даже если я неправ в этом плане на все сто, это говорит о том, что товарищь, заговоривший об этом, невнимателен: я писАл о выборе между функией и событием там, где они ОБА приемлемы. А если приемлемо только событие, о чём говорить-то?
Для тех, кому лень хелп почитать:
Errors when calling functions and events dynamically
Events

Consider these statements:

1 This statement calls an event without looking for a return value:

object.EVENT DYNAMIC eventname( )

2 This example looks for an integer return value:

int li_int

li_int = object.EVENT DYNAMIC eventname( )

3 This example looks for an Any return value:

any la_any

la_any = object.EVENT DYNAMIC eventname( )

The following table uses these statements as examples.

Condition 1 Condition 2 Result Example
The event does not exist. The code is not looking for a return value. Nothing; the call fails silently. Statement 1 fails but does not cause an error.
The code is looking for a return value. A null of the Any datatype is returned. La_any is set to null in statement 3.
If the expected datatype is not Any, execution error 19 occurs: Cannot convert Any in Any variable to datatype. The assignment to li_int causes execution error 19 in statement 2.
The event is found but is not implemented (there is no script). The event has a defined return value. A null of the defined datatype is returned. If eventname is defined to return integer, li_int is set to null in statement 2.
The event does not have a defined return value. A null of the Any datatype is returned. La_any is set to null in statement 3.
If the expected datatype is not Any, execution error 19 occurs: Cannot convert Any in Any variable to datatype. The assignment to li_int causes execution error 19 in statement 2.
The event is found and executed but is not defined with a return value. The code is looking for a return value. Execution error 63: Function/event with no return value used in expression. Statements 2 and 3 cause error 63.
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34599297
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То Филипп
+1
Как говорится, что и требовалось доказать
--------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34599299
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Естьвсе-таки разница между кодерами и программистами-разработчиками :-)
--------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Событие или функция? Вот в чём вопрос!
    #34599720
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrsegoTRIGGER DYNAMIC EVENT - вылетит как пробка из шампанского!
FYI
Этот код при отсутствии события ue_test вылетит:
Код: plaintext
1.
2.
int a,b
b=parent.dynamic event ue_test(a)

НО Этот код при отсутствии события ue_test успешно выполнится:
Код: plaintext
1.
2.
int a
parent.dynamic event ue_test(a)
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Событие или функция? Вот в чём вопрос!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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