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

Вниз

Оцените код 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.63 MB
Время: 0.043 c
2-1195993145
m-kirill-2003
2007-11-25 15:19
2007.12.23
двоичная, шестнадцатиричная с/с


2-1196426968
webpauk
2007-11-30 15:49
2007.12.23
Папка верхнего уровня


2-1196189438
Petrovich
2007-11-27 21:50
2007.12.23
Определение размера динамического массива


2-1195824372
Student00
2007-11-23 16:26
2007.12.23
вызов процедур из модуля, delphi


2-1196173492
misha_gr
2007-11-27 17:24
2007.12.23
Application.BringToFront





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