LINUX.ORG.RU

Замучаешься пыль глотать. Как ты собрался организовывать действие по нажатию на кнопку, например?

anonymous
()
Ответ на: комментарий от anonymous

В главном цикле ждать сообщение от тулкита, что мол кнопка нажалась, и после этого выполнять код. У меня, конечно, довольно размытое представление обо всём этом, но думаю сделать удобный тулкит без каллбеков вполне возможно.

perdperdperd
() автор топика
Ответ на: комментарий от perdperdperd

И получишь в одном месте огромную нечитабельную лапшу из if и switch.

anonymous
()
Ответ на: комментарий от perdperdperd

В главном цикле ждать сообщение от тулкита, что мол кнопка нажалась, и после этого выполнять код.

И этот код будет выглядеть как-то так:

widget->clicked(event);

omnomnomnus
()
Ответ на: комментарий от omnomnomnus

Это объясняет, почему оно сдохло лет двадцать назад.

anonymous
()

Всё основано на каллбеках.

Даже аргументы коммандной строки парсятся через коллбэки :-)..

(Смотри GNU Argp)

Чего уж говорить тогда про графику

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 4)

Есть такой?

Может, Cocoa? Или там Inferno/Tk?

korvin_ ★★★★★
()

Отпишись, если найдёшь, любопытно же!

sT331h0rs3 ★★★★★
()

дело не в коллбеках как таковых, а в аторванности их от семантики ООП.

Одно дело, когда мы явно конфигурируем объект, и тогда нашь коллбек — это просто метод объекта. и все прозрачно, мы понимаем, что это просто метод, который дергается со стороны реализации по событию, фактически — паттерн Observer в чистом виде, где в качестве оповестителя выступает реализация. И мы даже сами могли бы порождать данный ивент.

И совершенно другое дело, когда это невнятная лапша в стиле модернжаваскрипт, когда функция погоняет функцию, и ты даже если и понимаешь что происходит, все равно запариваешься из-за синтаксической лапши и неявного объекта, который подписан на ивент, к которому у тебя нет доступа. Анальный подход к реализации событий, так сказать:)

yetanotherlogin2017
()

Windows API. Сам, в цикле, обрабатываешь сообщения.

Другой вопрос, что неудобно до ужаса.

Miguel ★★★★★
()

Меня бесит такой подход, хочу сам всем рулить

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

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

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

yetanotherlogin2017
()

Кто владеет событийной моделью, тот и рулит ситуацией. Если GUI не владеет оной, то это просто графическая библиотека для рисования кругляшей и квадратиков. Мне кажется у тебя каша в понимании архитектуры

Deleted
()

Меня бесит такой подход, хочу сам всем рулить.

Нет, в существующих оконных GUI такое принципиально невозможно. Да, ты можешь намонстрячить мега-обработчик в прикладной программе, но реально тебе всё равно будут туда приходить события от окон - что в винде, что в иксах.

Если только свою оконную систему с нуля напишешь - тогда да, будет тебе счастье. Вообще, с твоими устремлениями тебе эмбедщину надо писать, там такое (пока) приветствуется. Больше нигде.

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

И это не мелочь. Одно дело, когда ты читаешь код, который говорит сам за себя, или, ты, понимая логику API, просто выражаешь свои мысли на pure english, и совсем другое дело, когда ты вместо понимания занимаешься зазубриванием и изучением манов. Такое дерьмо как документация и комментарии к коду, по хорошему, нужно было бы запрещать на законодательном уровне. Это открыло дорогу в АдЪ. Это это открыло врата в отрасль для злых демонов дегенератов, причем и с той и с другой стороны UI

yetanotherlogin2017
()
Ответ на: комментарий от yetanotherlogin2017

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

Вот только то, о чём пишет ТС, к предметной области отношения не имеет от слова «совсем». Что раздутый цикл, куда воткнуты все мыслимые коды клавиш, что коллбэки, что виртуальные методы - суть детали реализации.

А если хочешь, чтобы в прикладной программе не было ничего, кроме предметной области - то либо никакого GUI, либо конструктор, вроде 1С. (Но второй путь это опять-таки явно не то, чего хочет ТС, там никакого «сам рулить» нет, код размазан по 1000 мест.)

anonymous
()
Ответ на: комментарий от Miguel

Windows API. Сам, в цикле, обрабатываешь сообщения.

И цикл этот, внезапно, находится внутри оконной функции, которая... Oh, Shit...

anonymous
()
Ответ на: комментарий от EXL

Да его сразу видно ;)

Главное многим тысячам разработчиков подходит например «Qt с колбэками» (и где он их там увидел, но ладно), а вот одному Д’Артаньяну ну совершенно никак не пишется софт и всё бесит :)

Подавай ему машину без колес, а то не эстетично, не вписывается в плавные формы кузова эти глупые кругляши...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Deleted

Как ни парадоксально это прозвучит, это лестно для меня. По большому счету, хоть царь проповедует вещи, прямо противоположные моим воззрениям, он, тем не менее, нонконформист, он думает, он пытается решать проблемы, искать что-то. Это дорогого стоит

А вся твоя суть вот в этом:

Теоретически, иконки трея можно сделать хоть во весь экран

Вот это то, о чем ты думаешь, это твой мир, и я смотрю на твой мир как на говно. Ты банальное зубрилко, сливающееся с массами

yetanotherlogin2017
()
Ответ на: комментарий от I-Love-Microsoft

а вот одному Д’Артаньяну ну совершенно никак не пишется софт и всё бесит :)

Насчёт _одного_ ты погорячился, думаю. Просто событийная модель действительно выворачивает мозги наизнанку, и привыкнуть к ней новичкам зачастую непросто. Со временем пройдёт, думаю.

не вписывается в плавные формы кузова эти глупые кругляши

Можно сделать колёса квадратными, неподвижными и по периметру каждого квадратного колеса по маленькой незаметной гусенице. Во-первых, красиво, во-вторых, необычно, в третьих приверженцы глупых кругляшей (коих 95%) будут в шоке, видя, как ОНО ЕДЕТ.

anonymous
()
Ответ на: комментарий от anonymous

Просто событийная модель действительно выворачивает мозги наизнанку

Да ничего она не выворачивает, это самая естественная и простая модель, которая соответствует обычному, бытовому представлению о вещах. Проблема не в модели, а в ее реализации. Либо в инертости мышления программистов, которым вбили в мозги, что комп — это машина тьюринга.

yetanotherlogin2017
()

Ах да, тебе ещё придётся драйвера устройств ввода выкинуть, от которых ты клавиши получаешь. Они с ОС тоже работают через коллбэки.

Всюду боль, короче.

anonymous
()
Ответ на: комментарий от yetanotherlogin2017

Да ничего она не выворачивает, это самая естественная и простая модель, которая соответствует обычному, бытовому представлению о вещах. Проблема не в модели, а в ее реализации

Опа! Тогда расскажи это ТСу, он-то хочет «сам всем рулить».

Also, какую реализацию событийной модели, кроме коллбэков (ну или виртуальных методов, это суть одно и то же) ты предлагаешь?

anonymous
()
Ответ на: комментарий от anonymous

Оbserver, только он. Я не против коллбеков как таковых, но коллбек должен быть методом объекта. Не знаю, об этом ли говорит ТС, у меня, собственно, своя боль по этому поводу, родом из JS:) когда есть setTimeout(callback), а самого timeot'а нет. Я против этого вот.

yetanotherlogin2017
()
Ответ на: комментарий от yetanotherlogin2017

И совершенно другое дело, когда это невнятная лапша в стиле модернжаваскрипт

Дык это не ООП ни разу, а функциональщина

annulen ★★★★★
()
Ответ на: комментарий от annulen

Да никакая это не функциональщина, просто анальное сокрытие. В ФП вообще нет никаких «асинхронных» функций, там по определению ф-ция должна возвращать значение вызывающему коду, иначе это не ФП

yetanotherlogin2017
()

Меня бесит такой подход, хочу сам всем рулить

не кроссплатформенно.

anonymous
()

Есть такие тулкиты, они даже как-то называются, вроде незамедлительные или мгновенные. Тут проскакивало в топиках ретроградов про их ВМ на прошлой неделе, полистай вниз и почитай.

В приперах на гитхабах там нечто вроде:

Button button = new Button("Click me")
if (button) {
   // кнопка нажата
}

в таком стиле код, ясно что за этим скрывается некая магия, в суть которой я не вникал, так-как ембед маргинальщина по-сути.

anonymous
()
Ответ на: комментарий от yetanotherlogin2017

И совершенно другое дело, когда это невнятная лапша в стиле модернжаваскрипт, когда функция погоняет функцию, и ты даже если и понимаешь что происходит, все равно запариваешься из-за синтаксической лапши и неявного объекта, который подписан на ивент, к которому у тебя нет доступа. Анальный подход к реализации событий, так сказать:)

Это не стиль «модернжаваскрипт» - это стиль жаваскрипт. Жавастрипт не является языком - от сюда все его проблемы.

У тебя нет классов, ибо нету типов. У тебя нету объектов. У тебя нету ничего.

Одно дело, когда мы явно конфигурируем объект, и тогда нашь коллбек — это просто метод объекта. и все прозрачно, мы понимаем, что это просто метод, который дергается со стороны реализации по событию, фактически — паттерн Observer в чистом виде, где в качестве оповестителя выступает реализация. И мы даже сами могли бы порождать данный ивент.

В кути никто не использует функции - все используют методы. Поэтому придирки не относятся к делу.

Основная проблема всего этого в том, что у нас есть объект - это тип. А есть интанс. Т.е. мы никогда и никак не знаем что и как и у кого вызвается.

Я не знаю какое там решение в труЪопп-стили, но я вижу решение так - нам нужно создать что-то, что будет является не просто объектом, а именно объектом-инстансом одновременно.

Т.е. у нас есть класс кнопка. Мы делаем от него наследование не как создание нового класса-типа, а как именно нашей кнопки. Она существует как объект-тип, но это не объект-тип.

А далее всё просто - мы можем связывать её с какими угодно другими объектами-инстансами прозрачно. Я могу спокойно из кнопки позвать что угодно. Я могу в любой момент времени прибиндить что угодно к чему угодно. Сейчас это невозможно.

При этом всё это работает статически - всё валидируется и ничего и никак отвалиться не может.

mtiexpert
()
Ответ на: комментарий от Deleted

Это что за звезда, затмившая даже Царя?

Выдающийся мыслитель, ведущий теоретик лора в области абстракций, ООП и модели акторов. Вероятно, чемпион по забаненным аккаунтам.

bread
()
Ответ на: комментарий от anonymous

То есть объявляется структура и приложение следит за изменением данных в структуре? Как-то непроизводительно.

panzerito
()

Qt основан на каллбеках

сигналы жи! Они ж могут быть просто посланы, не дожидаться реакции от приемника.

anonymous
()
Ответ на: комментарий от anonymous

Also, какую реализацию событийной модели, кроме коллбэков (ну или виртуальных методов, это суть одно и то же) ты предлагаешь?

Посылка сообщений, как в классическом ООП Алана Кэя?

panzerito
()
Ответ на: комментарий от mtiexpert

У тебя нет классов, ибо нету типов. У тебя нету объектов

Все там есть. Там нет этого только для лохов, которым чтобы понимать «класс» надо явно навесить ярлык «класс». Для блондинок.

yetanotherlogin2017
()

windows, на православной сишечке можно. Там все кишки наружу, честный мейнлуп и прочие классности. Кстати вспоминаю это с теплотой, всё понятно как работает и работает неплохо.

ixrws ★★★
()
Ответ на: комментарий от annulen

как бы continuation

продолжения относят к ФП только последние лохи. Это противоречит одной из центральных догм ФП, о том что любая ф-ция должна возвращать результат вычисления в точку вызова.

BTW, в хаскеле настоящих продолжений нет

yetanotherlogin2017
()
Ответ на: комментарий от yetanotherlogin2017

Так без ярлыков все эти классы остаются воображаемыми, рантайм никак не помогает в работе с ними. Вся суть типизации в навешивании ярлыков.

bread
()
Ответ на: комментарий от annulen

И все равно, притянуть к этому продолжения за уши невозможно. Нет, это ни хрена не продолжения. Реализация продолжений предполагает, что control flow должен быть возвращен в определенную, заранее сохраненную точку вычислений. Тут этого нет

yetanotherlogin2017
()
Ответ на: комментарий от bread

в компе, на уровне программных интерфейсов вообще все воображаемо, даже регистры процессора.

yetanotherlogin2017
()
Ответ на: комментарий от anonymous

Вообще, с твоими устремлениями тебе эмбедщину надо писать, там такое (пока) приветствуется

Элементарная менюшка в эмбеддщине — тоже колбэки. Что-нибудь вроде

typedef struct{
  char *text;
  void (*callback)(void *data);
} menuentry;

... 
menuentry *current = ...;
...
if(btn_pressed) current->callback((void*) somedata);
...
Иначе будет жесть.

anonymous
()

Неверный вопрос, нужно так: альтернативы колбэкам

anonymous
()

Имеются в виду всякие onClick? Посмотри immediate mode UI. Например, Nuklear.

Ceiling_QB ★★★★
()
Ответ на: комментарий от Miguel

Да вполне ничё так, зато полный контроль над происходями. И очень хорошо для начинающих, они легко поймут как происходит процесс отрисовки и диспетчеризация сообщений. В обязательном порядке бы прописал этот курс веб погромистам:)

ixrws ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.