Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.17;
Скачать: CL | DM;

Вниз

Методики разработки в условиях нехватки ресурсов.   Найти похожие ветки 

 
Piter ©   (2006-11-21 21:14) [80]

Sergey Masloff   (21.11.06 20:43) [79]
Неинициированные локальные переменные


так ведь об этом комилятор предупреждает?!

Sergey Masloff   (21.11.06 20:43) [79]
неправильное применение try...finally и try...except


можно пример?


 
Sergey Masloff   (2006-11-21 21:25) [81]

Piter ©   (21.11.06 21:14) [80]
>так ведь об этом комилятор предупреждает?!
А фигли, разработчики-то все опытные знают где галку поставить чтобы не предупреждал ;-)

>можно пример?
Из головы выдумывать неохота а на память... не тем голова сейчас занята
как вопиющее - пустой блок except, в finally освобождают то что не создавали да много чего


 
Rouse_ ©   (2006-11-21 21:32) [82]


> Они определяют архитектуру, пишут ядро системы и сервисные
> функции. Под ними работают кодеры. Программировать им уметь
> не надо - только кодить. Причем все что они накодили они
> отдают на причесывание и проверку прежде чем это включается
> в проект.

Получиться тихий ужас... Сужу по опыту работы за последние 6 лет в трех организациях, включая текущую. Переписка кода практически 100 процентная от объема кода шкодеров. Если уж они так необходимы, то место их в третьестепенных задачах на неделю разработки. Так сказать для разработки третьестепенных вспомогательных утилит. А как пообучаться - тогда можно и посложнее давать. Кстати Зотычь правильно говорит про тулзовиков, чтоб клетку ограничить им - самое оно будет :)


 
Petr V. Abramov ©   (2006-11-21 23:04) [83]

Sergey Masloff   (21.11.06 20:43) [79]
> Год назад составил список типичных примеров явно плохого кода
оно хорошо при наличии списка явно хорошего.


 
Piter ©   (2006-11-21 23:13) [84]

Sergey Masloff   (21.11.06 21:25) [81]
как вопиющее - пустой блок except


а что здесь вопиющего? У меня такое бывает. Вот возьму пример из головы:

function ConvertStrToIntSpec(const s: string; var i: integer): boolean;
begin
 Result := false;
 try
   i := StrToInt(s);
   if i < 0 then
     exit;    
   Result := True;
 except
 end;
end;


Sergey Masloff   (21.11.06 21:25) [81]
в finally освобождают то что не создавали


это странно...


 
Anatoly Podgoretsky ©   (2006-11-21 23:33) [85]

> Piter  (21.11.2006 23:13:24)  [84]

Код неправильный
Почему бы не написать нормально

function ConvertStrToIntSpec(const s: string; var I: Integer): Boolean;begin   try     I := StrToInt(S);     Result := I >= 0;   except     Result := False;   end;end;


 
Anatoly Podgoretsky ©   (2006-11-21 23:36) [86]

> Anatoly Podgoretsky  (21.11.2006 23:33:25)  [85]

function ConvertStrToIntSpec(const s: string; var I: Integer): Boolean;
begin  
  try
    I := StrToInt(S);    
    Result := I >= 0;  
  except    
    Result := False;
  end;
end;


 
Sergey Masloff   (2006-11-21 23:38) [87]

Piter ©   (21.11.06 23:13) [84]
>Вот возьму пример из головы:
1) Это просто ты не знаешь про TryStrToInt()
2) TryStrToInt внутри организован тоже не через исключения. И на то есть причины

Вообще это дурной тон исключения так использовать (мнение не мое а классиков). Они не для того сделаны.


 
Anatoly Podgoretsky ©   (2006-11-22 00:02) [88]

> Sergey Masloff  (21.11.2006 23:38:27)  [87]

А вот пример с ним, совсем коротко получается

function ConvertStrToIntSpec(const s: string; var I: Integer): Boolean;
begin  
  if not TryStrToInt(S, I) then I := 0;  
  Result := I >= 0;  
end;


 
Piter ©   (2006-11-22 01:18) [89]

Sergey Masloff   (21.11.06 23:38) [87]
Это просто ты не знаешь про TryStrToInt()


ну почему сразу не знаю. Я ведь привел тестовый пример.

Бывают функции типа приведенной, но проверок там больше намного. И нафига в случае каждой неудачной проверки писать: Result := false, если можно сразу задать Result := false, и только после прохождения всех проверок написать: Result := true?

Тогда в except просто нечено писать, результат уже задан False, поэтому оно пустое. По-моему, вполне нормальная ситуация.
Просто пример лень придумывать, но я думаю понятно о чем речь.

Anatoly Podgoretsky ©   (22.11.06 0:02) [88]
А вот пример с ним, совсем коротко получается

function ConvertStrToIntSpec(const s: string; var I: Integer): Boolean;
begin  
 if not TryStrToInt(S, I) then I := 0;  
 Result := I >= 0;  
end;


данный пример явно не реализовывает в точности действия приведенной функции. Он вообще некорректен, например при передаче "aaa" - оно вернет True!


 
Джо ©   (2006-11-22 01:19) [90]

> [84] Piter ©   (21.11.06 23:13)
> Sergey Masloff   (21.11.06 21:25) [81]
> в finally освобождают то что не создавали
>
> это странно...

Неужели не встречал такого бреда, как:

try
 Obj := TSomeObj.Create;
finally
 Obj.Free
end;

?


 
Piter ©   (2006-11-22 01:27) [91]

Хотя ладно, постараюсь привести пример:

function TestConvert(const s: string; var i: Integer): boolean;
begin
 Result := false;
 try
   i := StrToInt(s);
   if i>0 then
   begin
     inc(FEnterCount, 1);
     if Assigned (GlobarRec) then
     begin
       Inc(GlobalRecord.Count, i);
       Result := true;
     end;
   end;
 except
 end;
end;


Пожалуйста, перепишите функцию, чтобы в except нужно было что-то писать?


 
Piter ©   (2006-11-22 01:28) [92]

Джо ©   (22.11.06 1:19) [90]
Неужели не встречал такого бреда, как:

try
Obj := TSomeObj.Create;
finally
Obj.Free
end;
?


да я встречал еще и не такой бред :)
Странно то, что такие программисты работают и получают, как я понимаю в фирме Сергея, неплохие деньги...


 
Piter ©   (2006-11-22 01:34) [93]

Sergey Masloff   (21.11.06 23:38) [87]

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


 
Юрий Зотов ©   (2006-11-22 01:35) [94]

А зачем здесь вообще except?

if TryStrToInt(s, i) and (i > 0) then
begin
  Inc(FEnterCount, 1);
  Result := Assigned(GlobarRec);
  if Result then
    Inc(GlobalRecord.Count, i);
end
else
 Result := False;


 
Piter ©   (2006-11-22 01:44) [95]

ЛадноЮ побадаюсь с мастерами :)

function Test(const s: string): boolean;
var
 Task: TTask;
begin
Result := false;
try
  Task := TTask.Create(cFormateDisk, s);
  if TaskManager.AddTask(Task) then
  begin
    inc(FEnterCount, 1);
    if Assigned (GlobarRec) then
    begin
      Inc(GlobalRecord.Count, i);
      Result := true;
    end;
  end;
except
end;
end;


 
Piter ©   (2006-11-22 01:47) [96]

сори, лучше так оформить:

function Test(const s: string): boolean;
var
Task: TTask;
begin
 Result := false;
 try
   Task := TTask.Create(cFormateDisk, s);
   if TaskManager.AddTask(Task) then
   begin
     inc(FEnterCount, 1);
     if Assigned (GlobarRec) then
     begin
       Inc(GlobalRecord.Count, i);
       Result := true;
     end;
   end;
 except
 end;
end;


 
Джо ©   (2006-11-22 01:47) [97]

Не знаю, а меня всегда, как говорится (возможно, на юге России это слово тоже используют) "сипает" при виде пустого except...end иначе как в сопровождении комментария с внушительными причинами, по которым сия конструкция была употреблена :)


 
Eraser ©   (2006-11-22 01:48) [98]

> [95] Piter ©   (22.11.06 01:44)

использование глобальных переменных не приветствуется :)


 
Eraser ©   (2006-11-22 01:50) [99]

> [97] Джо ©   (22.11.06 01:47)


> (возможно, на юге России это слово тоже используют) "сипает"

впервые слышу.. хотя живу не на самом уж юге, но почти )


 
Юрий Зотов ©   (2006-11-22 01:54) [100]

try
 if TaskManager.AddTask(TTask.Create(cFormateDisk, s)) then
 begin
   Inc(FEnterCount, 1);
   Result := Assigned (GlobarRec)
   if Result then  
     Inc(GlobalRecord.Count, i)
 end
except
 Result := False
end;


 
Джо ©   (2006-11-22 01:59) [101]

> [99] Eraser ©   (22.11.06 01:50)
> > [97] Джо ©   (22.11.06 01:47)
>
>
> > (возможно, на юге России это слово тоже используют) "сипает"
>
> впервые слышу.. хотя живу не на самом уж юге, но почти )

Ну, возможно, исключительно малоросское слово. Или там кубанское впридачу. Впрочем, Даль его знает. Уверяет, что слово польск. или чешского происхождения. Обогощайте свой словарь, великороссы! ;)

Я употребил в значении "меня передергивает". Ударение в слове "сипать" — на первом слоге.


 
Piter ©   (2006-11-22 02:02) [102]

ой ну ладно, представим так:

function TCore.Format(const s: string; const NumOperator: integer): boolean;
var
 Task: TTask;
begin
 Result := false;
 try
   Task := TTask.Create(cFormateDisk, s);
   if Self.TaskManager.AddTask(Task) then
   begin
     inc(FEnterCount, 1);
     if FAddHistoryFlag then
     begin
       Self.History.Add(cFormatDisk, s, NumOperator);
       Result := true;
     end;
   end;
 except
 end;
end;


 
Piter ©   (2006-11-22 02:10) [103]

Юрий Зотов ©   (22.11.06 1:54) [100]

так, вершина моего творения :)

function TCore.Format(const s: string; const NumOperator: integer): integer;
var
 Task: TTask;
begin
 Result := -1;
 try
   Task := TTask.Create(cFormateDisk, s);
   if Self.TaskManager.AddTask(Task) then
   begin
     inc(FEnterCount, 1);
     if FAddHistoryFlag then
       Result := Self.History.Add(cFormatDisk, s, NumOperator);
   end;
 except
 end;
end;


 
Eraser ©   (2006-11-22 02:15) [104]

> [103] Piter ©   (22.11.06 02:10)

локальная переменная Task ведь явно лишняя, это еще в [100] ЮЗ заметил )


 
SlymRO   (2006-11-22 04:20) [105]

Eraser ©   (22.11.06 2:15) [104]
локальная переменная Task ведь явно лишняя, это еще в [100] ЮЗ заметил )

а если в AddTask EOutOfMemory или еще какайнить ботва: TTask.Create потерян :( а его не мешалобы Free


 
Anatoly Podgoretsky ©   (2006-11-22 09:35) [106]

> Piter  (22.11.2006 01:18:29)  [89]

Ты программисти али кто?
Простейшие коды читать не умеешь, ну тогда запусти Дельфи и не пори чепуху.


 
Anatoly Podgoretsky ©   (2006-11-22 09:38) [107]

> Piter  (22.11.2006 01:27:31)  [91]

Какая проблема

// Result := false;
try
...
except
  Result := false;
end;

Учись программировать, годы тебе на пользу не пошли.


 
Anatoly Podgoretsky ©   (2006-11-22 09:39) [108]

> Piter  (22.11.2006 01:28:32)  [92]

> Странно то, что такие программисты работают

А ты чем дельги зарабатываешь?
Только не говори, что программированием, поскольку странно и не логично.


 
Anatoly Podgoretsky ©   (2006-11-22 09:40) [109]

> Piter  (22.11.2006 01:44:35)  [95]

А чего бодаться?
Безграмотный код и утечки и AV


 
Anatoly Podgoretsky ©   (2006-11-22 09:43) [110]

> Piter  (22.11.2006 02:02:42)  [102]

Таже проблема, утечка и AV
Как программировал пару лет назад так ничему и не научился.


 
SlymRO   (2006-11-22 10:22) [111]

Удалено модератором


 
Anatoly Podgoretsky ©   (2006-11-22 10:31) [112]

> SlymRO  (22.11.2006 10:22:51)  [111]

Хочешь помериться у кого длиннее?
Да ради бога, только зачем мне в твои игры играть.


 
Александр Иванов ©   (2006-11-22 10:31) [113]

> [111] SlymRO   (22.11.06 10:22)

Уже ничем не поможешь. Те же утечки.


 
Anatoly Podgoretsky ©   (2006-11-22 10:34) [114]

> SlymRO  (22.11.2006 10:22:51)  [111]

> Помог бы чем,

А где просьба о помощи?
А приведеный код за помощь не считается?
А на слабо у нас не проходит, с этим пожалуйста в песочницу.


 
Anatoly Podgoretsky ©   (2006-11-22 10:37) [115]

> Александр Иванов  (22.11.2006 10:31:53)  [113]

> Уже ничем не поможешь. Те же утечки.

Ну не понимает


 
SlymRO   (2006-11-22 10:52) [116]

Александр Иванов ©   (22.11.06 10:31) [113]
Те же утечки

Тыкни пальцем где? Все что локально создал при Excep уничтожил - все что происходит с Task после успешного Self.TaskManager.AddTask(Task) мне не интересно: теперь TaskManager за него в ответе, а это уже другая история.


 
SlymRO   (2006-11-22 11:07) [117]

Удалено модератором


 
Anatoly Podgoretsky ©   (2006-11-22 11:11) [118]


> SlymRO   (22.11.06 04:20) [105]


>AddTask EOutOfMemory или еще какайнить ботва: TTask.Create потерян :( а его не мешалобы Free


 
Anatoly Podgoretsky ©   (2006-11-22 11:18) [119]

Удалено модератором
Примечание: Выражения выбираем


 
Anatoly Podgoretsky ©   (2006-11-22 11:20) [120]

> SlymRO   (22.11.06 10:52) [116]

Где Free за который ты ратуешь?

except
  result:=false;
end;



Страницы: 1 2 3 4 5 вся ветка

Текущий архив: 2006.12.17;
Скачать: CL | DM;

Наверх




Память: 0.69 MB
Время: 0.039 c
9-1140205350
ZeFiR
2006-02-17 22:42
2006.12.17
вопрос по... змейке)))


2-1164688018
Syrym
2006-11-28 07:26
2006.12.17
что то связано с распечатко вложенной таблицы


2-1164618841
alex810
2006-11-27 12:14
2006.12.17
DBVhart


15-1164446738
Vovan#2
2006-11-25 12:25
2006.12.17
Если игрушки виснут.


3-1160398023
Guest10
2006-10-09 16:47
2006.12.17
Замедление работы сервера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский