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

Вниз

Комментируете ли вы свои сорцы   Найти похожие ветки 

 
DrPass ©   (2006-10-28 01:00) [40]


> Суслик ©   (28.10.06 00:56) [38]

Два замечания:
а) Во-первых, не надо обижаться про "зарывание таланта", т.к. это абсолютно безобидная шутка. А на обиженных еще и воду возят.
б) Во-вторых, где ты в модулях VCL видел комментарии 8-)? И несмотря на их практически полное отсутствие, это не мешает замечательно читать исходники VCL


 
Суслик ©   (2006-10-28 01:02) [41]


> Ketmar ©   (28.10.06 00:58) [39]
> >[38] Суслик(c) 28-Oct-2006, 00:56
> сколько читал генофонд -- вполне понимал. потому что написан
> вполне вменяемо и приятно.

блин, ну вы тут гении все :)
почитай grids.pas.
если через месяц ты сможешь мне объяснить как там все написано - пиво с меня.
я то знаю, но я его и переписал весь под себя (более ужасного исходника + отсутствие комментов я в жизни не видел).

вот прямо и не знаю, хочется тыкнуть тебя куданить в этом исхонике, чтобы ты часиков на энцать задумался (а был бы коммент, проще было бы) - да лень. ибо пустое это.


 
Суслик ©   (2006-10-28 01:05) [42]

блин, с начала весны не втягивался в пустые разговоры - а тут на те, втянулся :)


 
DrPass ©   (2006-10-28 01:06) [43]


> Суслик ©   (28.10.06 01:02) [41]

Ну, гении-негении, но VCL все равно читается легко. Я, например, делал своих наследников TDataSet - для этого мне понадобилось просто почитать сурцы других датасетов. С гридами, если возникали вопросы по их поведению, тоже обращался к первоисточнику... пока что живой, и вопросы тоже решены :)


 
DrPass ©   (2006-10-28 01:07) [44]


> Суслик ©   (28.10.06 01:05) [42]

Это не пустые, это традиционный спор инженеров :)


 
Суслик ©   (2006-10-28 01:11) [45]


> DrPass ©   (28.10.06 01:06) [43]

о блин, за инженера меня уже принял. :)
По итогам обсуждения (спать уже пора) скажу тебе так. Разрабатывая код нужно понимать целевую аудиторию. Именно на нее приходится ориентироваться. Если ты сам в основном будешь поддерживать и развивать этот код, то нужно писать комменты под себя. Если будет писать кто-то другой, то нужно делать так, чтобы было понятно ему.


 
DrPass ©   (2006-10-28 01:13) [46]


> о блин, за инженера меня уже принял.

А кто? Программист (даже с лирическими наклонностями) - это разновидность обычного инженера. Ладно, спокойной ночи :)


 
Суслик ©   (2006-10-28 01:19) [47]

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


 
Суслик ©   (2006-10-28 01:29) [48]


> DrPass ©   (28.10.06 01:13) [46]

а) раз ты однозначно программист и б) дабы получить практическую пользу от разговора объясни мне, пожалуйста, функционал метода (это из grids.pas - версия дельфи: 2006)

procedure TInplaceEdit.Invalidate;
var
 Cur: TRect;
begin
 ValidateRect(Handle, nil);
 InvalidateRect(Handle, nil, True);
 Windows.GetClientRect(Handle, Cur);
 MapWindowPoints(Handle, Grid.Handle, Cur, 2);
 ValidateRect(Grid.Handle, @Cur);
 InvalidateRect(Grid.Handle, @Cur, False);
end;


 
DrPass ©   (2006-10-28 01:40) [49]


> Суслик ©   (28.10.06 01:29) [48]

Вызываем перерисовку для "редактора" ячейки, потом получаем его размеры и вычисляем его положение на гриде, и перерисовываем этот участок грида. Это же чистый WinAPI. Его тоже нужно каментами снабжать - дескать, это у нас получить DC, это у нас открыть файл? Или все-таки не стоит MSDN Library копировать в код?


 
Суслик ©   (2006-10-28 01:47) [50]


> DrPass ©   (28.10.06 01:40) [49]

все бы хорошо, но ты же не прав :)
ничего мы не перересовываем, мы только говорим, что нужно перерисовать при следующем WM_PAINT :) Спорить не буду (и цитировать не буду), почитай внимательно про ValidateRect и InvalidateRect.

(читай дальше, когда прочтешь msdn)
Ты можешь здесь без комментов понять, зачем сначала
ValidateRect(Handle, nil);
затем
InvalidateRect(Handle, nil, True);
?
Я нет.


 
Суслик ©   (2006-10-28 02:10) [51]


> DrPass ©   (28.10.06 01:40) [49]

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


 
Ketmar ©   (2006-10-28 03:34) [52]

>[41] Суслик(c) 28-Oct-2006, 01:02
>почитай grids.pas.
вот это -- не читал.

>вот прямо и не знаю, хочется тыкнуть тебя куданить в этом исхонике
а где я написал, что читал весь генофонд? %-)

>[51] Суслик(c) 28-Oct-2006, 02:10
>Понимаешь ли, здесь может быть зарыт глубочайший смысл,
>коего я не понимаю.
сонный я вижу смысл в "недроблении" области прорисовки. дурацкий, правда. %-)
есть подозрение на рудименты 9x. %-)


 
Чапаев ©   (2006-10-28 09:28) [53]

> >А если серьезно - читателю кода будет абсолютно неважно,
> >каким был твой мыслительный процесс и творческие озарения.
> зато самому потом интересно читать.

Эт лучше дневничок завести... Можно даже livejournal... ;-)


> почитай grids.pas.
> если через месяц ты сможешь мне объяснить как там все написано
> - пиво с меня.
Тю. Помнится, творил своего наследника TDbGrid. Перелопатил Grids & DbGrids. Заработало и без глубокого понимания "как там всё написано". ;-)


> Я, например, делал своих наследников TDataSet - для этого
> мне понадобилось просто почитать сурцы других датасетов.
Я, помнится, в подобной ситуации из демок TTextTable развивал до требуемой функциональности...


 
TUser ©   (2006-10-28 09:53) [54]

Обычно значки свои ставлю в качестве комментариев

// :)
// :(
{!}

и т.д. Мне их смысл понятен.


 
boriskb ©   (2006-10-28 10:05) [55]

Я учился на трудах Дейкстры
Например
http://blackbox.metasystems.ru/index.php?option=com_content&task=view&id=69&Itemid=15
и более ранних книгах

Поэтому всю жизнь комментировал.
Только надо помнить о пословице
"Заставь дурака богу молиться..."
:)


 
boriskb ©   (2006-10-28 10:20) [56]

Не знакомым со стилем Дейкстры рекомендую его знаменитую притчу
http://2lib.ru/book/win/3586.html

Она не большая.


 
Чапаев ©   (2006-10-28 10:31) [57]

> [56] boriskb ©   (28.10.06 10:20)
"Я рассказывал эту историю разным людям. Программистам, как правило, она нравилась, а их начальники обычно сердились все больше и больше по мере ее развития. Hастоящие математики, однако, не могли понять, в чем соль. "

Класс! ;-)


 
Суслик ©   (2006-10-28 10:50) [58]


> Ketmar ©   (28.10.06 03:34) [52]
> сонный я вижу смысл в "недроблении" области прорисовки.
> дурацкий, правда. %-)
> есть подозрение на рудименты 9x. %-)


у меня тоже есть разные подозрения.
почему бы в этом случае авторам коммент не написать?


 
DrPass ©   (2006-10-28 12:42) [59]


> Суслик ©  

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


 
Суслик ©   (2006-10-28 12:49) [60]


> DrPass ©   (28.10.06 12:42) [59]

смотря какой грид ты хочешь сделать.
у меня два немаленьких проекта.
поигравшись с наследованием в обоих я в итоге пришел к решению писать свой по мотивам - т.е. взял grid, выкинул то, что лишнее (для меня) добавил то, чего не хватает.
сам понимаешь, что при таком подходе надо хоршо понимать, что в гриде творится.


 
Real ©   (2006-10-28 12:50) [61]


> DrPass ©   (28.10.06 00:27) [25]


Приведенный пример с утрированным комментом, я бы оформил так:

var
  RecordCount: integer;
begin
  // Сохраняем записи грида в файл
  FillDataFromGrid(Records);
  RecordCount:= CalcRecordsCount(Records);
  SaveToFile(Records, RecordCount);
end;


В последствии, просматривая код - достаточно прочитать одну строку комментария, чтобы узнать (не понять!) что делает этот блок. Никто не говорит что избыточные комментарии это хорошо. Но также плохо - полное их отсутствие. В любом деле нужно иметь чувство меры.


 
Anatoly Podgoretsky ©   (2006-10-28 12:51) [62]

А за инженера ответишь :-)


 
Джо ©   (2006-10-28 12:56) [63]

> [61] Real ©   (28.10.06 12:50)
>
> > DrPass ©   (28.10.06 00:27) [25]
>
>
> Приведенный пример с утрированным комментом, я бы оформил
> так:
>
> var
>  RecordCount: integer;
> begin
>  // Сохраняем записи грида в файл
>  FillDataFromGrid(Records);
>  RecordCount:= CalcRecordsCount(Records);
>  SaveToFile(Records, RecordCount);
> end;
>
> В последствии, просматривая код - достаточно прочитать одну
> строку комментария, чтобы узнать (не понять!) что делает
> этот блок. Никто не говорит что избыточные комментарии это
> хорошо. Но также плохо - полное их отсутствие. В любом деле
> нужно иметь чувство меры.

Подобный комментарий можно спокойно выкинуть и назвать метод SaveGridRecords. И не нужно комментария.


 
Real ©   (2006-10-28 13:07) [64]


> Подобный комментарий можно спокойно выкинуть и назвать метод
> SaveGridRecords. И не нужно комментария.

Можно и так. Но дисскусия идет ведь не о хорошем тоне в наименовании сущностей, а комментировании. И потом, комментарий все таки выделяется в коде намного явственней чем имя процедуры. Согласен, такой комментарий, особенно учитывая размер процедуры вроде и не нужен, но тут больше дело принципа: если начать в каких то случаях комментировать, а в каких то нет - то рано или поздно комментариев будет становится все меньше и меньше. Я стараюсь не поощрять в себе тенденцию избегать комментарии где они вроде и не сильно нужны, чтобы придерживаться единого стиля всегда. Из тех же соображений - я никогда не оставляю имена типа Button1, Button2 и т.д. даже если этот бутон вызывает какое нить окошко с About :)

P.S. Разве что с TLabel исключение :) Их всегда оставляю как Label1, ну может кроме случаев когда на них висит обработчик


 
Суслик ©   (2006-10-28 13:12) [65]

О ужас, я в последнее время стал вообще локальные переменные называть A, B, C и т.д. (в некоторых случаях есно).
Иногда суть переменно не описывается и 30 символами.
Иногда легче назвать коротко и привести описание.


 
Anatoly Podgoretsky ©   (2006-10-28 13:18) [66]


> но тут больше дело принципа: если начать в каких то случаях
> комментировать, а в каких то нет - то рано или поздно комментариев
> будет становится все меньше и меньше. Я стараюсь не поощрять
> в себе тенденцию избегать комментарии где они вроде и не
> сильно нужны, чтобы придерживаться единого стиля всегда.
>  Из тех же соображений - я никогда не оставляю имена типа
> Button1, Button2 и т.д. даже если этот бутон вызывает какое
> нить окошко с About :)
>
> P.S. Разве что с TLabel исключение :) Их всегда оставляю
> как Label1, ну может кроме случаев когда на них висит обработчик

А как же с принципами, сначала TLabel, потом смотришь, все больше и больше всяких XXX1
Принципы дело такое не укоснительно, иначе какие же оны принципы, только психологическая отговорка.


 
VirEx ©   (2006-10-28 13:59) [67]


>  [48] Суслик ©   (28.10.06 01:29)
> procedure TInplaceEdit.Invalidate;
> var
>  Cur: TRect;
> begin
>  ValidateRect(Handle, nil);
>  InvalidateRect(Handle, nil, True);
>  Windows.GetClientRect(Handle, Cur);
>  MapWindowPoints(Handle, Grid.Handle, Cur, 2);
>  ValidateRect(Grid.Handle, @Cur);
>  InvalidateRect(Grid.Handle, @Cur, False);
> end;

а что тут непонятного? зачем повторение кода?
я конечно не программист но видно же, что сначало прорисовка главного окна, затем вычисление области прорисовки для клиента и сама прорисовка клиентка (ячейки)


 
Суслик ©   (2006-10-28 14:17) [68]


> VirEx ©   (28.10.06 13:59) [67]

согласно msdn тут прорисовки нет.  тут есть только обозначение областей, которые нужно прорисовать.

зачем сначала убирать регион из области прорисовки
ValidateRect(Handle, nil);
а затем добавлять
InvalidateRect(Handle, nil, True);

причем в обоих случаях регион одинаков - клиентский размер.


 
Ketmar ©   (2006-10-28 14:29) [69]

>[53] Чапаев(c) 28-Oct-2006, 09:28
>Эт лучше дневничок завести... Можно даже livejournal... ;-)
в жыжу я другим какаю. %-)
а мысли у меня часто в hostory.txt лежат. часто даже к проекту мало относящиеся. %-) недавно перечитывал history.txt от одной своей программы. нашёл фразу: "квадратная голова далеко не укатится". долго думал.

>[65] Суслик(c) 28-Oct-2006, 13:12
>локальные переменные называть A, B, C и т.д.
это нормально. за годы вырабатывается привычка именовать определённые переменные определённым образом. у меня вот есть старая привычка именовать переменные циклов как "f", "c", "z" (вместо обычных "i", "j", "k"). со Спекки осталась -- там "for" набиралось одним нажатием кнопочки "f". ну и -- не будешь же до "i" потом тянуться? %-) остальные тоже рядом. и ты пы.
кстати, привычка глупая, но приставучая. если правлю чужой код -- сначала все "i", "j", ... переименовываю "под себя". %-)


 
Real ©   (2006-10-28 15:51) [70]


> А как же с принципами, сначала TLabel, потом смотришь, все
> больше и больше всяких XXX1
> Принципы дело такое не укоснительно, иначе какие же оны
> принципы, только психологическая отговорка.


Согласен на все сто :) И сначала старался именно так и поступать. Но потом отказался по той причине, что незачем переименовывать то, что по большому счету имеет отношение только к интерфейсу, а не к коду. А если лэйбл учавствует в коде - то обязательно переименовываю.


 
Mystic ©   (2006-10-28 16:54) [71]

Лично я коментарии ставлю редко. И сам не люблю, когда операторы испещрены комментариями (за исключением ряда стандартных меток). Лучше пусть совсем не будет коментариев, чем будут плохие. Но в ряде случаев коментарии к месту:

// Для определения точек разрыва длинной строки (верстка абзаца) решаем задачу динамического программирования (см. Software Practice and Expirience 11 (1981), 1119-1184)

type
 TNelderOption = record
   Size: Cardinal; // Размер структуры (обязательно)
   Flags: Cardinal; // Флаги (обязательно)
   Func: TMathFunction; // Функция (обязательно)
   N: Integer; // Размерность (обязательно)
   X0: PExtended; // Указатель на начальную точку (обязательно)
   X: PExtended; // Указатель куда записывать результат (обязательно, может совпадать с X0)
   Eps: Extended; // Точность (опция FIND_MIN_USE_EPS)
   Delta: Extended; // Способ проверки (опция FIND_MIN_USE_DELTA)
   R: Extended; // Расстояние между вершинами симплекса (опция FIND_MIN_USE_R)
   Mode: Integer; // Метод решения (опция FIND_MIN_USE_MODE)
   Alpha: Extended; // Коэффициент отражения (опция FIND_MIN_USE_ALPHA)
   Beta: Extended; // Коэффициент сжатия (опция FIND_MIN_USE_BETA)
   Gamma: Extended; // Коэффициент растяжения (опция FIND_MIN_USE_GAMMA)
 end;

 ; ===========================================================
 ; Чтение EXE-файла
 ; ===========================================================
@@ReadLoop:
; Читаем кластер
 PUSH AX
 CALL ReadCluster

; Коррекция на переполнение
 MOV AX, ES
 MOV CL, 4
 SHR BX, CL
 ADD AX, BX
 MOV ES, AX
 XOR BX, BX
 POP AX

; Находим следующий кластер
 MOV DI, AX
 SHR DI, 1
 PUSHF
 ADD DI, AX
 ADD DI, OFFSET FAT_TABLE
 MOV AX, [WORD DS:DI]
 POPF
 JC @@OddCluster
 AND AH, 0Fh
 JMP @@FindComplete
@@OddCluster:
 MOV CL, 4
 SHR AX, CL
@@FindComplete:
 
 CMP AX, 0FF8h
 JL  @@ReadLoop
 POP DX
 MOV DS, DX
 ; На текущий момент:
 ; CS [=0]
 ; ES:BX = Конец прочитанного EXE-файла
 ; CS:SI = SkipIP (поскольку идет сразу за ExeName)
 ; DS, DX =  Сегмент, начало заголовка EXE-файл
 ; AX, CX, DI = ?
 ; BP = первой сектор второго кластера
 ; ===========================================================


 
VirEx ©   (2006-10-28 17:37) [72]


>  [68] Суслик ©   (28.10.06 14:17)
>
> > VirEx ©   (28.10.06 13:59) [67]
>
> согласно msdn тут прорисовки нет.  тут есть только обозначение
> областей, которые нужно прорисовать.
>
> зачем сначала убирать регион из области прорисовки
> ValidateRect(Handle, nil);
> а затем добавлять
> InvalidateRect(Handle, nil, True);
>
> причем в обоих случаях регион одинаков - клиентский размер.

одинаковый?
ValidateRect(Handle, nil);
ValidateRect(Grid.Handle, @Cur);


 
Суслик ©   (2006-10-28 18:58) [73]


> VirEx ©   (28.10.06 17:37) [72]

речь была про первые две строки, т.е. про

ValidateRect(Handle, nil);
InvalidateRect(Handle, nil, True);


 
vidiv ©   (2006-10-28 19:09) [74]

Очень редко...
обычно чтонить вроде того

// ОСТАНОВИЛСЯ ТУТ!!!!

или

// НЕ РАБОТАЕТ СОРТИРОВКА, ПРОВЕРИТЬ

и иногда в интерфейсах примерно так:

TDiscipline = class(TAdaptedObject)
private
FName:String;
FBalls:integer; // -1 если просто строка
FHoursCount:Integer;
...
end;


 
DiamondShark ©   (2006-10-28 19:32) [75]


> Позвольте предположить, что вам просто лень писать комменты

Не лень, а жаба.
Практически любой ЯВУ довольно информативная и человекочитаемая вещь. Зачем тратить время на лишнюю работу? Лучше это время потратить на обдумывание как бы написать такой код, чтобы вообще не возникало необходимости его потом читать.


 
Desdechado ©   (2006-10-28 19:49) [76]

Я комментирую. Обычно логические блоки внутри процедур разделяю комментариями. Если где есть хитрость или применяется редко используемый мной метод, то и это комментирую отдельно.
В каждом модуле обязательная шапка с описанием, чего он делает и содержит.
Это част помогает при необходимости вернуться к коду для доработок.
Или помнишь, что как-то такую задачу решал, но как  - не помнишь. Делаем поиск по сырцам ключевого слова и находим. Очень удобно.
Особенно если код не шаблонный (а у меня много кода в самых разных областях, ну не люблю я рутиной одинаковой маяться).



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

Форум: "Прочее";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.64 MB
Время: 0.048 c
15-1162145285
ArtemESC
2006-10-29 21:08
2006.11.19
Серенада солнечной долины...


15-1162375517
pasha_golub
2006-11-01 13:05
2006.11.19
Стоимость дизайна для програм


15-1162385746
davinchi
2006-11-01 15:55
2006.11.19
Подскажите где найти прогу для проектирования Visual UML 2.7.2


15-1162462150
MsGuns
2006-11-02 13:09
2006.11.19
Приобретение лецензии на Delphi 7


6-1149692838
RainKM
2006-06-07 19:07
2006.11.19
Сканер сети





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