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

Вниз

Оцените код 2   Найти похожие ветки 

 
@!!ex ©   (2007-11-23 13:48) [0]

Собственно по моему коду все уже опнятно, занимаюсь исправлением идиотских мест.
Интересно было бы услышать комменты по этому коду:
procedure delet (var l:spisok; m: string);
var a,b : spisok;
begin  bl:=false;
if l<>nil then begin
 if l^.info=m then begin
   a:=l;
   l:=l^.next; bl:=true;
   dispose(a);
    end
   else begin
   b:=l;
   while (bl=false) and (b^.next<>nil) do begin
     if b^.next^.info=m then begin
     a:=b^.next;
     b^.next:=a^.next; bl:=true;
     dispose(a);
     end
     else
     b:=b^.next;
   end;
 end;
end;
end;


 
turbouser ©   (2007-11-23 13:56) [1]

1) a,b,l,m,bl - дать адекватные имена
2) begin  bl:=false; разнести на 2 строчки
3) if l<>nil then begin  if l^.info=m then begin можно и в одну строку сделать


 
Котик Б   (2007-11-23 14:04) [2]

Я так понимаю в лице Мастеров Delphi Вы нашли бесплатный рефакторинг ?


 
homm ©   (2007-11-23 14:04) [3]

> [1] turbouser ©   (23.11.07 13:56)
> if l<>nil then begin  if l^.info=m then begin можно и в
> одну строку сделать

А лучше не делать


> if l<>nil then begin
> if l^.info=m then begin

Не желей пробелов
if l <> nil then begin
if l^.info = m then begin


Что такое spisok? Это указатель? Плохое имя для указателя. PSpisok.
Зачем var l, если это и так указтель? Если хочеш вернуть значение, сделай функцию. А то хорошо плучается, передал список, указал удалить  и он невалидный стал.


 
Zeqfreed ©   (2007-11-23 14:08) [4]

procedure Delete(var list : PMyList; m : String);
var
   tmp, node : PMyList;
begin
   bl := false;  //Глобальная переменная с таким говорящим названием?
   if not Assigned(list) then Exit;
                               
   node := list;
   while Assigned(node^.next) and (node^.next^.info <> m) do
       node := node^.next;
                           
   if Assigned(node^.next) and (node^.next^.info = m) then begin
       tmp := node^.next^;
       node^.next := tmp^.next;
       Dispose(tmp);
       bl := true;
   end;
end;


Примерно так я бы написал.


 
homm ©   (2007-11-23 14:11) [5]

> [4] Zeqfreed ©   (23.11.07 14:08)
> var list

Вар можно убрать теперь :)


 
Zeqfreed ©   (2007-11-23 14:11) [6]

> homm ©   (23.11.07 14:11) [5]

Даже нужно :)


 
@!!ex ©   (2007-11-23 14:12) [7]

> [2] Котик Б   (23.11.07 14:04)

1) Это не мой код.
2) Мне код не рефакторили, а указывали на неправильные места, если вы внимания не обратили.
3) Вы тут никакого участия не принимаете, чего возмущаетесь?


 
Zeqfreed ©   (2007-11-23 14:15) [8]

И вообще, bl надо убрать и возвращать булев результат из функции.


 
Anatoly Podgoretsky ©   (2007-11-23 14:32) [9]

> @!!ex  (23.11.2007 13:48:00)  [0]

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


 
DrPass ©   (2007-11-23 15:20) [10]

...и еще пора избавляться от дурацкой студенческой привычки писать begin в той же строке, что и предыдущий оператор


 
@!!ex ©   (2007-11-23 15:56) [11]

> [10] DrPass ©   (23.11.07 15:20)

Разве это плохо?
Я наоборот всю жизнб писал на следующей строчке, а в ВУЗе переучили ставить на туже строчку...


 
Anatoly Podgoretsky ©   (2007-11-23 16:02) [12]

> @!!ex  (23.11.2007 15:56:11)  [11]

Не знаю, никогда не видел рекомендаций писать два оператора на одной строке, странный какой то ВУЗ - беги ты оттуда, плохому научат.

>    l:=l^.next; bl:=true;


 
homm ©   (2007-11-23 16:07) [13]

> [10] DrPass ©   (23.11.07 15:20)
> ...и еще пора избавляться от дурацкой студенческой привычки
> писать begin в той же строке, что и предыдущий оператор

Не надо. Незачем раздувать код во вертикали, вставая бессмысленные элементы. Стоит там begin или не вполне видно по следующей строке, если взять за правило всегда ставить перенос строки и деать отступ после begin.


 
@!!ex ©   (2007-11-23 16:16) [14]

> >    l:=l^.next; bl:=true;

Я так не пишу никогда. Это ИМХО очень не читабельно.
А вот против begin на той же строчке не вижу ничего плохого...
Буду благодарен, если расскажите, почему плохо это плохо...


 
DVM ©   (2007-11-23 16:28) [15]


> Не надо. Незачем раздувать код во вертикали, вставая бессмысленные
> элементы.

В VCL везде с новой строки ставят.


 
@!!ex ©   (2007-11-23 16:31) [16]

> [15] DVM ©   (23.11.07 16:28)

И что это значит?


 
J_f_S   (2007-11-23 16:33) [17]


> Не надо. Незачем раздувать код во вертикали, вставая бессмысленные
> элементы. Стоит там begin или не вполне видно по следующей
> строке, если взять за правило всегда ставить перенос строки
> и деать отступ после begin.

Вот экономить на символах перевода строк и пробелах не надо точно. Читаемость текста повышается в разы.


 
clickmaker ©   (2007-11-23 16:35) [18]

C vs Delphi

if (true)
{

}

if true then
begin

end

или

if (true) {

}

if true then begin

end


 
DVM ©   (2007-11-23 16:37) [19]


> @!!ex ©   (23.11.07 16:31) [16]


> И что это значит?

Это значит, что begin ставят с новой строки. Лучше придерживаться традиций.


 
J_f_S   (2007-11-23 16:39) [20]

Не в обиду, но код из 0 действительно напоминает "код" студента из среднестатистического ВУЗа...
Граммитические ошибки в английских словах, транслит (это жесть), экономия на пробелах и переодах строк, несколько опереаторов в одной строке, отсутствие комментариев, имена вспомогательных переменных типа a,b,c...


 
Anatoly Podgoretsky ©   (2007-11-23 16:40) [21]

> @!!ex  (23.11.2007 16:16:14)  [14]

Чего рассказывать то?
Я пишу на одной строке с if что бы получить структуру


if ... then begin
  ..
else begin
  ..
end"

Но могу написать и


if ... then
begin
  ..
end;

Если будут требования, то буду писать по требованиям.


 
@!!ex ©   (2007-11-23 16:40) [22]

> [19] DVM ©   (23.11.07 16:37)

Традиции везде разные.


 
J_f_S   (2007-11-23 16:40) [23]

Граммитические = Грамматические
;)


 
Kolan ©   (2007-11-23 16:41) [24]

> Интересно было бы услышать комменты по этому коду:

Полное гэ. (одно название че стоит), такое лучьше никому не показывать, элеметарные ошибки из прошлой ветки мог бы и исправить&#133


 
DVM ©   (2007-11-23 16:41) [25]


> Традиции везде разные.

это понятно, но, думаю никто не будет против, если твой код будет подражать во всем VCL.


 
@!!ex ©   (2007-11-23 16:43) [26]

Итак. Собственно почему я создал вторую тему с кодом.
Я подрабатываю репетитором информатики. Преподаю в основном всякую начальную ерунду, тем кто совсем не в теме.
После разборов в теме "Оцените код" у меня появились большие сомнения в том, что я имею право кому то что-то преподавать...
Код приведенный в данной теме - написано официальным ПРЕПОДАВАТЕЛЕМ ВУЗа, причем ВУЗа выдающего дипломы международного образца...


 
homm ©   (2007-11-23 16:44) [27]

> [17] J_f_S   (23.11.07 16:33)
> Вот экономить на символах перевода строк и пробелах не надо
> точно. Читаемость текста повышается в разы.

Я не предлагаю экономить, я говорю «не раздувать бесдумно» разница есть.


> [19] DVM ©   (23.11.07 16:37)
> Лучше придерживаться традиций.

Жертвоприношение знаем? тоже лучше?


> [25] DVM ©   (23.11.07 16:41)
> это понятно, но, думаю никто не будет против, если твой
> код будет подражать во всем VCL.

Предлагаю подрожать во всем, кроме этого ;)


 
Германн ©   (2007-11-23 16:45) [28]


> Anatoly Podgoretsky ©   (23.11.07 16:02) [12]

А вот так пишу я:
 adr:=o2;bdc;wrc:=$84;ind2;
 if(scala=1) then begin
   adr:=co*10;adr:=adr div 8;
 end else adr:=co;
 bdc;wrc:=$8f;ind1;
 adr:=co2;bdc;wrc:=$c4;ind2;

:)))


 
DVM ©   (2007-11-23 16:45) [29]


> @!!ex ©   (23.11.07 16:43) [26]

печально


 
Dennis I. Komarov ©   (2007-11-23 16:46) [30]

> [21] Anatoly Podgoretsky ©   (23.11.07 16:40)

+1


 
homm ©   (2007-11-23 16:46) [31]

> [28] Германн ©   (23.11.07 16:45)
> А вот так пишу я:

Это вырезка из скомпилиного экзешника? Нет? А похожа %)


 
Германн ©   (2007-11-23 16:49) [32]


> Это вырезка из скомпилиного экзешника?

Да.


 
DVM ©   (2007-11-23 16:49) [33]


> Германн ©   (23.11.07 16:45) [28]


Так не лучше?

Adr := o2;
Bdc;
Wrc := $84;
Ind2;
if Scala = 1 then
 begin
    Adr := co * 10;
    Adr := Adr div 8;
 end
else
 Adr := co;
Bdc;
Wrc := $8f;
Ind1;
Adr := co2;
Bdc;
Wrc := $c4;
Ind2;


 
DVM ©   (2007-11-23 16:50) [34]


> Это вырезка из скомпилиного экзешника?

это скриншот окна скомпиленного экзешника кверху ногами.


 
Kolan ©   (2007-11-23 16:50) [35]

> Код приведенный в данной теме &#151; написано официальным ПРЕПОДАВАТЕЛЕМ
> ВУЗа, причем ВУЗа выдающего дипломы международного образца&#133

Ну и че, все преподы что я знал так пишут, они не профессионалы, это как семинар Лебедева/Горбунова и пребод по дизайну в универе разница огромна.


 
Германн ©   (2007-11-23 16:58) [36]


> DVM ©   (23.11.07 16:49) [33]
>
>
> > Германн ©   (23.11.07 16:45) [28]
>
>
> Так не лучше?
>

Неа.
А знаешь какая жаба меня душила, когда я делал отступ после в блоке begin end?


 
Anatoly Podgoretsky ©   (2007-11-23 17:00) [37]

> @!!ex  (23.11.2007 16:43:26)  [26]

Международного образца - то есть печать.


 
Anatoly Podgoretsky ©   (2007-11-23 17:01) [38]

> Германн  (23.11.2007 16:45:28)  [28]

Жалко, столько строчек испортил, не мог обойтись одной?


 
Германн ©   (2007-11-23 17:04) [39]


> Anatoly Podgoretsky ©   (23.11.07 17:01) [38]

Не мог. Все-таки хоть как-то нужно это читать.
:-)
Но мой вариант таки на 30 лучше, чем вариант [33].


 
Anatoly Podgoretsky ©   (2007-11-23 19:05) [40]

> Германн  (23.11.2007 16:58:36)  [36]

Пробелы было жалко?


 
Германн ©   (2007-11-23 19:08) [41]


> Anatoly Podgoretsky ©   (23.11.07 19:05) [40]

Нет. Байты было жалко. Компилятор зараза не переваривает pas-файлы более 32К


 
J_f_S   (2007-11-23 19:16) [42]


> Нет. Байты было жалко. Компилятор зараза не переваривает
> pas-файлы более 32К

Это какой-то Паскаль для embedded устройств? :)


 
Германн ©   (2007-11-23 19:20) [43]


> J_f_S   (23.11.07 19:16) [42]

Для 51-го процессора.
:-)


 
Dmitry S(1)   (2007-11-23 20:18) [44]

Блин, после создания собственного c-подобного скрипта со всеми операторами pre-post incremement/decrement, указателями, статементами for, switch и тп, генерации кода, от дельфи блевать охота :) После visual assist для visual net - ставишь { скобку(shift + "["), а тебе сразу ставят "}" с верным переносом на следующей сторке ваш begin-end - просто ха-ха. Бедные убогие дельфисты с комплексом неполноценности. На форуме C++ дельфи не обсуждается, только на вашем форуме поливают грязью с++. Все как в жизни.


 
turbouser ©   (2007-11-23 20:28) [45]


> Dmitry S(1)   (23.11.07 20:18) [44]

Спасибо. Поржал. :))
Пеши исчо.


 
DVM ©   (2007-11-23 20:37) [46]


> После visual assist для visual net - ставишь { скобку(shift
> + "["), а тебе сразу ставят "}" с верным переносом на следующей
> сторке ваш begin-end

Вы давно делфи видели? Поглядите, например, D2007.


> На форуме C++ дельфи не обсуждается, только на вашем форуме
> поливают грязью с++

Там просто никто не знает его. Как показывает практика, программисты на делфи в большинстве своем владеют и си и делфи. Те кто программирует исключительно на си в большинстве своем о делфи вообще не имеют представления. Как они могут чего то сравнивать там.


 
Efir   (2007-11-23 20:55) [47]


> Dmitry S(1)   (23.11.07 20:18) [44]


А что ж ты здесь тогда забыл?


 
@!!ex ©   (2007-11-23 20:56) [48]

> [44] Dmitry S(1)   (23.11.07 20:18)

Ага. Сишники приходят похоливарить сюда. ;)


 
Anatoly Podgoretsky ©   (2007-11-23 20:58) [49]

> @!!ex  (23.11.2007 20:56:48)  [48]

Только плохо у них выходит на нашей площадке.


 
isasa ©   (2007-11-23 21:49) [50]

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


 
@!!ex ©   (2007-11-23 21:51) [51]

> [50] isasa ©   (23.11.07 21:49)

я не понял...


 
isasa ©   (2007-11-23 22:03) [52]

:)
Проехали ...

Качество кода определяется нк названиями переменных и т.д, а качеством использования ресерсов среды, в которой написан код.
Например, длинное наследование, или большое количество потомков - плохо(это с точки зрения MS), или использование оператора case (что меня изумило, добезобразия), много if в завершенном модуле ...


 
Anatoly Podgoretsky ©   (2007-11-23 22:04) [53]

> @!!ex  (23.11.2007 21:51:51)  [51]

Он имел ввиду последние версии Дельфи, там переменные можно называть на родном языке, единственный недостаток регистрозависимо. Можно написать - ДельтаВремени := ...


 
@!!ex ©   (2007-11-23 22:14) [54]

> [53] Anatoly Podgoretsky ©   (23.11.07 22:04)

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


 
isasa ©   (2007-11-23 22:17) [55]

@!!ex ©   (23.11.07 22:14) [54]
абстрактно


 
isasa ©   (2007-11-23 22:19) [56]

Зы. Это, все равно, что обсуждать почерк человека. Ошибки, или нерациональность - обсуждаемы. Остальное - холивар.


 
Anatoly Podgoretsky ©   (2007-11-23 22:20) [57]

> @!!ex  (23.11.2007 22:14:54)  [54]

Перпердикулярно.


 
isasa ©   (2007-11-23 22:24) [58]

Anatoly Podgoretsky ©   (23.11.07 22:20) [57]

Не, нельзя так, меня, в принципе, и первая ветка заинтересовала, но работа, будь она ладна, задрала ...
Боюсь затюкают "доброжелатели" простую душу ... :)


 
Anatoly Podgoretsky ©   (2007-11-23 22:28) [59]

Ну да, можешь таааааааакой холивар разжечь.


 
isasa ©   (2007-11-23 22:30) [60]

Чукча не писатель, чукча читатель ...
ОтписАлся ..


 
Германн ©   (2007-11-24 01:02) [61]


> DrPass ©   (23.11.07 15:20) [10]
>
> ...и еще пора избавляться от дурацкой студенческой привычки
> писать begin в той же строке, что и предыдущий оператор
>

Весьма "апломбное" утверждение. Некогда было днём заниматься архивами, поэтому промолчал. Сейчас время нашел. Не знаю сколько тебе лет, но сей стиль, который ты ругаешь появился очень давно. И не у студентов.
Например именно в этом стиле написана библиотека Turbo Professional. Кто хорошо помнит времена ДОСа и ТР5, тот хорошо знает эту библиотеку. Собственно тот, кто писАл тогда программы на Паскале только её и использовал (если, конечно не был дураком).
Идём дальше. Широко известная и очень популярная (и в добавок очень полезная всем новичкам) RxLibrary тоже использует такой стиль.


> DVM ©   (23.11.07 16:28) [15]
>
>
> > Не надо. Незачем раздувать код во вертикали, вставая бессмысленные
> > элементы.
>
> В VCL везде с новой строки ставят.
>

Не везде. В VCL Д4 есть 5 иных примеров. (Кстати я искал только then begin). В VCL Д6 - 32.
Но действительно - это скорее исключения из правил.


> DVM ©   (23.11.07 16:37) [19]
>
>
> > @!!ex ©   (23.11.07 16:31) [16]
>
>
> > И что это значит?
>
> Это значит, что begin ставят с новой строки. Лучше придерживаться
> традиций.
>

Лично для меня "традиция" - это Turbo Professional, с которого я и начинал.


 
Pavia ©   (2007-11-24 02:16) [62]

Пишу всегда  так

if True then
begin
end;

что бы для begin и end отступы совпадали. Тогда легко отследить где какой блок кончается где начинается следующий блок.


 
Германн ©   (2007-11-24 02:21) [63]


> Pavia ©   (24.11.07 02:16) [62]
>
> Пишу всегда  так
>
> if True then
> begin
> end;
>
> что бы для begin и end отступы совпадали. Тогда легко отследить
> где какой блок кончается где начинается следующий блок.
>

И что?


 
homm ©   (2007-11-24 07:21) [64]

Пишу всегда  так

if True then begin
  Code := Sode;
  inc(Pode);
  Dec(Mode);
end;


что-бы были верные выравнивания текста. Тогда легко отследить где какой блок кончается где начинается следующий блок.

Я что-то не так делаю?


 
Dmitry S ©   (2007-11-24 08:03) [65]

Раньше писал так
if True then begin
 Code := Sode;
 inc(Pode);
 Dec(Mode);
end;

Но с недавнего время пишу всегда так:
if True then
begin
 Code := Sode;
 inc(Pode);
 Dec(Mode);
end;

И вроде как лучше стало:)


 
isasa ©   (2007-11-24 09:12) [66]

Германн ©   (24.11.07 01:02) [61]

:)

Подтверждаю. Вот образец и того кода.
По качеству продукта видно, что писали серъезные дядьки и тетки.


{*********************************************************}
{*                     TPCMD.PAS 5.05                    *}
{*        Copyright (c) TurboPower Software 1987.        *}
{* Portions copyright (c) Sunny Hill Software 1985, 1986 *}
{*     and used under license to TurboPower Software     *}
{*                 All rights reserved.                  *}
{*********************************************************}

unit TpCmd;
 {-Convert keystrokes to commands. This unit is intended primarily for
   internal use.}
...
 function ScanCommands(K : KeyArrayPtr;
                       var CmdBuffer : CmdBuffArray;
                       BufNext : Word;
                       var Cmd : Byte;
                       var FoundAt : Word) : MatchType;
   {-Scan K^ for a match on CmdBuffer}
 var
   BufIndex : Word;
   CmdIndex : Word;
   CmdLen : Byte;
   Matching : Boolean;
 begin
   Cmd := NoCmd;
   CmdIndex := 0;
   CmdLen := K^[CmdIndex];

   {Scan the command list}
   while CmdLen <> 0 do begin
     FoundAt := CmdIndex;
     Inc(CmdIndex);
     BufIndex := 0;
     Matching := True;
     while Matching and (BufIndex < BufNext) and (BufIndex < CmdLen-1) do
       if CmdBuffer[BufIndex] = K^[CmdIndex+BufIndex] then
         Inc(BufIndex)
       else
         Matching := False;
     if not Matching then begin
       {No match, try next command}
       Inc(CmdIndex, CmdLen);
       CmdLen := K^[CmdIndex];
     end else begin
       if BufNext = CmdLen-1 then begin
         {Complete match}
         ScanCommands := FullMatch;
         Cmd := K^[CmdIndex+BufIndex];
       end else
         ScanCommands := PartMatch;
       Exit;
     end;
   end;

   {No match if we get here}
   ScanCommands := NoMatch;
 end;



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

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

Наверх




Память: 0.65 MB
Время: 0.029 c
2-1195904979
PASZLIB
2007-11-24 14:49
2007.12.23
Большие числа


15-1195649726
Черный Шаман
2007-11-21 15:55
2007.12.23
Linux в школы


2-1196307370
TheEd
2007-11-29 06:36
2007.12.23
Как DBGrid отображает несколько записей, не меняя RecNo датасета?


15-1195771536
Real
2007-11-23 01:45
2007.12.23
Поиск HTML (по верстке)


2-1195914602
savyhinst
2007-11-24 17:30
2007.12.23
GIF