[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Несколько вопросов вразброс



27.06.2012 19:03, Igor Chumak пишет:
> 27.06.2012 17:20, "Артём Н." пишет
> 
> -куть
> 
>>>> o.O Что непонятного? Если про переменные говорить?
>>>> 1. Есть функция, которая вызывает другую функцию. В обеих используется одна
>>>> и та
>>>> же переменная (не для связи между ними). Если внутренняя функция её
>>>> переопределяет, внешняя должна сохранять.
>>> С архитектурой совсем плохо. Зачем переопределять глобальную переменную, если ее
>>> же переопределять нельзя, потому что если переопределили - надо восстановить?
>>> В bash есть и локальные переменные ;)
>> Facepalm. Я не использую глобальные _переменные_ там, где не нужно. В данном
>> случае, я их не использую вообще. Это не мой случай. Это ответ на вопрос.
>>
>> Есть функция, которая вызывает другую функцию. В обеих используется одна и та
>> же переменная (не для связи между ними). Если внутренняя функция её
>> переопределяет, внешняя должна сохранять.
> Это не о глобальной переменной?
О ней самой. О неправильном использовании. У меня такого нет.

>>>> В общем случае (к башу неприменимо)
>>>> ещё с многопоточностью проблемы будут. Вообще-то, это везде написано... Надо
>>>> объяснять? Для констант неприменимо.
>>>> 2. Глобальная переменная может быть случайно переопределена где угодно. Кстати,
>>>> даже непреднамеренно (ну eval какой-нибудь неправильно использовал или что
>>>> ещё).
>>>> Поиск ошибки затянется. В случае с readonly - проблема отпадает.
>>> Задавайте значения глобальных переменных таким образом , чем не аналог read-only
>>> переменных?
>>> #!/bin/bash
>>> SET()
>>> {
>>>      var=$1
>>>      val=$2
>>>      echo "set $var to $val"
>>>      eval $var="$val"
>>> }
>>>
>>> SET ZZ_aa "abc"
>>> echo $ZZ_aa
>>>
>>> Попытки сдуру переопределить переменную ловятся grep'ом
>> 1. Для начала надо понять, что ошибка связана с переопределением.
> Вот он - способ отловить переопределения
>> 2. Я не конкретно про bash писал.
>> 3. А кто сказал, что в общем случае имя переменной не может динамически
>> формироваться?
> А зачем придумывать способы написания стрёмного кода?
Чтобы не писать такой код.

> Если динамически формировать имя переменной нежелательно по каким-то причинам -
> этого ведь можно избежать?
Когда как... Я не имею такого опыта, чтобы это сказать в общем.

>>>> 3. Ещё раз про интерфейс. Касается и констант. Он разбит на две части. Это
>>>> значит, что одна переменная может влиять на несколько функций сразу, что может
>>>> привести к побочным эффектам и трудноуловимым ошибкам (в общем случае).
>>>> Когда, с
>>>> параметром функции всё понятно (если функция "чистая", т.е. без побочных
>>>> эффектов): изменил, сдохла, - проблема в ней или вызываемых с этими
>>>> параметрами.
>>>> Здесь: изменил, сдохла, проблема может быть в нескольких функциях, использующих
>>>> переменную, или в их взаимодействии. Это первое.
>>>> Второе из первого. Не сразу очевидно какая функция, какую переменную
>>>> использует.
>>>> Без глобальных констант, если есть иерархия вызовов, понятно какая функция, что
>>>> использует ещё на верхнем уровне. В случае использования глобальных констант -
>>>> непонятно. Значит, нужно использовать поиск (например, разбирая скрипт), чтобы
>>>> найти какая переменная в какой функции используется. Понимание усложняется.
>>>> Но в bash нет именованных параметров у функций. При их наличии, такого вопроса,
>>>> скорее всего, не возникло бы.
>>>>
>>> Если задача решается средствами шелла плохо и сложно - надо либо менять
>>> постановку задачи, либо инструмент.
>> Задача, как раз, для шелла. Просто именованные параметры, как мне кажется, были
>> бы не лишними. :-)
> Это шеллозависимое хотение ;) Ассоциативные массивы есть не везде. А для
> управления backup'ом достаточно и соглашения об именовании.
Да для бэкапа и bat файлов достаточно. :-)


Reply to: