Название: Как сделать глобальную переменную? Отправлено: nikakula от Ноябрь 16, 2014, 18:04 Есть две формы. Переменная i высчитывается в первой форме, а отображаться она должна во второй форме. Для этого, на сколько я понимаю, она должна быть глобальной. Как ее таковой сделать?
Название: Re: Как сделать глобальную переменную? Отправлено: vitfil от Ноябрь 16, 2014, 18:42 Глобальные переменные... "Отрежу руку!" (С) "Мастер и Маргарита"
Название: Re: Как сделать глобальную переменную? Отправлено: kambala от Ноябрь 16, 2014, 18:48 можно передать переменную в другую форму, например через конструктор или отдельный метод
Название: Re: Как сделать глобальную переменную? Отправлено: Old от Ноябрь 16, 2014, 19:53 Есть две формы. Переменная i высчитывается в первой форме, а отображаться она должна во второй форме. Для этого, на сколько я понимаю, она должна быть глобальной. Как ее таковой сделать? Как только переменная высчиталась, нужно послать сигнал с ее значением, а во второй форме сделать слот.P.S. Ну и конечно, плохо если что-то вычисляется в формах. Название: Re: Как сделать глобальную переменную? Отправлено: Alexu007 от Ноябрь 17, 2014, 00:19 Чем плоха глобальная переменная? Тем, что её может несанкционированно изменить чужой дядя программист? Ну так он и сигнал-слот поменять может при желании.
И вообще это всё байда для крупных проектов с десятками програмистов. Маленкую програмульку можно написать с нарушением всех правил. Код
И эта. Плохо что-то вычислять в формах. А где вычислять то? Между формами? Название: Re: Как сделать глобальную переменную? Отправлено: Igors от Ноябрь 18, 2014, 09:58 И вообще это всё байда для крупных проектов с десятками програмистов. Маленкую програмульку можно написать с нарушением всех правил. Конечно это не преступление, но рано или поздно жизнь научит: чем меньше глобальных переменных - тем лучше. Хорошее лекарство (ускоритель понимания) - параллельные расчеты.Название: Re: Как сделать глобальную переменную? Отправлено: DenKor29 от Ноябрь 21, 2014, 08:23 Есть две формы. Переменная i высчитывается в первой форме, а отображаться она должна во второй форме. Для этого, на сколько я понимаю, она должна быть глобальной. Как ее таковой сделать? Используйте концепцию сигнал - слот и будет Вам глобальное счастье :) Из первой формы высылается сигнал при изменении заначения переменной. Во второй форме этот сигнал ловится в нужный слот. Глобальная переменная при этом не нужна. Название: Re: Как сделать глобальную переменную? Отправлено: Alexu007 от Ноябрь 21, 2014, 18:08 А можно вопрос чуть-чуть не по теме? Как правильно сделать досрочный выход из вложенных циклов? Ну, например, нужно найти координаты чего-нибудь на плоскости. goto как я понимаю, очень не приветствуется?
Название: Re: Как сделать глобальную переменную? Отправлено: Alex Custov от Ноябрь 21, 2014, 18:31 А можно вопрос чуть-чуть не по теме? Как правильно сделать досрочный выход из вложенных циклов? Ну, например, нужно найти координаты чего-нибудь на плоскости. goto как я понимаю, очень не приветствуется? Можно и через goto. Религиозные убеждения обычно прощают использование goto во вложенных циклах. Но фундаменталисты предпочитают использовать булевый флаг (типа found = true), по которому обрываются все внешние циклы. Название: Re: Как сделать глобальную переменную? Отправлено: Igors от Ноябрь 21, 2014, 18:34 А можно вопрос чуть-чуть не по теме? Как правильно сделать досрочный выход из вложенных циклов? Ну, например, нужно найти координаты чего-нибудь на плоскости. goto как я понимаю, очень не приветствуется? Если действительно глубокая вложенность (5-6 циклов), то возможно испустить исключение (throw). В остальных случаях - банальный break, или вставка флага в условие цикла, напрКод
Код
gpto используется когда нужна исключительная заточка по скорости (часто вкупе с likely/unlikely) Название: Re: Как сделать глобальную переменную? Отправлено: vulko от Ноябрь 21, 2014, 23:43 А можно вопрос чуть-чуть не по теме? Как правильно сделать досрочный выход из вложенных циклов? Ну, например, нужно найти координаты чего-нибудь на плоскости. goto как я понимаю, очень не приветствуется? Можно и через goto. Религиозные убеждения обычно прощают использование goto во вложенных циклах. Но фундаменталисты предпочитают использовать булевый флаг (типа found = true), по которому обрываются все внешние циклы. Не можно. Вместо goto можно делать if else, continue, return и break. Понимание почему не можно приходит при переносе кода, например, из плюсов в жабу. И хорошо если goto используется для перехода ниже по функции, а если их много и много условий и они дают нелинейное ветвление... А бывает что с помощью goto как бы упрощают логику алгоритма, при этом читабельность такого кода может стремиться к нулю. Религия тут ни при чем. Название: Re: Как сделать глобальную переменную? Отправлено: Alexu007 от Ноябрь 22, 2014, 15:42 А если пять вложенных циклов? Четыре ifа против одного goto только потому, что кто-то когда-то придумал, что низзя...
Может в старые стародавние времена, когда вся программа представляла непрерывную последовательность команд - чрезмерное увлечение goto и приводило к неприятностям. Но сегодня программа (на Qt) это набор обработчиков (функций), а goto прыгает только внутри функции. Название: Re: Как сделать глобальную переменную? Отправлено: Igors от Ноябрь 22, 2014, 16:49 А если пять вложенных циклов? Четыре ifа против одного goto только потому, что кто-то когда-то придумал, что низзя... Ну в общем-то правильно придумал. Если необходимость такого глубокого выхода возникает - значит что-то не так, и это наталкивает на какие-то мысли/решения. А с goto просто "затыкается дырка". Вообще приведите живой пример, а то "если-если"Название: Re: Как сделать глобальную переменную? Отправлено: Bepec от Ноябрь 22, 2014, 17:08 Goto лишает код структурированности. В результате его использования точка выполнения кода прыгает хз куда. И зачастую в таких конструкциях пока не пройдёшь дебагером, логики не поймёшь.
И потому это плохо. Ведь при добавлении кода без понимания всей логики можно таких дров наломать :D Что ай ай ай. Название: Re: Как сделать глобальную переменную? Отправлено: Alex Custov от Ноябрь 22, 2014, 19:08 Не можно. Вместо goto можно делать if else, continue, return и break. При этом страдает другое религиозное чуйство - красота кода. Понимание почему не можно приходит при переносе кода, например, из плюсов в жабу. Почему? Не вижу связи (я переносил код). Название: Re: Как сделать глобальную переменную? Отправлено: gil9red от Ноябрь 22, 2014, 21:19 При этом страдает другое религиозное чуйство - красота кода. https://ru.wikipedia.org/wiki/Goto люблю вики :) Почему? Не вижу связи (я переносил код). Наверное, потому что в яве нет goto, из-за чего придется переписывать алгоритм, который в реализации с++ использует goto :) Название: Re: Как сделать глобальную переменную? Отправлено: Alex Custov от Ноябрь 22, 2014, 21:24 Наверное, потому что в яве нет goto, из-за чего придется переписывать алгоритм, который в реализации с++ использует goto :) Его и так придётся переписывать, просто потому, что Java - это не C++ (К.О.). Особенно если С++ код написан с использованием более-менее нового стандарта. Название: Re: Как сделать глобальную переменную? Отправлено: vulko от Ноябрь 23, 2014, 00:18 Не можно. Вместо goto можно делать if else, continue, return и break. При этом страдает другое религиозное чуйство - красота кода. Понимание почему не можно приходит при переносе кода, например, из плюсов в жабу. Почему? Не вижу связи (я переносил код). что такое красота кода? и почему с goto красивее? реальный пример есть? Название: Re: Как сделать глобальную переменную? Отправлено: Bepec от Ноябрь 23, 2014, 10:22 Блин, реально разжёванная давно тема - у операторов if else return и прочих имеются правила входа и выхода.
У Goto нет правил, поэтому код написанный с его использованием не поддаётся быстрому анализу человеком. Так же он непонятнее, не структурированнее и сложнее в правке. Исправляя что то в ф-ции НЕ использующей goto мы точно знаем что можем повлиять только на блок кода в конструкции if else и прочих. Исправляя что то в ф-ции использующей goto мы не имеем гарантий что не создадим опасную ситуацию даже самыми безобидными исправлениями. Пример: Создание и удаление объекта. Без goto: мы точно знаем где и как будет исполняться код. Создали объект, зашло в if, у него 2 пути в конце которого надо удалить объект. С goto: мы не знаем где и как будет исполняться код. Создали объект, и вот тут засада... goto может перебросить точку исполнения вверх и мы создадим 2 объекта, может перебросить вниз до создания и мы попытаемся удалить пустой указатель. Название: Re: Как сделать глобальную переменную? Отправлено: Hrundel от Ноябрь 25, 2014, 01:18 На работе был один чудлан, написал глючную прогу с 8 глобальными переменными. И давай их в хвост и в гриву использовать. Его через месяц уволили, а меня попросили исправить ошибки и внедрить. Две недели бился с этими 8 перемеными - искал в каком месте программы ошибочные значения получают. Плюнул за три недели написал все с нуля.
|