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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2010, 10:02   #11
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Нет, я не говорб о производительности. С этим, как оказалось, все норм. Просто так было бы удобнее писать и читать.
Код:
i: Integer = 1;
Цитата:
автоматически обнуляется при старте программы загрузчиком ОС. Т.е. это даже не язык, а ОС. Причём, это почти везде так, не только в Windows.
Ну а теперь вообще все понятно.
Sibedir вне форума Ответить с цитированием
Старый 22.12.2010, 10:04   #12
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Особенно в Delphi не обоснованы классы, генерики и цикл for in.
Не выворачивайте пожалуйста, тем более это к вопросу отношения не имеет. Вы прекрасно поняли о чем я писал - в Паскале это имеет свое назначение, при чем здесь дженерики?

Цитата:
то это будет что, менее накладно?
Да. Потому что, этот код не имеет смысла. Зачем нужна такая возможность? Она просто быссмыслена даже с точки зрения синтаксического сахара.

Цитата:
Просто так было бы удобнее писать и читать.
Это порождало бы путаницу - если Вам нужна константа используйте её. Само по себе выражение i:=1; в процедуре не оптимально. Есть общая форма переменная = а+б (то есть выражение, которое нельзя заменить константой), либо сразу писать result:=1;
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 22.12.2010 в 10:17.
Utkin вне форума Ответить с цитированием
Старый 22.12.2010, 10:15   #13
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Лолчто?

Как это не имеет смысла? Что, локальные переменные никогда не инициализируются, что-ли?

Код:
var
  I: Integer;
  Sum: Integer;
begin
  Sum := 0;

  for I := 0 to List.Count - 1 do
    Sum := Sum + List[I];

  ShowMessage(Format('Сумма: %d', [Sum]));
end;
Что, этот код не имеет смысла?

Sibedir про это и говорит: было бы удобнее:

Код:
var
  I: Integer;
  Sum: Integer = 0;
begin
  for I := 0 to List.Count - 1 do
    Sum := Sum + List[I];

  ShowMessage(Format('Сумма: %d', [Sum]));
end;
Тем более, что последнее согласуется с синтаксисом констант:

Код:
const
  Num: Integer = 50;
var
  I: Integer;
  Sum: Integer = 0;
begin
end;
Почему const может быть "=", а var - нет? "Где логика?" (C) Sibedir
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 22.12.2010, 10:21   #14
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Как это не имеет смысла? Что, локальные переменные никогда не инициализируются, что-ли?
Зачем Вы опять все выворачиваете? Речь шла о первом коде, а не о втором. Опять ЧСВ?

Цитата:
Тем более, что последнее согласуется с синтаксисом констант:
Вот именно! Мухи отдельно, котлеты отдельно. Я уже упоминал про Вирта, если бы Вы читали его труды, то про это бы и не писали - в его писанине есть и про константы тоже...
Цитата:
Почему const может быть "=", а var - нет? "Где логика?"
Потому что const не может быть не '=', а для var принципиально, что может быть '=' сколько угодно раз.
И второе, почему Вы сравниваете два абсолютно разных понятия - константы и переменные - это разные вещи, имеющие разную природу...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 22.12.2010 в 10:23.
Utkin вне форума Ответить с цитированием
Старый 22.12.2010, 10:28   #15
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Ребят, без эмоций. Ну пожалуйста. (оба. без лолов и чсв)

Цитата:
почему Вы сравниваете два абсолютно разных понятия - константы и переменные - это разные вещи, имеющие разную природу...
Природа, то разная, но синтаксис один. Можно было бы одинаково писать. Хотя с точки зрения производительности - это
Код:
var
  Sum: Integer = 0;
begin
и
Код:
var
  Sum: Integer;
begin
  Sum := 0;
та же марковка, только в другой руке.

Хотя не могу не согласится с Utkin'ым. Это наверное специальная фича, чтобы программист не забывал про инициализацию при внесении изменений. Если она в коде, то бросается в глаза, а если где-то в var, то можно и забыть про нее.

Последний раз редактировалось Sibedir; 22.12.2010 в 10:36.
Sibedir вне форума Ответить с цитированием
Старый 22.12.2010, 10:39   #16
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
чтобы программист не забывал про инициализацию при внесении изменений.
Не программист, а студент. Паскаль предназначался для обучения студентов "правильному" стилю написания программ.
Насчет инициализации -
Лично я всегда инициализирую все что можно - объекты, переменные и т.д. (кроме нединамических массивов). Значительно уменьшает время отладки...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 22.12.2010, 11:26   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Utkin
И второе, почему Вы сравниваете два абсолютно разных понятия - константы и переменные - это разные вещи, имеющие разную природу...
Utkin, ну ка, ну-ка.. вот тут поподробнее.

чем (с точки зрения компилятора Паскаля) отличаются:
Код:
var Sum : integer;
....
   Sum := 0;
   for .... do Sum := Sum + xxxx;
и
Код:
const Sum : integer = 0;
....
   for .... do Sum := Sum + xxxx;

p.s. вопрос задаю не спора ради - правда очень любопытно.
Кстати, то, что я вопрос адресовал уважаемому господину Utkin не должно останавливать того, кто знает ответ на этот вопрос, как говорится: - Welcome!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.12.2010, 11:28   #18
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
p.s. кстати, в языке C# этой проблемы нет! Может стоит потихонечьку на него переползать?
скорее уж в плюсах как в его предках.(да и в С вродь тоже)

проблема называется "отсутствие возможности инициализации локальных переменных при объявлении".

хотя на самом то деле кто мешал сделать?
благо в том же С, можно инициализировать локальную переменную(содержит значение) или нет(содержит мусор)
Цитата:
Потому что const не может быть не '=', а для var принципиально, что может быть '=' сколько угодно раз.
скорее уж ':='.
почему то в С можно а тут нельзя.
Цитата:
было бы удобнее:
ну да.
Цитата:
Вот именно! Мухи отдельно, котлеты отдельно.
хотя Уткин и прав, Паскаль строгий язык.

ЗЫ: тему советую завершить.(холи варом пахнет)
а то скоро придем к невозможности создания объектов на стеке(Sibedir, знаешь насколько они удобнее в качестве локальных переменных? ибо (1) создаются при обьявлении, (2) автоматически удаляются при выходе из функции, (3) утечки памяти с ними исключены(она всегда будет освобождена ибо в стеке как любая локальная переменная, исключение срыв стека, но там программа вообще мрет))
Цитата:
чем (с точки зрения компилятора Паскаля) отличаются:
тем что второе вообще не компилируется.
и константа она подставляется в код, вместо своего имени.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.12.2010, 12:28   #19
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Utkin, ну ка, ну-ка.. вот тут поподробнее.
Разница в том, что имя переменной здесь символизирует адрес, где можно найти значение, а имя константы число.
Адрес ячейки памяти при каждом запуске скорее всего будет отличен от предыдущего (и АртМоней это подтверждает), константа же это число всегда.

Serge_Bliznykov, касательно Вашего кода - это вообще кощунство . Пытаться присвоить значение константе... Дайте валерьянки !
В первом случае все правильно, второй можно трактовать так:
Есть число 0 и далее по тексту 0=0+ххх. ЧИслу нельзя присвоить значение выражения, ему вообще ничего нельзя присваивать.
Это же сами понимаете что, ну также нельзя .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 22.12.2010 в 12:37.
Utkin вне форума Ответить с цитированием
Старый 22.12.2010, 12:29   #20
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Речь шла о первом коде, а не о втором.
О каком ещё "первом" коде? Автор темы спрашивает, чего в Паскале нет инициализации переменных при объявлении - ведь это удобно и имеет смысл.

А тут начали разводить... "динамическая типизация"... "для этого есть константы"... вот это точно не в тему.

Цитата:
Сообщение от Utkin Посмотреть сообщение
Потому что const не может быть не '=', а для var принципиально, что может быть '=' сколько угодно раз.
Глобальные переменный негодуют!

Цитата:
Сообщение от Utkin Посмотреть сообщение
И второе, почему Вы сравниваете два абсолютно разных понятия - константы и переменные - это разные вещи, имеющие разную природу...
Ну давай, скажи нам, в чём глубокий смысл и задумка Вирта иметь

Код:
var
  I: Integer = 5;
для глобальных переменных, но не иметь этого же для локальных переменных? Чем они провинились?

С точки зрения языка - ничем. И подобная конструкция имеет полное право на существование - тем более, что это логически закончит синтаксис (о чём уже давно воют на Quality Central).

Единственная причина для текущего состояния вещей - я уже указал.

Цитата:
Сообщение от Utkin Посмотреть сообщение
Не программист, а студент. Паскаль предназначался для обучения студентов "правильному" стилю написания программ.
Оке, что не так с идеей сокращения объёма кода? Я напомню, "этот же Паскаль" ввёл with и case ровно с этой же целью.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
чем (с точки зрения компилятора Паскаля) отличаются:
Код:
var Sum : integer;
....
   Sum := 0;
   for .... do Sum := Sum + xxxx;
и
Код:
const Sum : integer = 0;
....
   for .... do Sum := Sum + xxxx;
Ничем. Окромя того, что первое реализовано, а второе - ещё делать надо. Двоичный код в обоих случаях должен быть идентичен (если бы эта фишка была бы реализована).

EDIT: Тьфу, во втором случае константа стоит, а мне показалось var.

Тогда отличаются они только тем, что в первом случае переменная локальная, а во втором - глобальная. Понятно, при условии writable consts on.

P.S.
Цитата:
Сообщение от Utkin Посмотреть сообщение
Опять ЧСВ?
Зря стараешься. Мне пофиг.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 22.12.2010 в 12:52.
GunSmoker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменные экземпляра,класса, константы и переменные cop08 Общие вопросы .NET 3 20.12.2010 21:56
Глобальные и локальные переменные Kapitann JavaScript, Ajax 2 03.08.2010 14:24
Как обычно делаются такие локальные переменные в методах классов? Oleg_SK Общие вопросы C/C++ 8 11.07.2010 04:09
Локальные и глобальные переменные. Proger10 Общие вопросы Delphi 1 04.05.2009 05:55
Локальные минимумы и их номера. f4rr3l Паскаль, Turbo Pascal, PascalABC.NET 5 06.01.2009 21:51