369 / 168 / 44
Регистрация: 11.07.2013
Сообщений: 884
1

Как правильно объявлять и использовать статические переменные в Lazarus

29.05.2015, 20:30. Показов 3913. Ответов 5
Метки нет (Все метки)

Эта тема уже обсуждалась применительно к Delphi Статическая переменная в delphi
Автора интересовал вопрос "...есть ли в делфи статическая переменная как в С++...". Ему было дано весьма авторитетное разъяснение:
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button2Click(Sender: TObject);
const
  StatVar : integer = 0;
var
  PStatVar : ^Integer;
begin
  PStatVar := @StatVar;
  Inc(PStatVar^);
  ShowMessage('StatVar = ' + IntToStr(PStatVar^));
end;
Однако в Lazaruse я использую вот такие конструкции, которые прекрасно работают:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Button1Click(Sender: TObject);
const
  c: array[1..2] of integer = (0,0);
begin
  Edit1.Text:=IntToStr(c[1]);
  Edit2.Text:=IntToStr(c[2]);
  inc(c[1]);
  if c[1]=3 then begin
    c[1]:=0;
    inc(c[2]);
    if c[2]=5 then c[2]:=0;
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
const
  n: integer = 0;
begin
  Edit3.Text:=IntToStr(n);
  Inc(n);
  if n>5 then n:=0;
end;
Вопрос: а как рекомендуется правильно работать со статическими переменными?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2015, 20:30
Ответы с готовыми решениями:

Как правильно объявлять и использовать локальные переменные в лиспе
Добрый день, пожалуйста объясните как правильно объявлять и использовать локальные переменные в...

Как правильно объявлять статические константные объекты в классе?
В классе надо объявить статичные константные строки. Типа class A { public: static const...

Как правильно объявлять переменные?
Здравствуйте, перед тем как писать что то наподобие "google в помощь" скажу что на разных сайтах...

Глобальные переменные и массивы: как объявлять и использовать?
Доброго времени суток! Не знаю, как объявить глобальные переменные и массивы и как их потом юзать....

5
479 / 217 / 38
Регистрация: 24.01.2013
Сообщений: 663
29.05.2015, 22:42 2
Как по мне, то более правильным аналогом статической переменной из С++ является глобальная переменная (т.е. объявленная вне процедуры/функции переменная с инициализацией). Типа так:
Pascal
1
2
3
4
5
6
var StatVar : integer = 0;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  Inc(StatVar);
...
Во-первых константу менять как то идеологически неправильно, а во-вторых используется не очевидное свойство типизированной константы из-за того что она хранится в сегменте данных. В общем получается лишняя нагрузка на мозг... хотя это дело привычки, если язык позволяет, можно использовать и такую конструкцию.
0
369 / 168 / 44
Регистрация: 11.07.2013
Сообщений: 884
30.05.2015, 09:32  [ТС] 3
Цитата Сообщение от _Develop Посмотреть сообщение
константу менять как то идеологически неправильно
Да, в этом есть какой-то "подвох".
Цитата Сообщение от _Develop Посмотреть сообщение
получается лишняя нагрузка на мозг
Мне кажется наоборот, статическая переменная - попытка сделать программу более читаемой. Представьте, что, допустим, в файле около 200 функцций и процедур. Недели через две с трудом вспомнаешь их назначение, не говоря уже о глобальных переменных... Жаль, конечно, что разработчики языка не предусмотрели определение "static".
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31261 / 20434 / 7967
Регистрация: 22.10.2011
Сообщений: 35,483
Записей в блоге: 6
30.05.2015, 11:33 4
Цитата Сообщение от shyub Посмотреть сообщение
Недели через две с трудом вспомнаешь их назначение
Значит, надо рефакторить программу / переформировывать файлы так, чтобы предназначение процедур осталось ясным не через две недели, а даже через 2 года. Не надо свои ошибки проектирования перекладывать на создателя языка/IDE.

Кстати, FPC - объектно ориентированный язык, имеющий средства для описания class variable, которые как раз являются аналогом статических переменных.
0
369 / 168 / 44
Регистрация: 11.07.2013
Сообщений: 884
30.05.2015, 23:17  [ТС] 5
Цитата Сообщение от volvo Посмотреть сообщение
FPC - объектно ориентированный язык, имеющий средства для описания class variable, которые как раз являются аналогом статических переменных
Скажу честно, впервые об этом слышу от вас. В поисковике задал "Lazarus class variable", но ничего не нашёл. Если можете, дайте ссылку, где можно о нем почитать.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31261 / 20434 / 7967
Регистрация: 22.10.2011
Сообщений: 35,483
Записей в блоге: 6
01.06.2015, 10:29 6
Здесь, например: http://wiki.lazarus.freepascal... ass_syntax
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2015, 10:29

Как объявлять глобальные переменные в Haskell и использовать их в функциях
Здравствуйте уважаемые! Я только начинаю разбираться с Haskell Не могу найти информацию о том как...

Найти S слов, наиболее часто встречающиеся в тексте (использовать статические переменные)
Дан текст. Найти S слов, наиболее часто встречающиеся в тексте. Использовать статические переменные

Как лучше объявлять переменные
Написал такой код, который сначала получает несколько(много) текстовых файлов: DirectoryInfo...

Как объявлять глобальные переменные?
Нужно создать переменную "Х" задать ей тип, и потом изменять значение из любой формы. Чтобы был...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.