Текущий архив: 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