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

Вниз

Плохой код   Найти похожие ветки 

 
vasIZmax ©   (2007-09-23 22:19) [0]

Часто задая вопрос в "Начинающих" привожу кусок кода, где возникает проблема либо не понятность.
И часто в ответах мелькает строка (да и многих это касается): "Плохой код... Перепиши код...", при чем без объяснения чем конкретно он плох, за редким исключением получаешь объяснение.
Так то оно так, да вот задумался: для html (как ЯП) есть сайты где можно проверить код (валидизация что ли если правильно называть?).
А для дельфийского нет такого случаем? Запостил туда "плохой" код, а тебе указывают в чем не правильность и т.д. и т.п.


 
sdubaruhnul   (2007-09-23 22:24) [1]

>vasIZmax ©   (23.09.07 22:19)

Разные вещи. Валидация кода языка программирования равносильна компиляции или хотя бы syntax check.


 
palva ©   (2007-09-23 22:30) [2]

Плохой код, например когда begin и соответствующий ему end начинаются с разных позиций. В таком коде не сразу разберешься. Поэтому люди вам и говорят: "Вот если бы ваш код был бы хорошим, у меня, возможно, и возникло бы желание разобраться и ответить на вопрос. А данный код мне просто лень разгребать..."


 
Юрий Зотов ©   (2007-09-23 22:31) [3]

> vasIZmax ©   (23.09.07 22:19)

Для этого придется написать ИИ, достойный Нобелевской премии.


 
Turbouser ©   (2007-09-23 22:34) [4]

> [0] vasIZmax ©   (23.09.07 22:19)

Код можно по разным причинам назвать плохим —
например форматирование, стиль. Зачастую сразу
бывает видно, что код написан «как-нибудь, лишь бы работало».
Проверить — есть CodeHealer но он глючный (или мне такой попался?)
Идет в нагрузку к delphi — можно забрать с codegear.


 
homm ©   (2007-09-23 22:34) [5]

> [0] vasIZmax ©   (23.09.07 22:19)
> А для дельфийского нет такого случаем? Запостил туда "плохой"
> код, а тебе указывают в чем не правильность и т.д. и т.п.

Компилятор?


 
vasIZmax ©   (2007-09-23 22:40) [6]

> sdubaruhnul   (23.09.07 22:24) [1]

ну, думаю Вы поняли о чем речь:-)


> palva ©   (23.09.07 22:30) [2]

Возможно, что этому отводится столь значимая роль при ответах. Мне хоть отступ, хоть не отступ - ||.
Но когда пишут
if <...> then begin
<..>
end;

Трудно воспринимается:). Я то привык
if <...> then
begin
<..>
end;

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


> Юрий Зотов ©

А не преувеличиваете ли Вы?)


 
sdubaruhnul   (2007-09-23 22:49) [7]

Предлагаю не путать понятия "плохой код" и "плохое оформление кода".


 
palva ©   (2007-09-23 22:53) [8]

> Трудно воспринимается:). Я то привык
Я тоже привык так писать. Наверно, я неудачно выбрал пример. Я хотел сказать, что требования примерно такого сорта.


 
palva ©   (2007-09-23 22:55) [9]


> sdubaruhnul   (23.09.07 22:49) [7]
> Предлагаю не путать понятия "плохой код" и "плохое оформление
> кода".

Я бы рад не путать, если бы вы прояснили вопрос. У вас, наверно, есть иная версия, что такое плохой код? Лично мне больше  ничего в голову не приходит.


 
Efir ©   (2007-09-23 22:55) [10]


> Но когда пишут
> if <...> then begin
> <..>
> end;
> Трудно воспринимается:). Я то привык
> if <...> then
> begin
> <..>
> end;


Кому как. По мне, так первый вариант удобней.


 
vasIZmax ©   (2007-09-23 23:02) [11]

> sdubaruhnul   (23.09.07 22:49) [7]

Хорошо давайте разделим эти два понятия.

> palva ©   (23.09.07 22:55) [9]

Имхо, пример плохого (в тоже время не рационального кода)
for i:=1 to 5 do
if i=1 then
<...>
else
if i=2 then
<..>
...
else
<..>;

и обратный пример
for i:=1 to 5 do
case i of
1:<...>;
2:<...>;
...
5:<..>;

Второй вариант предпочтительнее? Или я ошибаюсь?


 
sdubaruhnul   (2007-09-23 23:09) [12]

>Я бы рад не путать, если бы вы прояснили вопрос. У вас, наверно, есть иная версия, что такое плохой код? Лично мне больше  ничего в голову не приходит.

Мой пример плохого кода:


if IsVisible = True then
 for MyString := 1 to 5 do
   ...


 
Суслик ©   (2007-09-23 23:11) [13]

зачастую плохой код работает годами и выполняет свою функцию.
к тому же для его написания потребовались 10 "китайцев" по $1500 штука и один опытный манагер за $2000, а не 5 спецов за $2500 и запредельный манагер за $4000 чтобы этих спецов мирить и напрявлять их в нужное русло.

2автар.
если хочешь понять, что такое хороший код изучай чужой код, который себя зарекоментдовал. например, vcl (не только GUI, но и всякие невизуальные классы). не скажу, что это для меня образчик кода, но идейность в нем есть. на этом можно учиться.

поизучай код на чуждом тебе языке. посмотри в торону java, например. зачастую там выше уровень написания кода, чем в дельфи. хотя тоже не всегда. но java - это скорее изложение идеи и формление кода, ибо здесь нет низкоуровневых вещей.

если хочеца понять, как писать хороший низкоуровневый (ну или среднеуровневый :)) код, то смотри в торону книг по winapi. можно linux захватить.

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

подведу итог
опыт - сын ошибок трудных (с)


 
Юрий Зотов ©   (2007-09-23 23:15) [14]

> vasIZmax ©   (23.09.07 22:40) [6]

> А не преувеличиваете ли Вы?

А давайте проверим. Вот этот код я назвал безобразным:

procedure TForm1.Button1Click(Sender: TObject);
var
 si: STARTUPINFO;
 pi: PROCESS_INFORMATION;
 WinDir: array[0..MAX_PATH] of Char;
begin
 ZeroMemory(@si, SizeOf(si));
 ZeroMemory(@pi, SizeOf(pi));
 si.cb := SizeOf(si);
 si.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEOFFFEEDBACK;
 si.wShowWindow := SW_SHOWNORMAL;
 if GetWindowsDirectory(WinDir,SizeOf(WinDir)) > 0 then
   if CreateProcess(PChar(WinDir + "\notepad.exe"), "c:\New_text_file.txt", nil,     nil, False, 0, nil, nil, si, pi) then
     ShowMessage(IntToStr(Integer(CloseHandle(pi.hProcess))));  
end;

обосновав это тем, что в нем много лишнего, имеется утечка ресурсов и нет диагностики ошибок.

Теперь скажите - программа, уверенно определяющая в этом коде лишние операции, утечку ресурсов, нужность диагностики ошибок и ее отсутствие - достойна такая программа называться ИИ, или нет?


 
Суслик ©   (2007-09-23 23:54) [15]

Го, го ЮЗИИ!!!
посмотришь мой код (только там 1млн строк!!!)?

:)


 
Суслик ©   (2007-09-24 00:05) [16]

2автор.

По поводу хорошего кода.
Мое и не имхо таково - хороший код, это тот код, который:
а. Показывает хорошее знание используемого языка.
б. Показывает хорошее знание используемой библиотеки.

За личиной общих слов я скрываю следующее - хорошее знание выдается тем, что ты не делаешь лишнего. Если не надо pi обнулять нулями, то не надо.

ЗЫ Здесь есть одно отступление. Если ты юзаешь инструмент или библиотеку с плохой документацией, то в твоем праве перестраховываться. Например, обнулять ненужное и вызывать лишнее. Но такой интструмент, как winapi точно не требует лишнего. Чего не скажешь о дельфи :)


 
Юрий Зотов ©   (2007-09-24 00:07) [17]

> Суслик ©   (23.09.07 23:54) [15]

Одна строка - один цент. Идет?

PS
Соглашайся, это демпинговая цена.


 
Efir ©   (2007-09-24 00:07) [18]


> Го, го ЮЗИИ!!!
> посмотришь мой код (только там 1млн строк!!!)?


Всего то :)


 
Суслик ©   (2007-09-24 00:10) [19]

думаю

(шепотом, где мой абфускатор....думаю, что строк до 100тыс сокращу. итак 100000 / 100 = $1000... много, зачем Юрке такие деньги?)

не торопи меня, я думаю!

(опять шепотом, не сам допишу абфускатор ... до 50000 сокращу)

согласен $500!


 
Суслик ©   (2007-09-24 00:11) [20]


> Efir ©   (24.09.07 00:07) [18]
> Всего то :)


зато какие - каждая слиток золотой!


 
Юрий Зотов ©   (2007-09-24 00:24) [21]

> Суслик ©   (24.09.07 00:10) [19]

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


 
Игорь Шевченко ©   (2007-09-24 10:04) [22]


> А для дельфийского нет такого случаем? Запостил туда "плохой"
> код, а тебе указывают в чем не правильность и т.д. и т.п.
>


Есть. http://www.delphimaster.ru/cgi-bin/forum.pl?n=18


 
Lamer@fools.ua ©   (2007-09-24 11:22) [23]

>>Юрий Зотов ©   (23.09.07 22:31) [3]

Тогда процентов 30 премии можно уже отдать, скажем Microsoft"у за FxCop aka Code Analysis плюс пункт меню Edit | Advanced | Format Document в MSVS :-)


 
Вася Правильный   (2007-09-24 11:30) [24]


> Игорь Шевченко ©   (24.09.07 10:04) [22]

шютник



Страницы: 1 вся ветка

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

Наверх




Память: 0.53 MB
Время: 0.023 c
15-1190265156
vrem
2007-09-20 09:12
2007.10.21
что бы в досе не гудел!


3-1181827882
hprx
2007-06-14 17:31
2007.10.21
Копирование данных


2-1190381870
mike_zav
2007-09-21 17:37
2007.10.21
FreeAndNil


15-1190563918
Каисса
2007-09-23 20:11
2007.10.21
Сложение в каноническом Си...


10-1138264598
sam98
2006-01-26 11:36
2007.10.21
OPC клиент (передача серверу нескольких значений переменных)