Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.043 c
2-1190789260
yuray
2007-09-26 10:47
2007.10.21
Кто создал экземпляр класса?


15-1190403271
korneley
2007-09-21 23:34
2007.10.21
Отсутствуют "Последние 10 сообщений на форумах"


11-1160470373
Grademax
2006-10-10 12:52
2007.10.21
Как в KOL (без MCK) создать глобальную горячую клавишу


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


6-1172154994
vlad_55
2007-02-22 17:36
2007.10.21
HTML-формы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский