Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Префиксы локальных переменных. 
:(
    Опции темы
 
Какие префиксы Вы ставите локальным переменным?
никаких [ 13 ]  [59.09%]
l [ 3 ]  [13.64%]
L [ 0 ]  [0.00%]
f [ 0 ]  [0.00%]
аля Си [ 0 ]  [0.00%]
всегда префикс соответствуюший типу переменной. [ 2 ]  [9.09%]
другое [ 4 ]  [18.18%]
Всего проголосовавших: 22
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
Rennigth
Дата 10.10.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Незнаю даже к чему я завел этот опрос, просто интерес... мне приходиться по долгу службы постоянно разбираться и править чужые проекты, и чего я только там  не видел... часто переписываю, а код стандатизировать под себя нехорошо наверно, и хочется послушать и мнение других. Я лично в методах класса l а в просто процедурах/функциях аля Cи т.к. если мсдн-кие сорцы переводишь на делфи нагляднее как-то.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Alexeis
Дата 10.10.2007, 11:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  А зачем локальной префикс? На то она и локальная что часто юзается, потому префикс будет мешать. Иногда формальным параметрам процедур ставлю префикс "а". От английского, что в данном случае значит некоторый/неопределенный. Т.е. на этапе разработки неизвестно что там реально будет.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rennigth
Дата 10.10.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(Alexeis @  10.10.2007,  11:37 Найти цитируемый пост)
А зачем локальной префикс?

ну например чтобы их отличать переменные класса которые по обычаю и по стандарту делфей начинаются с F. например l это от слова local (видел кто-то ставит большую, кто-то маленькую). Вообщем нагляднее как-то...



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Alexeis
Дата 10.10.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Rennigth @  10.10.2007,  11:46 Найти цитируемый пост)
ну например чтобы их отличать переменные класса которые по обычаю и по стандарту делфей начинаются с F

  Правильно, всем префикс, а локальные будут без. Раз без префикса значит локальная. Все понятно и удобно smile .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MetalFan
Дата 10.10.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Alexeis @  10.10.2007,  11:55 Найти цитируемый пост)
Раз без префикса значит локальная

ставлю префикс l. ибо в коде не всегда можно понять, переменная это или какая-либо функция или св-во класса.
пример:
Код

procedure TForm1.SomeProc;
var
  lWidth: integer;
begin
  lWidth := Width div 2;
  edt1.Width := lWidth;
  lbl1.Width   := lWidth;
end;

все ясно и понятно, где локальная переменная, где св-во класса...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Bose
Дата 10.10.2007, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Я для локальных переменных ставлю префикс tmp(от temporary - временная).

Префикс F - обычно ставлю приватным полям класса(как в VCL). А префикс l мне не нравится из-за того что его легко спутать с латинской заглавной буквой И. 

tmp в этом плане нагляднее. Сомневаюсь чтобы кому-то пришло в голову давать такой префикс глобальным переменным или полям класса. smile 

Цитата(Alexeis @  10.10.2007,  11:37 Найти цитируемый пост)
 А зачем локальной префикс? На то она и локальная что часто юзается, потому префикс будет мешать.

Цитата(Alexeis @  10.10.2007,  11:55 Найти цитируемый пост)
Правильно, всем префикс, а локальные будут без. Раз без префикса значит локальная. Все понятно и удобно 

Затем, что когда приходится работать в чужом коде, никогда заранее не угадаешь какая блажь могла прийти в голову авторам. 

Я стал юзать префиксы после того как несколько раз столкнулся с ситуацией, когда переменная с одним и тем же именем была объявлена и как глобальная и как локальная. А от чужих ошибок, да и от своей невнимательности никто не застрахован.   smile

Добавлено через 1 минуту и 5 секунд
Кстати на тему оформления кода, настоятельно рекомендую прочитать статью Джоэла Спольски Как заставить неправильный код выглядеть неправильно

PM MAIL WWW Skype   Вверх
Alexeis
Дата 10.10.2007, 14:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Bose, ну это просто убицца об стенку чтобы постоянно писать что-то подобное
Код

  For tmp_i := 1 to List.Count - 1
  do
    List[tmp_i] := p;

  Никогда такое извращение не буду делать. Префикс tmp я тож юзаю, но редко, только тогда когда действительно конфликтуют имена.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rennigth
Дата 10.10.2007, 14:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(Bose @  10.10.2007,  14:12 Найти цитируемый пост)
Затем, что когда приходится работать в чужом коде, никогда заранее не угадаешь какая блажь могла прийти в голову авторам. 

Я стал юзать префиксы после того как несколько раз столкнулся с ситуацией, когда переменная с одним и тем же именем была объявлена и как глобальная и как локальная. А от чужих ошибок, да и от своей невнимательности никто не застрахован.    


Я примерчик приведу по этому поводу. Поплачусь так сказать. Разгребая чужой код наткнулся на то что переменную цикла в методе процедуры назвали fIndex при чем типа Word, код был примерно такой:

Код

var
  fIndex: Word;
begin
  //..
  if List.Count > 0 then
    for i := 0 to List.Count - 1 do
    begin
      {бла бла бла} 
    end;
  //..
end;

переделал на 
Код

var
  i: Integer;
begin
  //..
  for i := 0 to List.Count - 1 do
  begin
    {бла бла бла} 
  end;
  //..
end;


но, не заменил в коде {бла бла бла} одну fIndex на i. ну не заметил я... и все скомпилировалось smile Все проклял пока нашел ошибку, при чем не стабильную, когда оказалось что fIndex есть еще и глобальная smile

Добавлено через 3 минуты и 15 секунд
Alexeis, ну переменных для циклов это не касается smile. Они как i,j,k и т.д. были во всех языках, так надеюсь и остануться smile Хотя бывают индивиды... (см. мой пост выше). :(


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Bose
Дата 10.10.2007, 14:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(Alexeis @  10.10.2007,  14:17 Найти цитируемый пост)
Bose, ну это просто убицца об стенку чтобы постоянно писать что-то подобное


Неее, ну к переменным цикла это не относится smile

Однобуквенные переменные, использующиеся в циклах, я оставляю как есть.  Также частенько использую s для string. 
var i,j,k,p:integer;
var s:string;

tmp юзаю, когда нужно выполнить что-то более сложное, например создать объект. Или там, если нужно объявить несколько локальных переменных строкового типа.

например:

Код

procedure .... ;
var 
  tmpForm:TForm;
begin
  tmpForm:=TmyForm.Create(application);
  try  
    TmyForm(tmpForm).InitializeSomething;
    tmpForm.Show;
  except
    tmpForm.Free;
    raise;
  end;
end;


Или вот для строк(пример выдуманный). 

Код

function ReFormatAddress(const aSourceAddress:string):string;
var 
  tmpAddress, tmpCountry, tmpCity, tmpZip:string;
 s:string;
begin
  s:= EncodeSomehow(aSourceAddress);
  tmpAddress:=(Copy(s,1,10);
  tmpCity:=ReFormatCity(Copy(s,10,20));
  tmpCountry:=ReFormatCountry(Copy(s,20,30));
  tmpZip:=ReFormatZip(Copy(s,30,40));
  
  result:=tmpCountry+','+tmpCity+','+tmpAddress+','+tmpZip;
end;


Добавлено через 3 минуты и 3 секунды
Цитата(Rennigth @  10.10.2007,  14:23 Найти цитируемый пост)
Все проклял пока нашел ошибку, при чем не стабильную, когда оказалось что fIndex есть еще и глобальная 


Вот и у меня аналогичный случай был. Я после этого случая по всему коду прошёлся CodeHealer-ом(если не путаю название). И он мне ещё несколько таких случаев нашёл. 
PM MAIL WWW Skype   Вверх
MetalFan
Дата 10.10.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



полностью за i,j,k...
но префикс l - однозначно локальная переменная,а вот tmp... нет, я всетаки за l
p.s. сравните l и I, всетаки отличия есть ;)
p.p.s.для редких случаев в функциях поиска индекса объекта переменной-итератором делаю Result
Код

function TSomeObject.GetSomeIndex( AObject: TObject ): integer;
begin
  for Result := 0 to pred( FSomeList.Count ) do
    if FSomeList[Result] = AObject then exit;
  Result := -1;
end;

но эт так, к слову


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Alexeis
Дата 10.10.2007, 14:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Bose @  10.10.2007,  14:35 Найти цитируемый пост)
Однобуквенные переменные, использующиеся в циклах, я оставляю как есть.  Также частенько использую s для string. 
var i,j,k,p:integer;
var s:string;

  Ну значит это уже не система, а выборочное использование в опасных местах. У меня другая метода. Как правило все члены классов/методы и проч. имеют длинные описательные имена. Чем дальше ее видно тем больше в ней букав. А глобальные вообще лучше кричащими большими буквами (в верхнем регистре). Все локальное имеет короткие названия, например тот же Width, локально будет выглядеть как wdth или вообще wth. Вместе с тем ничего с большой областью видимостью я не называю так кратко. Потом через месяц смотришь сокращенная абракадабра, ага значит искать ее нуна рядом. Пишется быстро, большой смысловой нагрузки не несет, но и путаницу тоже не вносит, потому и не заморачиваюсь придумыванием чего-то дополнительного. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Bose
Дата 10.10.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(MetalFan @  10.10.2007,  14:54 Найти цитируемый пост)
p.s. сравните l и I, всетаки отличия есть

Для шрифтов Arial(и Impact) отличий нет. Сравни:
Arial: l I
Courier: l I
Impact: l I
Tahoma: l I
Times: l I
Verdana: l I

Кстати, я наконец вспомнил, почему опасаюсь буквы I. Потому что буква I используется как префикс к типу Interface.


Цитата(Alexeis @  10.10.2007,  14:55 Найти цитируемый пост)
  Ну значит это уже не система, а выборочное использование в опасных местах. 

А вот и нифига это не значит. Это именно система. Просто, в качестве локальных переменных без префиксов допустимо использовать однобуквенные имена переменных. Но опять-таки, это зависит от ситуации. 
например X, Y, Z могут оказаться полями(свойствами) какого-то класса. 

Цитата(Alexeis @  10.10.2007,  14:55 Найти цитируемый пост)
  У меня другая метода. Как правило все члены классов/методы и проч. имеют длинные описательные имена. Чем дальше ее видно тем больше в ней букав.
 
согласен, и у меня также.

Цитата(Alexeis @  10.10.2007,  14:55 Найти цитируемый пост)
А глобальные вообще лучше кричащими большими буквами (в верхнем регистре).
 
А в VCL в верхнем регистре константы обозначены. ;-)

Я для глобальных пишу префикс Global. (А вообще стараюсь не использовать)

Цитата(Alexeis @  10.10.2007,  14:55 Найти цитируемый пост)
Пишется быстро, большой смысловой нагрузки не несет, но и путаницу тоже не вносит, потому и не заморачиваюсь придумыванием чего-то дополнительного. 

Пока ты пишешь для себя - всё хорошо. Ты попробуй в чужом проекте разобраться, с аналогичными обозначениями. Времени уйдёт больше, чем если бы имена были изначально заданы понятно. Имхо.

Цитата(MetalFan @  10.10.2007,  14:54 Найти цитируемый пост)
для редких случаев в функциях поиска индекса объекта переменной-итератором делаю Result

Спасибо за идею. +  smile 
PM MAIL WWW Skype   Вверх
Alexeis
Дата 10.10.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Bose @  10.10.2007,  15:14 Найти цитируемый пост)
А в VCL в верхнем регистре константы обозначены. ;-)

  Именно той же причине и делаю большими. Константы же объявляются как глобальные (по большей части). Это как раз их и роднит с глобальными переменными. Т.е. по принципу сходное должно выглядеть сходно. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MetalFan
Дата 10.10.2007, 15:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Bose @  10.10.2007,  15:14 Найти цитируемый пост)
Спасибо за идею. +  smile

спасибо, но идея чесно сперта из VCL  smile 
Код

function TStrings.IndexOf(const S: string): Integer;
begin
  for Result := 0 to GetCount - 1 do
    if CompareStrings(Get(Result), S) = 0 then Exit;
  Result := -1;
end;



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Bose
Дата 10.10.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(MetalFan @  10.10.2007,  15:29 Найти цитируемый пост)
спасибо, но идея чесно сперта из VCL

Не обращал внимания =)

Я до сих пор пишсал так:

Код

function TStrings.IndexOf(const S: string): Integer;
var i:integer;
begin
  for i := 0 to GetCount - 1 do
    if CompareStrings(Get(Result), S) = 0 then 
    begin 
       Result:=i;
       Exit;
    end;
  Result := -1;
end;


(задумчиво) Интересно, а не будет ли твой вариант медленнее работать... 
PM MAIL WWW Skype   Вверх
Rennigth
Дата 10.10.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(MetalFan @  10.10.2007,  15:29 Найти цитируемый пост)
спасибо, но идея чесно сперта из VCL   

Плагиат в малых дозах, полезен в любых колличествах smile 

Цитата

Код

function TStrings.IndexOf(const S: string): Integer;
begin
  for Result := 0 to GetCount - 1 do
    if CompareStrings(Get(Result), S) = 0 then Exit;
  Result := -1;
end;

Мне тоже понравилось smile



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
aktuba
Дата 10.10.2007, 15:57 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Индексные - без префикса.
Локальные - l (local)
Глобальные - G (Global)
Приватные поля класса - F
Параметры процедур и функций - А


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Alexzz
Дата 11.10.2007, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.4.2007
Где: Латвия

Репутация: нет
Всего: 1



Цитата(Alexeis @ 10.10.2007,  11:37)
А зачем локальной префикс? На то она и локальная что часто юзается, потому префикс будет мешать.

Вот, с этим согласен.
Сам локальным переменным даю короткие имена, например a,b,c.. для циклов как-то по привычке i,j.. если это счётчик чего-либо то cnt, если это длина чего либо то ln, временный стринг - s, ну и в таком стиле. Если несколько переменных с одинаковым назначением, то снабжаю индексами, типа a1,a2,a3... cnt1,cnt2... 
PM WWW ICQ MSN   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0722 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.