|
Использование глобальных переменных |
|
|
|
 |
Ответов
|
Jan 10 2017, 06:30
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(demiurg1978 @ Jan 9 2017, 21:26)  Хочу узнать мнение насчет использования глобальных переменных. Спрашиваю вот почему: неоднократно слышал, что использование глобальных переменных нужно максимально минимизировать. Откуда пошло это? В данный момент пишу проект. Свои проекты всегда стараюсь разделить на модули. static переменные. использование в других модулях посредством set_value (); get_value ();. Но в нынешнем проекте у меня много параметров. И если честно, я заколебался на каждую переменную писать свои функции установки и получения переменных. Хочу вывести переменные из static в глобальные. Ваши за и против. Проблема в связности. Если у вас все модули знают все про все другие модули - то связность высокая. Сложно понять, кто именно меняет данную переменную и по каким позывам. Сложно поменять алгоритм работы какого-то одного модуля - при этом придется менять все другие. Часто нельзя просто взять и записать в переменную значение - иногда это можно сделать только в определенных состояниях, иногда такая запись должна быть защищена критической секцией, иногда нужно проверить значение или выполнить какие-то действия до/после записи. Если все это размазать по разным модулям - очень легко где-то что-то забыть. Просто механически каждую переменную оборачивать в пару функций смысла нет. Но если модулю 1 нужны прям вот все переменные модуля 2, то у вас что-то не так с разделением на модули. Обычно модуль дает какой-то интерфейс, куда входят функции, и, возможно, какой-то набор глобальных переменных. Опять же, вот пусть у нас есть модуль "передатчик по порту". Если у нас появятся два порта и понадобятся два передатчика - как мы будем выкручиваться? Поэтому обычно тут так или иначе используют ООП - все переменные, которые требуются "передатчику" собираются в структуру, а каждая функция получает указатель на эту структуру (или к примеру числовой дескриптор). А вообще, дайте конкретный пример  По нему уже можно дать какие-то рекомендации Цитата(zltigo @ Jan 9 2017, 23:57)  К чему эти глупые страшилки не по делу. Это не то, чтобы страшилки. Обычно, если в коде много GOTO или функции на тысячи строк или все "потроха" торчат наружу, то с ним что-то не так  Хотя конечно возможны какие-то ситуации, когда все это оправдано
|
|
|
|
|
Jan 10 2017, 07:11
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(Непомнящий Евгений @ Jan 10 2017, 12:30)  А вообще, дайте конкретный пример  По нему уже можно дать какие-то рекомендации Редактирование параметров в меню.
|
|
|
|
|
Jan 11 2017, 09:50
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(Сергей Борщ @ Jan 10 2017, 10:33)  Собрать все параметры в структуру (наверняка это уже сделано для удобства сохранения/чтения да и вообще для повышения читабельности кода). Передавать в редактор указатель на эту структуру. Можно создавать копию этой структуры, передавать в редактор указатель на копию и переписывать обратно из копии в основную структуру только после того, как пользователь подтвердит, что он действительно в своем уме. Тоже хотел квакнуть, но это уже сделали. Это промежуточный вариант к ООП. Каждый модуль как-бы "псевдо-клас" со своими данными в виде струкутуры, которая extern и видна глобально через 1 указатель. Позволяет сильно сэкономить на написании "extern".
|
|
|
|
Сообщений в этой теме
demiurg1978 Использование глобальных переменных Jan 9 2017, 18:26 zltigo Цитата(demiurg1978 @ Jan 9 2017, 20:26) н... Jan 9 2017, 19:22 desh Цитата(demiurg1978 @ Jan 9 2017, 21:26) Х... Jan 9 2017, 20:28 demiurg1978 Цитата(desh @ Jan 10 2017, 02:28) ...
Ска... Jan 9 2017, 20:33 zltigo Цитата(desh @ Jan 9 2017, 22:28) Плохая п... Jan 9 2017, 20:57 aiwa Цитата(demiurg1978 @ Jan 9 2017, 20:26) Х... Jan 10 2017, 01:59 Dima_G Цитата(demiurg1978 @ Jan 10 2017, 01:26) ... Jan 10 2017, 03:18  Непомнящий Евгений Цитата(demiurg1978 @ Jan 10 2017, 10:11) ... Jan 10 2017, 08:17   demiurg1978 Цитата(Непомнящий Евгений @ Jan 10 2017, 14... Jan 10 2017, 11:24    Непомнящий Евгений Цитата(demiurg1978 @ Jan 10 2017, 14:24) ... Jan 11 2017, 06:05     demiurg1978 Цитата(Непомнящий Евгений @ Jan 11 2017, 12... Jan 11 2017, 08:25    Сергей Борщ QUOTE (demiurg1978 @ Jan 10 2017, 13:24) ... Jan 11 2017, 12:52     Непомнящий Евгений Цитата(Сергей Борщ @ Jan 11 2017, 15:52) ... Jan 11 2017, 13:25      Сергей Борщ QUOTE (Непомнящий Евгений @ Jan 11 2017, 15... Jan 12 2017, 10:05     Dog Pawlowa Цитата(Сергей Борщ @ Jan 11 2017, 15:52) ... Jan 14 2017, 16:29 scifi Цитата(aiwa @ Jan 10 2017, 04:59) Само кл... Jan 11 2017, 08:31 demiurg1978 Хм... Всем спасибо. Некоторым - в который уже раз.... Jan 11 2017, 08:56 aiwa Цитата(scifi @ Jan 11 2017, 10:31) Неправ... Jan 12 2017, 12:39 Сергей Борщ QUOTE (aiwa @ Jan 12 2017, 14:39) Перемен... Jan 14 2017, 10:53 Непомнящий Евгений Цитата(aiwa @ Jan 12 2017, 15:39) Ну бард... Jan 16 2017, 05:14 Укушенный воблой Цитата(demiurg1978 @ Jan 9 2017, 19:26) Х... Jan 14 2017, 18:03 aiwa Цитата(Сергей Борщ @ Jan 14 2017, 12:53) ... Jan 16 2017, 08:26 Непомнящий Евгений Цитата(aiwa @ Jan 16 2017, 11:26) 7-кратн... Jan 16 2017, 10:14 aiwa Цитата(Непомнящий Евгений @ Jan 16 2017, 12... Jan 17 2017, 02:54
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|