Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: обнуление массива Добавлено: 26.06.12 18:20  

Автор вопроса:  merr

Ответить

  Ответы Всего ответов: 37  

Номер ответа: 16
Автор ответа:
 Александр



Вопросов: 1
Ответов: 15
 Профиль | | #16 Добавлено: 30.06.12 20:51
тут необходимо разделить понятия: Осмысленное применение для какой-то конкретной цели и повсеместное и бездумное.
Вот второе применение (пусть и в силу незнания предметной области) и является злом.

Согласен на 100%
Нельзя валить в одну кучу мух и котлеты и заявлять, что глобальные переменные зло.

Ответить

Номер ответа: 17
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #17 Добавлено: 30.06.12 21:02
Не,это именно зло.. за крайне редким исключением.

Ответить

Номер ответа: 18
Автор ответа:
 Александр



Вопросов: 1
Ответов: 15
 Профиль | | #18 Добавлено: 30.06.12 21:11
Погуглил тему. Вывод:
Почему существует такое мнение?
1. Суеверие
2. Боязнь запутаться в собственных переменных

Ответить

Номер ответа: 19
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #19 Добавлено: 30.06.12 22:44
Александр пишет:
Боязнь запутаться в собственных переменных

Одно дело если ты пишешь наколенную поделку для личных нужд и совсем другое солюшен из 10-15 проектов с исходниками весом в несколько гиг и командой из 10-15 человек.. Так что это не суеверие, и тем более не боязнь запупаться в переменных, а многолетний опыт и стопиццот часов отладки чужого говнокода

Ответить

Номер ответа: 20
Автор ответа:
 Александр



Вопросов: 1
Ответов: 15
 Профиль | | #20 Добавлено: 01.07.12 10:18
Надо бы написать злым разработчикам ПО, что бы исключили (по просьбе авторов книжек для чайников) такие понятия как "глобальная переменная", "GoTo" и т.п.
Наверняка они включили эти понятия по своему скудоумию и недомыслию. Лучше бы спросили у наших "спецов"
"...А жаль, что не знаком ты с нашим петухом!
Ещё б ты более навострился,
Когда бы у него немного подучился.."
Впрочем Крылова вы, наверно, и не проходили

Ответить

Номер ответа: 21
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #21 Добавлено: 01.07.12 11:29
Основные цели которых стоит придерживаться в этом вопросе:
1) Минимизация области видимости переменной
2) Минимизация времени жизни переменной

Почему это стоит делать - вопрос непростой. И аргументированно ответить на него сложно, поскольку аргументы будут хорошо понятны только тем, кто знаком с разработкой ПО (а не занимается щелканьем наколенных поделок размером в 2000 строк кода, который невозможно поддерживать).

Основыные аргументы

Чем более локализированно состояние, тем проще им управлять. Глобальная переменная может быть модифицирована из любого места программы и может быть считана из любого места программы. При каждом обращении к ней нужно четко понимать "всегда ли в переменной лежит корректное значение? Как изменение этого значения может повлиять на другие части прогарммы?". Чем меньше область видимости переменной, тем короче будут ответы на эти вопросы.

Чем меньше область видимости переменной, тем проще анализировать поведение программы. Если переменная имеет область видимости в 1 блок, то его можно полностю окинуть одним взглядом. Если переменная имеет область видимости в 1 метод, то в худшем случае прийдется уже несколько раз прокручивать окно кода. Если область видимости ограничена 1 типом, то нужно полностью просматривать код всего типа на предмет явного и неявного (через позднее связывание) обращения к этой переменной. Если переменная статическая и публичная, то нужно просматривать код всей программы, чтоб понять что в ней происходит.

При разработке многопоточных приложений любые глобальные данные - это непрерывная головная боль, так как работа с ними не только может происходить из разных мест программы, но она еще может происходить РЕАЛЬНО ОДНОВРЕМЕННО. Сложности, котоыре при этом приходится решать настолько серьезные, что им посвящена далеко не одна толстая книга (из серии, которую чайники не осилят прочитать дальше обложки), и их решение, и даже просто понимание потребует не только знания любимого языка программирования, но еще и глубокое понимание принципов работы компьютера, в т.ч. на аппаратном и схематическом уровнях.

Область видимости и время жизни переменной в принципе связаны, и влюбом случае, чем они ниже, тем раньше пропадет необходимость в ней и занимаемая память сможет быть освобождена.
Если область видимости ограничена одним методом, переменная "умрет" еще в стеке. Если область видимости ограничена типом, то переменная умрет только тогда когда умрет ее контейнер. Если переменная реально глобальная, то занимаемая память автоматически никогда не будет освобождена (классический пример - интерирование строк в .NET).

===========================================================================

Более подробно этот вопрос рассмотрен в книге для чайников "Code Complete" Макконела (на которую дали рецензии в т.ч. авторы других книг для чайников Джеф Рихтер, Мартин Фаулер, Майкл Ховард, а также разрабочтики языков для чайников Алан Купер и Андерс Хелсберг. Смотреть разделы 10 и 13, впрочем вам не помешает также ознакомиться с содержимым разделов с 1 по 35-й включительно.

Вам, разумеется, не нужно принимать то что там написано на веру. Но тогда хотя бы попробуйте привести свои убедительные аргументы в пользу использования глобальных переменных.

PS что касается быстродействия
Более 99% процентов посетителей этого сайта (включая меня) не дорастут до того момента, когда использование глобальной переменной и оператора goto будет единственным способом ускорить их прогармму. sad but true.

Ответить

Номер ответа: 22
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #22
Добавлено: 01.07.12 21:07
Торвальдс жжот, кстати:
http://www.youtube.com/watch?v=MShbP3OpASA#t=2965s

Ответить

Номер ответа: 23
Автор ответа:
 Александр



Вопросов: 1
Ответов: 15
 Профиль | | #23 Добавлено: 01.07.12 23:05
Но тогда хотя бы попробуйте привести свои убедительные аргументы в пользу использования глобальных переменных.

Я не собираюсь оспаривать, что жизнь переменных нужно сводить к минимуму.
Я против категоричного заявления, что глобальные переменные зло.
Конкретно в этой ветке автор ясно указал почему у него глобальная переменная: она используется в разных процедурах.
Всё вполне обоснованно. И если в моей программе нужна переменная(или чаще массив) используемая в нескольких процедурах, то я не боюсь делать его общедоступным хотябы в пределах модуля формы. А с учётом того, что программирую(учусь понемногу так скажем)на VB и там по умолчанию нет многопоточности, то и РЕАЛЬНО ОДНОВРЕМЕННОСТЬ ОБРАБОТКИ мне не грозит.
Я быстрей запутаюсь с ByVal и ByRef аргументами при передаче переменных в процедуры-функции.

Ответить

Номер ответа: 24
Автор ответа:
 Александр



Вопросов: 1
Ответов: 15
 Профиль | | #24 Добавлено: 01.07.12 23:21
В языке С есть много операторов, которые на самом деле являются банальным goto – условным или безусловным. Это все виды циклов for (…), while (…) {…}, do {…} while (…). Это анализ числовых переменных switch (…) {case … case …}. Это те же операторы прерывания/перехода в циклах break и continue. В конце концов, Это вызовы функций funct() и выход из них return.
 С++ добавляет массу невидимых переходов перегрузками, конструкторами и деструкторами. Из явных переходов – try {… throw …} catch (…) {…}.
 Эти goto считаются «легальными» — чем же нелегален сам goto?

Ответить

Номер ответа: 25
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #25
Добавлено: 01.07.12 23:36
мы не рассматриваем так глубоко. Тут дело в оформлении кода. В большинстве случаев читабельность страдает. А так-то конечно. На ассемблере даже if с помощью goto делается

Ответить

Номер ответа: 26
Автор ответа:
 merr



Вопросов: 11
Ответов: 31
 Профиль | | #26 Добавлено: 01.07.12 23:55
Здорово, что получается интересная дискуссия - реальный "перехват" очередной пары-тройки дурацких вопросов :) Многое узнал (учусь на VB пару месяцев всего).
У циклических операторов и GoTo суть одна - отход от строго последовательного выполнения строк. A ведь можно считать циклы своеобразными "GoTo", о которых просто "договорилось" сообщество создателей (предложили) и программеров (поддержали, освоили) конкретного языка. Они работают однозначно и всем понятно как. Тот самый пресловутый GoTo бесит многих тем, что это "пользовательский" трюк - у каждого реализован по-своему. Нет договоренности.

Ответить

Номер ответа: 27
Автор ответа:
 RomanZel



Вопросов: 0
Ответов: 1
 Web-сайт: www.les-st.ru/shpala.html
 Профиль | | #27
Добавлено: 02.07.12 09:30
1

Ответить

Номер ответа: 28
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #28 Добавлено: 02.07.12 09:50
2

Ответить

Номер ответа: 29
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #29 Добавлено: 02.07.12 23:30
Winand пишет:
В большинстве случаев читабельность страдает.

имхо, гораздо большее зло от них в полном отсутствии масштабируемости приложения.
Глобальная - подразумевает существование в единственном экземпляре (настройки,окружение,контекст и т.д..) Но что они будут делать если завтра понадобится 2,3,10 экземпляров того же самого массива? я даже сам отвечу - создадут 10 глобальных массивов и будут считать что это оправдано.

Ответить

Номер ответа: 30
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #30 Добавлено: 02.07.12 23:36
Александр пишет:
Конкретно в этой ветке автор ясно указал почему у него глобальная переменная: она используется в разных процедурах.

Использование в разных процедурах не является основанием(оправданием) для использования глобальных переменных.
По большому счету это все зависит от опыта разработчика. Со временем, он сам начнет от них оказываться когда поймет что их использование обходится слишком дорого при поддержке и развитии программы (если таковая имеется). Если же мы говорим о говнокоде то тут и обсуждать нечего.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам