Главная страница
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.7 MB
Время: 0.058 c
2-1164696665
from AF
2006-11-28 09:51
2006.12.17
ExcelApplication и форма


15-1164552740
ShellX
2006-11-26 17:52
2006.12.17
Интересная задачка


15-1164371947
RomanH
2006-11-24 15:39
2006.12.17
Прогнозирование спроса


15-1164380325
ArtemESC
2006-11-24 17:58
2006.12.17
Очки - зло...


9-1140419696
VK
2006-02-20 10:14
2006.12.17
DelphiX на разных машинах - полупрозрачность и скорость