Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Результаты опроса: Функции имеют право изменять содержимое глобальных переменных?
Да 39 86.67%
Нет 4 8.89%
Не знаю 2 4.44%
Голосовавшие: 45. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2010, 10:24   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию Доступ функций к глобальным переменным

В общем озаботился таким вопросом - Разрешать ли функциям изменять глобальные переменные? Или только чтение? Дзен программирования вмешательство в жизнь глобальных переменных не одобряет, но в конкретных реализациях это сплошь и рядом (да хоть тот же Паскаль).
Кто как считает и почему?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 09.04.2010, 10:42   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Если функция видит переменную, то должна иметь полный доступ как на чтение, так и на запись, иначе будет путаница. Да и не логично будет запрещать её изменение. Переменная только для чтения - константа, а тут помесь чего-то с чем-то получается
pu4koff вне форума Ответить с цитированием
Старый 09.04.2010, 10:47   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

да, по причинам уже высказанным.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 09.04.2010, 11:14   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Но смысл тогда в функциях, если они не смогут повлиять на ход вещей?

Мой ответ - "Да".
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 09.04.2010, 11:20   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

И да и нет. Если нет, то тогда пускай и не видят их, а оперируют только входными параметрами. А если да - то как обычно, как все привыкли.
Я выбираю ответ да, зачем себя ограничивать? Пускай это будет вопрос стиля, кто хочет по дзену, пусть пишет по дзену.

Цитата:
Но смысл тогда в функциях, если они не смогут повлиять на ход вещей?
Смысл - вернуть результат.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 09.04.2010, 11:47   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
(* Global *)
Var
 MechHandPosition : TMechHandPosition;

Function MoveTheHand(Dir : TDirection):Boolean;
Var
 StopPoint : TMechHandPosition;
Begin
 StopPoint := MechHandPosition.PosXYZ + DirOfDir(Dir);
 While MechHandPosition.PosXYZ <> StopPoint Do
  Begin
   Try
    (* Some asm code *)
    Inc MechHandPosition.PosXYZ 4
    (* bla bla bla *)
    Result := TRUE;
   Except
    Result := FALSE;
  End;
End;
Смысл, думаю, ясен?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 09.04.2010, 11:57   #7
VovanZ
Веб-разработчик
Форумчанин
 
Регистрация: 23.05.2009
Сообщений: 279
По умолчанию

Это как бы не правильно, потому что после этого код намного труднее разбирать и дебагить; это не соответствует принципам изолирования разных уровней друг от друга и т. д. Но..... иногда это настолько упрощает структуру, что при разработке небольших программ, где ошибки допустить негде, а код читать кроме вас никто не будет наверное всё-таки можно....
Ответил "Да".
VovanZ вне форума Ответить с цитированием
Старый 09.04.2010, 12:12   #8
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Мне кажется, следовало спросить "можно ли использовать глобальные переменные?"

А так и правда константа получится.
ds.Dante вне форума Ответить с цитированием
Старый 09.04.2010, 12:45   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от ds.Dante Посмотреть сообщение
Мне кажется, следовало спросить "можно ли использовать глобальные переменные?"

А так и правда константа получится.
Ну в теле функции это и должно быть как константа, ИМХО, конечно.
В идеале функция должна принимать только входящие параметры, а если видеть глобальные переменные, то только для чтения и не больше. Поэтому и прикрепил опрос, потому как теория расходится с реалиями жизни.

Код:
(* Global *)
Var
 MechHandPosition : TMechHandPosition;

Function MoveTheHand(Dir : TDirection; x: TMechHandPosition):Boolean;
Var
 StopPoint : TMechHandPosition;
Begin
 StopPoint :=x.PosXYZ + DirOfDir(Dir);
 While x.PosXYZ <> StopPoint Do
  Begin
   Try
    (* Some asm code *)
    Inc x.PosXYZ 4
    (* bla bla bla *)
    Result := TRUE;
   Except
    Result := FALSE;
  End;

End;
Смысл, думаю, ясен?
Но и это не правильно. Функция вообще должна возвращать один результат, и не менять свои входные параметры. В теории конечно .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 09.04.2010, 12:55   #10
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Нууу... Теория теорией, но функция, в моем понимании, это та же процедура, но только которая может ответить, все ли она сделала правильно.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
присвоить из бд переменным akimov_aleks БД в Delphi 6 07.04.2010 08:24
Построение графиков функций С++ (методы аппроксимации функций) amdbodia Общие вопросы C/C++ 0 24.05.2009 15:28
использование функций в качестве параметров других функций mono Помощь студентам 0 20.04.2009 18:25
проблема с глобальным объектом Selebro Общие вопросы C/C++ 3 26.11.2008 20:22
Доступ к переменным RealSHELS Общие вопросы Delphi 4 15.06.2008 13:14