26.06.2012 23:26, Dmitrii Kashin пишет: > "Артём Н." <artio...@yandex.ru> writes: > >> Глобальные переменные сильно увеличивают связность и вероятность появления >> ошибок, в результате их случайного переопределения, например. > Не надо переобределять глобальные переменные в теле программы. > Один раз установили при старте сценария - и больше не трогаете. Ну так, это не переменные, а константы.
> Если поведение функций зависит исключительно от этих переменных - Вы тем > самым обеспечите их чистоту. Чем не вариант? Не очень хорошо, что "интерфейс" функции "разбит" на две части. >> К тому же, функция их использующая, не совсем рентабельна: её не >> всегда возможно вызвать без лишних движений из самой себя или из >> внешней функции, если та пользуется теми же переменными (например, >> придётся использовать стек или локальные переменные для сохранения >> глобальных перед вызовом). >> Для констант, хотя, это не актуально..? O.o >> Но, тем не менее, получается, что "интерфейс" функции не сосредоточен >> в одном месте, а в какой-то степени "разбросан", что не есть хорошо (и >> естественно, связность между функцией и внешним окружением >> повышается). > Не понял ничего. Снизойдите. o.O Что непонятного? Если про переменные говорить? 1. Есть функция, которая вызывает другую функцию. В обеих используется одна и та же переменная (не для связи между ними). Если внутренняя функция её переопределяет, внешняя должна сохранять. В общем случае (к башу неприменимо) ещё с многопоточностью проблемы будут. Вообще-то, это везде написано... Надо объяснять? Для констант неприменимо. 2. Глобальная переменная может быть случайно переопределена где угодно. Кстати, даже непреднамеренно (ну eval какой-нибудь неправильно использовал или что ещё). Поиск ошибки затянется. В случае с readonly - проблема отпадает. 3. Ещё раз про интерфейс. Касается и констант. Он разбит на две части. Это значит, что одна переменная может влиять на несколько функций сразу, что может привести к побочным эффектам и трудноуловимым ошибкам (в общем случае). Когда, с параметром функции всё понятно (если функция "чистая", т.е. без побочных эффектов): изменил, сдохла, - проблема в ней или вызываемых с этими параметрами. Здесь: изменил, сдохла, проблема может быть в нескольких функциях, использующих переменную, или в их взаимодействии. Это первое. Второе из первого. Не сразу очевидно какая функция, какую переменную использует. Без глобальных констант, если есть иерархия вызовов, понятно какая функция, что использует ещё на верхнем уровне. В случае использования глобальных констант - непонятно. Значит, нужно использовать поиск (например, разбирая скрипт), чтобы найти какая переменная в какой функции используется. Понимание усложняется. Но в bash нет именованных параметров у функций. При их наличии, такого вопроса, скорее всего, не возникло бы. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/4fea1b0b.7070...@yandex.ru